Engineering/DevOps
[Kubernetes] PV, PVC 간단 정리, MySQL 띄워보기
Icarus8050
2022. 3. 13. 16:32
반응형
컨테이너의 특징
- 컨테이너 내의 디스크에 있는 파일들은 임시적이다. 즉, 컨테이너가 터미네이트되고 다시 시작되면 내부의 상태는 초기화가 된 상태이다.
- 파드 내에서 같이 실행되는 컨테이너간에 파일 공유가 어렵다.
PV (Persistent Volume)
- PV 는 볼륨 자체를 의미하며, 클러스터 내에서 리소스로 다뤄진다.
- 쿠버네티스에서는 다양한 볼륨을 지원한다.
- AWS EBS, Azure Disk, NFS 등..
- 파드는 PV에 직접 연결하는 것이 아니라 PVC를 통해서 볼륨 마운트를 한다.
- 이러한 추상화 덕분에 파드는 어떤 스토리지를 사용하는지 고려하지 않아도 된다.
ex)
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
name: mysql
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/mysql"
- 생성 초기에는 Status 가 Available 상태인 것을 확인할 수 있다. 이는 아직 pvc 가 바인딩되지 않았다는 뜻이다.
PVC (Persistent Volume Claim)
- 파드는 PVC를 이용하여 물리적인 스토리지를 요청한다.
- 컨트롤 플레인은 동일한 스토리지 클래스를 갖는 적절한 PV를 찾으면 PV에 PVC를 바인딩한다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
- PVC를 생성하고 나서 컨트롤 플레인에 의해 자동으로 바인딩 되어 Status가 Bound 로 변경된 걸 확인할 수 있다.
Statefulset 으로 MySQL 파드 생성
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mysql
image: mysql:8.0.28
env:
- name: MYSQL_ROOT_PASSWORD
value: "1234"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-persistent-storage
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc-claim
- LoadBalancer 타입으로 Service 오브젝트 생성
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
app: mysql
spec:
ports:
- name: mysql
port: 3306
selector:
app: mysql
type: LoadBalancer
반응형