ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] PV, PVC 간단 정리, MySQL 띄워보기
    Engineering/DevOps 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

     

    반응형

    댓글

Designed by Tistory.