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

 

반응형