-
local 볼륨 동적 프로비저닝을 위한 PV, PVC 예제K8S 2022. 8. 26. 17:27
틀린 내용이 있을 수도 있습니다!
틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다!
엄밀히 말하면 동적 프로비저닝은 아니다!
하지만 개인 클러스터에서 default storage class를 이용한 동적 프로비저닝이 필요해서
비슷하게나마 흉내내기 위해 사용하는 예제 파일이다.
노드 하나를 정해서 다음과 같이 볼륨 역할을 할 디렉터리를 3개 만들어준다.
# pv1 mkdir -p /data/volumes/pv1 chmod 777 /data/volumes/pv1 # pv2 mkdir -p /data/volumes/pv2 chmod 777 /data/volumes/pv2 # pv3 mkdir -p /data/volumes/pv3 chmod 777 /data/volumes/pv3
디렉터리를 3개 만들었으므로 각 디렉터리에 대한 pv를 생성한다.
이때 pv에 로컬 프로비저닝을 위한 storage class를 명시해주어야 한다.
참고로 명시해주지 않았을 때, default storage class로도 적용되지 않더라.
apiVersion: v1 kind: PersistentVolume metadata: name: test-pv1 spec: storageClassName: local-storage persistentVolumeReclaimPolicy: Delete capacity: storage: 10M accessModes: - ReadWriteOnce local: path: /data/volumes/pv1 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - {{ 노드 이름 }} --- apiVersion: v1 kind: PersistentVolume metadata: name: test-pv2 spec: storageClassName: local-storage persistentVolumeReclaimPolicy: Delete capacity: storage: 10M accessModes: - ReadWriteOnce local: path: /data/volumes/pv2 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - {{ 노드 이름 }} --- apiVersion: v1 kind: PersistentVolume metadata: name: test-pv3 spec: storageClassName: local-storage persistentVolumeReclaimPolicy: Delete capacity: storage: 10M accessModes: - ReadWriteOnce local: path: /data/volumes/pv3 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - {{ 노드 이름 }} --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage annotations: storageclass.kubernetes.io/is-default-class: 'true' provisioner: kubernetes.io/no-provisioner reclaimPolicy: Delete volumeBindingMode: Immediate
이제 잘 동작하는지 검증한다.
다음과 같이 storage class를 사용하지 않도록 pvc를 생성 후, 해당 pvc를 pod에 명시한다.
pvc에서 storage class를 명시하지 않는 이유는 pvc에서 default storage class를 사용하기 위함이며
pvc 생성시 미리 생성해놓은 pv와 pvc가 bound된다.
apiVersion: v1 kind: Pod metadata: name: test-local-vol labels: name: test-local-vol spec: containers: - name: app image: busybox command: ['sh', '-c', 'echo "The local volume is mounted!" > /mnt/test.txt && sleep 3600'] volumeMounts: - name: local-persistent-storage mountPath: /mnt volumes: - name: local-persistent-storage persistentVolumeClaim: claimName: test-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10M
다음과 같이 잘 bound 된것을 확인할 수 있다.
root@tmax:~# k get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc Bound test-pv 10M RWO local-storage 2s
반응형'K8S' 카테고리의 다른 글
Ingress traefik을 이용한 nginx http 배포 (0) 2022.10.25 Keycloak을 이용한 K8S 사용자 분리 (0) 2022.09.04 PV, PVC, SC 사용시 Tip! (0) 2022.08.17 Pod Status에 Error log만 찍기 (0) 2022.08.08 kubectl Image를 이용한 pod 내에서 secret 생성하기 (0) 2022.08.05