-
PV, PVC, SC 사용시 Tip!K8S 2022. 8. 17. 15:39
틀린 내용이 있을 수도 있습니다!
틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다!
1. StorageClass default로 설정하기
storage class에 다음과 같은 annotation을 추가하여 해당 storage class를 default로 설정할 수 있다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: 'true'
만약 default storage class를 해제하고 싶다면, 이를 false로 변경한다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: 'false'
참고로 default storage class는 하나여야 한다.
2. default storage class를 사용하려면, storageClassName을 명시하지 않는다.
default storageClassName을 사용하지 않으려면 다음과 같이 storageClassName을 ""이라 명시한다.
apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: storageClassName: "" capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: "" accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
3. PVC에 특정 볼륨을 매핑하고 싶은 경우
1) PVC Selector
persistent volume claim에서 특정 Persistent volume만 사용하도록 하고 싶은 경우, selector를 사용하면 된다.
apiVersion: v1 kind: PersistentVolume metadata: name: gluster-volume labels: storage-tier: gold aws-availability-zone: us-east-1 spec: capacity: storage: 2Gi accessModes: - ReadWriteMany glusterfs: endpoints: glusterfs-cluster path: myVol1 readOnly: false persistentVolumeReclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gluster-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi selector: matchLabels: storage-tier: gold aws-availability-zone: us-east-1
2) persistentVolume에서 매핑되는 claim을 지정하기
위의 경우와 반대로 persistent volume에서 매핑할 claim을 지정하는 경우다.
apiVersion: v1 kind: PersistentVolume metadata: name: foo-pv spec: storageClassName: "" claimRef: name: foo-pvc namespace: foo ...
4. PVC에 storageClassName을 지정한 경우
pvc에 storageClassName을 지정하여 Pod를 생성한 경우, pv를 생성하지 않아도 pv가 생성되어 pvc와 바인딩 된다.
이 때, 생성된 pv는 pvc에 명시된 storageClass에 정의된 환원 정책(Delete, Retain)을 사용하게 된다.
참고로 default 환원 정책은 Delete으로 선택된다.
5. local storage class를 이용한 프로비저닝
기본적으로 storage class는 local disk에서의 동적 할당을 지원하지 않는다.
하지만 직접 로컬 경로에 마운트할 디렉터리를 명시하여 사용할 수도 있다.
mkdir -p /data/volumes/pv1
chmod 777 /data/volumes/pv1
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce storageClassName: "" # 디폴트 스토리지 클래스는 사용하지 않음 resources: requests: storage: 1Gi selector: matchLabels: type: clm-test --- apiVersion: v1 kind: PersistentVolume metadata: name: test-pv labels: type: clm-test spec: # 스토리지 클래스를 명시하지 않은 건 pv에서 디폴트 스토리지 클래스를 사용하기 위함 capacity: storage: 1Gi accessModes: - ReadWriteOnce local: path: /data/volumes/pv1 nodeAffinity: # 로컬에 pv를 생성하려면 필요한 필드 required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - {{ node name을 적어주세요 }} --- # 로컬을 사용하는 디폴트 스토리지 클래스 생성 kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer --- 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
반응형'K8S' 카테고리의 다른 글
Keycloak을 이용한 K8S 사용자 분리 (0) 2022.09.04 local 볼륨 동적 프로비저닝을 위한 PV, PVC 예제 (0) 2022.08.26 Pod Status에 Error log만 찍기 (0) 2022.08.08 kubectl Image를 이용한 pod 내에서 secret 생성하기 (0) 2022.08.05 K8S 설계 개념(Kubernetes Design Concept) (0) 2021.09.15