[k8s, kubernetes] deployment 설정하기 - k8s에서 mysql 실행하기
기존의 테스트 환경에 구성해뒀던 컨테이너 구성을 k8s 위에서 동작하도록 옮겨보는것을 목표로 진행해보도록 한다.
대략 아래와 같이 docker-compose 파일을 작성하여 mysql 서버들을 띄워두고 있다.
services:
mysql:
image: mysql:8.0.33
container_name: test-mysql
ports:
- 3306:3306 # HOST:CONTAINER
environment:
MYSQL_ROOT_PASSWORD: mysqlrootpassword
MYSQL_DATABASE: test
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- test-mysql-data:/var/lib/mysql
healthcheck:
test: "/usr/bin/mysql --user=root --password=mysqlrootpassword --execute=\"SHOW DATABASES;\""
timeout: 60s
retries: 30
interval: 1s
volumes:
test-mysql-data:
생성 및 적용하기
공식홈페이지의 deployment 문서를 참고하여 아래와 같이 구성하였다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-mysql-deployment
spec:
replicas: 1 # Adjust the number of replicas as needed
selector:
matchLabels:
app: test-mysql
template:
metadata:
labels:
app: test-mysql
spec:
containers:
- name: test-mysql
image: mysql:8.0.33
env:
- name: MYSQL_ROOT_PASSWORD
value: mysqlrootpassword
- name: MYSQL_DATABASE
value: test
command:
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
ports:
- containerPort: 3306
volumeMounts:
- name: test-mysql-data
mountPath: /var/lib/mysql
livenessProbe:
exec:
command:
- mysqladmin
- ping
- "-h"
- "127.0.0.1"
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
readinessProbe:
exec:
command:
- mysqladmin
- ping
- "-h"
- "127.0.0.1"
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
volumes:
- name: test-mysql-data
persistentVolumeClaim:
claimName: test-mysql-pvc
데이터를 저장하기 위한 볼륨도 설정해준다.
퍼시스턴트볼륨은 사용자 및 관리자에게 스토리지 사용 방법에서부터 스토리지가 제공되는 방법에 대한 세부 사항을 추상화하는 API를 제공한다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-mysql-pv
spec:
volumeMode: Filesystem
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /home/jonghoonpark/k8s/pv/test-mysql
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
volumeName: test-mysql-pv
설정이 완료되었으면 apply 명령을 통해 적용한다.
$ kubectl apply -f test-mysql-pv
$ kubectl apply -f test-mysql-pvc
$ kubectl apply -f test-mysql-deployment
결과
deployment 가 정상적으로 적용되면 pod이 생성된다.
포트포워딩을 해서 db 연결을 테스트해보면 정상적으로 연결되는 것을 확인할 수 있다.