쿠버네티스(Kubernetes)에서 MySQL을 배포할 때, 데이터를 지속적으로 유지하려면 Persistent Volume (PV) 및 **Persistent Volume Claim (PVC)**를 활용해야 합니다. 이 글에서는 MySQL을 쿠버네티스에서 운영하면서 볼륨을 연동하는 방법을 설명합니다.
1. Persistent Volume (PV) 생성
PV는 클러스터 내에서 사용할 수 있는 스토리지 자원을 정의하는 객체입니다. MySQL 데이터를 유지하기 위해 PV를 생성합니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mysql-storage
hostPath:
path: "/mnt/data"
- storage: 10Gi (10GB 크기의 볼륨)
- accessModes: ReadWriteOnce (하나의 노드에서 읽기/쓰기 가능)
- persistentVolumeReclaimPolicy: Retain (삭제 후에도 데이터 유지)
- hostPath: "/mnt/data" (노드의 경로에 데이터를 저장)
2. Persistent Volume Claim (PVC) 생성
PVC는 애플리케이션이 PV를 요청하는 객체입니다. PVC를 생성하여 MySQL Pod에서 사용할 수 있도록 설정합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: mysql-storage
- storageClassName: mysql-storage (PV와 매칭되는 Storage Class 지정)
- accessModes: ReadWriteOnce (하나의 노드에서 접근 가능)
- requests.storage: 10Gi (요청하는 스토리지 크기)
3. MySQL Deployment 및 Service 생성
PVC를 MySQL Pod에서 사용할 수 있도록 Deployment와 Service를 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "rootpassword"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
- image: mysql:5.7 (MySQL 5.7 이미지 사용)
- MYSQL_ROOT_PASSWORD: "rootpassword" (루트 비밀번호 설정)
- volumeMounts: /var/lib/mysql에 PVC를 마운트하여 데이터 보존
- volumes: mysql-pvc와 연결
MySQL Service 생성
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
- ClusterIP 서비스로 설정하여 외부에서 직접 접근할 수 없도록 제한합니다.
- 내부에서 MySQL에 접근하려면 kubectl port-forward를 활용해야 합니다.
kubectl port-forward svc/mysql 3306:3306
이제 로컬 머신에서 다음 명령으로 MySQL에 접근할 수 있습니다.
mysql -h 127.0.0.1 -P 3306 -u root -p
또한 원격 클러스터에서 접근하려면 SSH 터널링을 사용할 수 있습니다.
ssh -L 3306:localhost:3306 user@your-remote-cluster
이렇게 하면 로컬에서 원격 클러스터의 MySQL에 접속할 수 있습니다.
4. 배포 및 확인
이제 위의 YAML 파일들을 적용하여 MySQL을 쿠버네티스 클러스터에 배포합니다.
kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml
배포된 MySQL Pod 확인:
kubectl get pods
MySQL 볼륨 상태 확인:
kubectl get pv
kubectl get pvc
MySQL 컨테이너에 접속하여 데이터가 유지되는지 확인:
kubectl exec -it <mysql-pod-name> -- mysql -u root -p
비밀번호를 입력하고 MySQL이 정상적으로 동작하는지 확인하면 됩니다.
5. 결론
쿠버네티스에서 MySQL과 볼륨(PV & PVC)을 연동하면, Pod가 재시작되어도 데이터를 유지할 수 있습니다.
'DevOps > k8s' 카테고리의 다른 글
| 쿠버네티스 ConfigMap과 Secret 완벽 정리 (0) | 2025.02.05 |
|---|---|
| Kubernetes에서 Service란? (0) | 2025.02.04 |
| Docker + GitHub Actions 배포 vs 쿠버네티스 배포 비교 (0) | 2025.02.04 |
| Kubernetes Deployment를 사용하여 여러 개의 Pod 실행하기 (0) | 2025.02.04 |
| 쿠버네티스 기초 명령어 (0) | 2025.01.22 |