본문 바로가기
쿠버네티스,쿠버플로우

쿠붕이 프로젝트!!!

by 세용용용용 2023. 7. 13.

1. 도커 허브에 이미지 만들기

mkdir sy0218 >>>> 작업 폴더만들기

cd sy0218

 

vim dockerfile

FROM python:latest
WORKDIR /app
COPY main.py /app/main.py
RUN pip install pandas numpy pymysql scikit-learn scipy
CMD [ "python" , "main.py" ] 

 

vim main.py

import pymysql
import pandas as pd
import numpy as np

# CSV 파일을 데이터프레임으로 읽어오기
data.fillna('NAN', inplace=True)
data1.fillna('NAN', inplace=True)

# MariaDB 연결 설정
host = 'mydb-0.mydb' # external IP
port = 3306 # 포트번호
user = 'root' # 사용자명
password = '1234' # 비밀번호
database = 'testdb' # 데이터베이스명

# MariaDB 연결
conn = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
cursor = conn.cursor()

# 테이블 생성 SQL 문 작성
table_name = 'train'
table_name1 = 'test'

# 테이블이 이미 존재하는 경우 삭제
drop_table_sql = "DROP TABLE IF EXISTS `{}`".format(table_name)
drop_table_sql1 = "DROP TABLE IF EXISTS `{}`".format(table_name1)
cursor.execute(drop_table_sql)
cursor.execute(drop_table_sql1)

create_table_sql = '''
CREATE TABLE `{}` (
`index` INT,
`gender` VARCHAR(1),
`car` VARCHAR(1),
`reality` VARCHAR(1),
`child_num` INT,
`income_total` FLOAT,
`income_type` VARCHAR(50),
`edu_type` VARCHAR(50),
`family_type` VARCHAR(50),
`house_type` VARCHAR(50),
`DAYS_BIRTH` INT,
`DAYS_EMPLOYED` INT,
`FLAG_MOBIL` INT,
`work_phone` INT,
`phone` INT,
`email` INT,
`occyp_type` VARCHAR(50),
`family_size` FLOAT,
`begin_month` FLOAT,
`credit` FLOAT
)
'''.format(table_name)

create_table_sql1 = '''
CREATE TABLE `{}` (
`index` INT,
`gender` VARCHAR(1),
`car` VARCHAR(1),
`reality` VARCHAR(1),
`child_num` INT,
`income_total` FLOAT,
`income_type` VARCHAR(50),
`edu_type` VARCHAR(50),
`family_type` VARCHAR(50),
`house_type` VARCHAR(50),
`DAYS_BIRTH` INT,
`DAYS_EMPLOYED` INT,
`FLAG_MOBIL` INT,
`work_phone` INT,
`phone` INT,
`email` INT,
`occyp_type` VARCHAR(50),
`family_size` FLOAT,
`begin_month` FLOAT
)
'''.format(table_name1)

# 테이블 생성
cursor.execute(create_table_sql)
cursor.execute(create_table_sql1)

# 데이터프레임의 데이터를 테이블에 삽입하는 SQL 문 실행
insert_data_sql = '''
INSERT INTO `{}` (
`index`, `gender`, `car`, `reality`, `child_num`, `income_total`,
`income_type`, `edu_type`, `family_type`, `house_type`, `DAYS_BIRTH`,
`DAYS_EMPLOYED`, `FLAG_MOBIL`, `work_phone`, `phone`, `email`,
`occyp_type`, `family_size`, `begin_month`, `credit`
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
'''.format(table_name)

insert_data_sql1 = '''
INSERT INTO `{}` (
`index`, `gender`, `car`, `reality`, `child_num`, `income_total`,
`income_type`, `edu_type`, `family_type`, `house_type`, `DAYS_BIRTH`,
`DAYS_EMPLOYED`, `FLAG_MOBIL`, `work_phone`, `phone`, `email`,
`occyp_type`, `family_size`, `begin_month`
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
'''.format(table_name1)

# 데이터프레임의 각 행을 튜플로 변환하여 삽입
for row in data.itertuples(index=False):
cursor.execute(insert_data_sql, row)

# 데이터프레임의 각 행을 튜플로 변환하여 삽입
for row in data1.itertuples(index=False):
cursor.execute(insert_data_sql1, row)

# 변경사항 저장 및 연결 종료
conn.commit()

# SQL 쿼리 실행하여 테이블 가져오기
query = "SELECT * FROM train"
query1 = "SELECT * FROM test"
df = pd.read_sql(query, conn)
df1 = pd.read_sql(query1, conn)
# 데이터베이스 연결 종료
conn.close()

 

이미지 생성하기

docker build -t sytest02229:latset .

 

이미지 생성되었는지 확인!!!!

docker images

 

docker tag sy02229:latest sy02229/sytest02229:latest >>> 주어진 명령어는 Docker 이미지에 태그를 추가하는 명령어

 

도커 허브에 push하려면 일단 로그인을 해야됨 로그인 ㄱㄱㄱㄱ

docker login

 

도커 push 명령을 사용해 저장소에 이미지를 업로드 하자

docker push sy02229/sytest02229:latest

 

2. NFS 스토리지 구성(동적 볼륨 구성을 위해)

(1) NFS 서버 구성(kube-control1)

이 작업은 NFS 서버로 구성할 kube-control1 호스트에서 작업한다

 

nfs 서버 패키지를 설치

sudo apt install -y nfs-kernel-server

 

nfs 공유 디렉터리를 설정한다

sudo mkdir /srv/nfs-volume

 

NFS 내보내기를 설정한다

echo "/srv/nfs-volume *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee /etc/exports

 

NFS 공유 디렉터리에 파드가 사용할 index.html 파일을 생성한다.

echo "hello NFS volume" | sudo tee /srv/nfs-volume/index.html

 

NFS 내보내기 설정을 다시 읽어 들인다.

sudo exportfs -arv

 

(옵션) 방화벽이 설정되어 있는 경우, NFS 서비스 포트인 2049번 포트를 방화벽에서 연다.

sudo iptables -A INPUT -p tcp --dport 2049 -j ACCEPT

sudo iptables -A INPUT -p udp --dport 2049 -j ACCEPT

 

(2) NFS 클라이언트 구성(노드1, 노드2, 노드3)

NFS클라이언트로 설정할 노드1, 노드2, 노드3에 NFS 클라이언트 패키지를 설치한다!!

vargrant ssh kube-node1

sudo apt install -y nfs-common

vargrant ssh kube-node2

sudo apt install -y nfs-common

vargrant ssh kube-node3

sudo apt install -y nfs-common

 

 

3. 스테이트풀셋을 활용해 mysql 백업 복제본 구성

1) mysql 설정 파일 컨피그맵 생성

vim mydb-cm-mysql.yaml

컨피그맵 생성 명령어

kubectl create -f mydb-cm-mysql.yaml

 

 

2) 서비스 생성(두개 생성해야됨 헤드리스, 비헤드리스)

- 데이터베이스 쓰기를 위한 헤드리스 서비스

- 데이터베이스 읽기를 위한 비-헤드리스 서비스

 

두 서비스 생성 명령어

kubectl create -f mydb-svc-write.yaml -f mydb-svc-read.yaml

 

 

3) 고가용성을 위한 mysql 데이터베이스 생성

kubectl create -f mydb-sts-mysql.yaml >>> mysql 스테이트풀셋 리소스 생성

 

 

4. 크론잡 컨트롤러 생성

vim syapp-cj.yaml

kubectl create -f syapp-cj.yaml

 

스케줄러 동작후

mydb-1.mydb(슬레이브 db에 데이터가 들어갔는지 확인)