더북(TheBook)

Note ≡ 클라우드 스토리지에서 PV와 PVC가 동적으로 할당되는 예제


힌트만 주고 바로 과제를 주는 것은 너무 정이 없는 것 같아서 클라우드에서 작동되는 예제를 준비했습니다.

클라우드의 스토리지와 오브젝트 형태의 스토리지는 동적으로 PVC를 요청을 받아서 처리할 수 있도록 구현돼 있습니다. 이때 오브젝트는 kind: StorageClass를 사용하고, PV와 PVC가 오브젝트를 호출하는 구조입니다. 여기서는 standard.yaml과 같이 StorageClass를 선언합니다. 그리고 메타데이터로 지정한 standard로 호출이 들어오면 동적으로 스토리지를 제공합니다.

standard.yaml

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4.   name: standard 
  5. provisioner: kubernetes.io/gce-pd
  6. parameters:
  7.   type: pd-standard
  8.   replication-type: none

현재 시스템에서는 실습하기 어려우므로5 작동하는 방식만 나열해 보겠습니다.

1. dynamic-pvc.yaml을 적용해 PVC를 100Gi만큼 요청합니다. 동적으로 설정된 PV는 PVC의 요청에 따라 생성됩니다. ‘그림 3-67 PV와 PVC의 관계도’를 다시 한 번 보고 오면 이해하기가 쉽습니다.

admin@dynamic-pvc$ kubectl apply -f \
https://raw.githubusercontent.com/sysnet4admin/_Book_k8sInfra/main/ch3/3.4.4/dynamic-pvc.yaml
persistentvolumeclaim/dynamic-pvc created

코드는 다음과 같이 거의 비슷하지만, 제공자에 따라 storageClassName을 작성해야 합니다. 여기서는 번거로움을 피하기 위해서 storageClassName 추가하지 않고 공란으로 둡니다. 공란으로 두면 기본값(standard)을 사용합니다.

dynamic-pvc.yaml

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4.   name: dynamic-pvc
  5. spec:
  6.   accessModes:
  7.     - ReadWriteOnce
  8.   resources:
  9.     requests:
  10.       storage: 100Gi
  11. # storageClassName: <기본값 사용>

제공 업체별 storageClassName의 기본값은 다음과 같습니다.

▼ 표 3-5 제공 업체별 storageClassName 기본값

제공 업체

기본 StorageClass 이름

기본 프로비저너

Amazon Web Services

gp2

aws-ebs

Microsoft Azure

standard

azure-disk

Google Cloud Platform

standard

gce-pd

OpenStack

standard

cinder

VMware vSphere

thin

vsphere-volume

2. 생성된 PVC와 PVC 요청에 따라 생성된 PV를 함께 확인합니다.

admin@dynamic-pvc$ kubectl get pvc
NAME         STATUS  VOLUME               CAPACITY  ACCESS MODES  STORAGECLASS  AGE
dynamic-pvc  Bound   pvc-…-42010ab20015  100Gi     RWX           standard      13s
admin@dynamic-pvc$ kubectl get pv
NAME                                      CAPACITY  ACCESS MODES  STORAGECLASS  …  STATUS   …       AGE
                  pvc-…-42010ab20015     100Gi     RWX           standard      …  Bound    …       4s

3. 해당 PVC를 사용할 파드들을 생성합니다.

admin@dynamic-pvc$ kubectl apply -f \
https://github.com/sysnet4admin/_Book_k8sInfra/blob/main/ch3/3.4.4/dynamic-pvc-deploy.yaml
deployment.apps/dynamic-pvc-deploy created

dynamic-pvc를 사용하도록 이름을 변경한 것 외에는 dynamic-pvc.yaml과 모두 동일합니다.

dynamic-pvc-deploy.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: dynamic-pvc-deploy
  5. spec:
  6.   replicas: 3
  7.   selector:
  8.     matchLabels:
  9.       app: dynamic-pvc-deploy
  10.   template:
  11.     metadata:
  12.       labels:
  13.         app: dynamic-pvc-deploy
  14.     spec:
  15.       containers:
  16.       - name: audit-trail
  17.         image: sysnet4admin/audit-trail
  18.         volumeMounts:
  19.         - name: dynamic-vol
  20.           mountPath: /audit
  21.       volumes:
  22.       - name: dynamic-vol
  23.         persistentVolumeClaim:
  24.           claimName: dynamic-pvc

4. 배포된 파드를 확인합니다.

admin@dynamic-pvc$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
dynamic-pvc-deploy-78fc9c89c5-72nv6   1/1     Running   0          3m19s
dynamic-pvc-deploy-78fc9c89c5-lg4zr   1/1     Running   0          3m19s
dynamic-pvc-deploy-78fc9c89c5-xh45v   1/1     Running   0          3m19s

5. 배포된 파드 중 1개에 exec로 접속해 df -h로 마운트된 볼륨을 확인합니다. 그런 다음 /audit에 설정한 것과 같이 100Gi(98G) 용량이 마운트된 것을 확인할 수 있습니다.

admin@dynamic-pvc$ kubectl exec -it dynamic-pvc-deploy-78fc9c89c5-72nv6 -- /bin/bash
root@dynamic-pvc-deploy-78fc9c89c5-72nv6:/# df -h
Filesystem   Size    Used   Avail  Use%   Mounted on
overlay       95G    2.9G     92G    4%   /
tmpfs         64M       0     64M    0%   /dev
tmpfs        1.9G       0    1.9G    0%   /sys/fs/cgroup
/dev/sdb      98G    61M     98G    1%   /audit
/dev/sda1     95G    2.9G     92G    4%   /etc/hosts
shm           64M       0     64M    0%   /dev/shm
tmpfs        1.9G     12K    1.9G    1%   /run/secrets/kubernetes.io/serviceaccount
tmpfs        1.9G       0    1.9G    0%   /proc/acpi
tmpfs        1.9G       0    1.9G    0%   /proc/scsi
tmpfs        1.9G       0    1.9G    0%   /sys/firmware

예제는 여기까지입니다. 과제를 해결하는 데 도움이 되길 바랍니다.

 

 


5 이 실습은 클라우드 환경(EKS, GKE, AKS)에서 실습한 것입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.