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에 데이터가 들어갔는지 확인)