동일한 경로를 사용하여 동일한 노드에 여러 로컬 영구 볼륨을 생성하면 예외적으로 작동합니다.

동일한 경로를 사용하여 동일한 노드에 여러 로컬 영구 볼륨을 생성하면 예외적으로 작동합니다.

종류를 사용하여 2개의 작업자 노드 Kubernetes 클러스터에서 설정 테스트를 수행하는 동안(https://kind.sigs.k8s.io/docs/user/quick-start), 내가 이걸 생각해냈는데 다른 곳에서는 정보를 찾을 수 없습니다.

/var/testpv의 모든 작업자 노드에 폴더를 만들고 다음 PV를 만들었습니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pg-pv
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: fast-disks
  local:
    path: /var/testpv
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - fvi-worker2
          - fvi-worker

잘 작동해서 두 번째 것을 만들었습니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pg-pv2
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: fast-disks
  local:
    path: /var/testpv
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - fvi-worker
          - fvi-worker2

(같은데 이름만 다름)

그런 다음 이 저장소 클래스를 사용하여 2개의 PVC를 만들었습니다.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-local-claim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: fast-disks

그리고

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-local-claim2
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: fast-disks

그런 다음 마지막으로 해당 PVC를 사용하는 두 개의 포드:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: example-local-claim

그리고

apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: example-local-claim2

모두 잘 작동합니다. 각 포드에서 생성된 파일이 올바른 스토리지로 이동하는 것을 볼 수 있습니다. 각 포드는 다른 작업자 노드에 있습니다.

그러나 새 PV, PVC 및 포드를 생성하려고 하면 오류가 전혀 발생하지 않습니다!

더 나쁜 것은 PV가 동일한 위치에 생성되므로 실제로 pod1 또는 pod2(종속) 파일을 볼 수 있다는 것입니다!

나는 Kubernetes가 동일한 호스트에 대한 PV가 실제로 존재하는지 일종의 확인을 수행할 것이라고 가정했지만 분명히 그렇지 않습니다.

내가 뭔가를 놓치고 있는 걸까? 내가 뭔가 잘못하고 있는 걸까? 아니면 PV를 생성하는 동안 실제로 매우 조심해야 합니까?

통찰력을 가져 주셔서 감사합니다.

답변1

예, 로컬 PV를 사용할 때 디스크를 공유하는 유일한 방법이기 때문에 작동합니다. 이는 예상된 동작입니다. 경우에 따라 포드 간에 파일을 공유할 수 있으며 이는 이를 달성하는 한 가지 방법입니다.

관련 정보