클라우드 + DevOps/Kubernetes (k8s)

Kubernetes 쿠버네티스 실습 :: MySQL 서버 구축

gamjadori 2024. 4. 17. 15:48
728x90

<Kubernetes 쿠버네티스 실습 :: MySQL 서버 구축>

1. MySQL 컨테이너 호스팅 포드 파일 제작

<mydata.yaml>

  • mydata-pod라는 포드는 k8s-node1 노드에만 스케줄링
  • MySQL 데이터베이스를 호스팅하는 Pod 생성
  • 데이터는 k8s-node1 노드의 /DATA1/mysql-data 경로에 저장
apiVersion: v1
kind: Pod
metadata:
	name: mydata-pod
spec:
	nodeSelector:
		kubernetes.io/hostname: k8s-node1
	containers:
	- name: mydata-container
		image: mysql:8.0
		volumMounts:
		- name: host-path
			mountPath: /var/lib/mysql
		env:
		- name: MYSQL_ROOT_PASSWORD
			value: "password"
		volumes:
		- name: host-path
			hostPath:
				path: /DATA1/mysql-data
				type: DirectortOrCreate
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl apply -f mydata.yaml

<생성 확인>

 

2. MySQL 서버 접속 후 데이터 생성

[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl exec -it mydata-pod -- bash
bash-4.4# mysql -uroot -p

<기본 환경>

mysql> show databases;

  • 새로운 데이터베이스(k8sdb) 생성
  • k8s 테이블 생성 ( "c1"이라는 정수형 열 / "c2"라는 VARCHAR(20) 열로 구성)
  • "k8s" 테이블에 (1, 'k8s') 삽입
  • "k8s" 테이블에 (2, '****') 삽입
mysql> create database k8sdb;
Query OK, 1 row affected (0.02 sec)

mysql> use k8sdb
Database changed

mysql> create table k8s (c1 int, c2 varchar(20));
Query OK, 0 row affected (0.06 sec)

mysql> insert into k8s values (1, 'k8s');
Query OK, 1 row affected (0.02 sec)

mysql> insert into k8s values (2, '****');
Query OK, 1 row affected (0.02 sec)

mysql> select * from k8s;

<결과 확인>

 

3. 포드 생성

  • k8s-node2 노드에만 스케줄링되는 MySQL 서버 제작
  • yaml 파일 복사해 수정을 거친 후 제작
[PS C:\\Users\\admin\\Desktop\\k8s-pods> cp mydate.yaml mydata2.yaml

<mydata2.yaml>

  • mydata-pod라는 포드는 노드 k8s-node2에만 스케줄링
  • Pod은 MySQL 컨테이너를 호스팅
  • 데이터를 "/DATA1/mysql-data" 경로에 저장
apiVersion: v1
kind: Pod
metadata:
  name: mydata-pod
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node2
  containers:
  - name: mydata-container
    image: mysql:8.0
    volumeMounts:
    - name: host-path
      mountPath: /var/lib/mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "password"
  volumes:
  - name: host-path
    hostPath:
      path: /DATA1/mysql-data
      type: DirectoryOrCreate

<적용>

[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl apply -f mydata2.yaml

 

4. 데이터 공유 확인

  • 새로 제작한 포드에 접속해 이전에 제작한 데이터가 남아있는지 확인
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl exec -it mydata-pod -- bash
bash-4.4# mysql -uroot -p

<결과 확인>

mysql> use k8sdb;
Database changed

mysql> select * from k8s;