목차

Kubernetes Volume - PV & PVC

  • Retain: PVC 삭제 → PV Status(bound → Released)로 바뀌며 다른 PVC가 연결 될 수 없는 상테 PV 속 데이터는 유지
  • Delete: PVC 삭제 → PV 삭제
  • Recycle: PVC 삭제 → PV Status(bound → Pending)로 바뀜, 다른 PVC 대기
  • ROX(ReadOnlyMany) - 일기만 가능, 모든 노드 접근 가능
  • RWX(ReadWriteMany) - 읽기, 쓰기, 모든 노드 접근 가능
  • RWO(ReadWriteOnce) - 읽기, 쓰기, 단일노드
  • PV123.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  capacity:
    storage: 1G
  accessModes:
  - ReadWriteOnce
  local:
    path: /data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2
spec:
  capacity:
    storage: 1G
  accessModes:
  - ReadOnlyMany
  local:
    path: /data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv3
spec:
  capacity:
    storage: 2G
  accessModes:
  - ReadWriteMany
  local:
    path: /data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
  • PVC1234.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  accessModes:
  - ReadOnlyMany
  resources:
    requests:
      storage: 1G
      #PV2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc2
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
      #pv1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc3
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5G
      #Pending
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc4
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1G
      #pv?
  • 테스트
$ kubectl apply -f pv123.yaml

$ kubectl apply -f pvc1234.yaml

$ kubectl get pv,pvc
NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM          STORAGECLASS   REASON   AGE
persistentvolume/pv1   1G         RWO            Retain           Bound    default/pvc2                           4m10s
persistentvolume/pv2   1G         ROX            Retain           Bound    default/pvc1                           4m10s
persistentvolume/pv3   2G         RWX            Retain           Bound    default/pvc4                           4m10s

NAME                         STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/pvc1   Bound     pv2      1G         ROX                           3m55s
persistentvolumeclaim/pvc2   Bound     pv1      1G         RWO                           3m55s
persistentvolumeclaim/pvc3   Pending                                                     3m55s
persistentvolumeclaim/pvc4   Bound     pv3      2G         RWX                           3m55s
  • 사용
apiVersion: v1
kind: Pod
metadata:
  name: mynode-pod
spec:
  containers:
  - image: nginx:1.24.0
    name: pv-pvc-pvccontainer
    ports:
    - containerPort: 80
    volumeMounts:
    - name: pvc-path
      mountPath: /pvc-data
  volumes:
  - name: pvc-path
    persistentVolumeClaim:
      claimName: pvc1
  • 라벨을 사용한 지정
  • 라벨을통해 직접 연결 할 수 있다.
    • pv-pvc-label.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv4
  labels:
    name: pv4
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  local:
    path: /data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: label-pv
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: \"\"
  selector:
    matchLabels:
      name: pv4
  • 기타 (NFS PV)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 1G
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  mountOptions:
  - hard
  nfs:
    path: /DATA1
    server: 10.10.10.90