同じノードに同じパスで複数のローカル永続ボリュームを作成すると、例外なく動作します。

同じノードに同じパスで複数のローカル永続ボリュームを作成すると、例外なく動作します。

kind (を使用して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

問題なく動作したので、2 つ目を作成しました:

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 を使用する 2 つのポッド:

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 を使用するときにディスクを共有する唯一の方法であるため、機能します。これは想定される動作です。場合によっては、ポッド間でファイルを共有する必要がある場合があり、これはそれを実現する 1 つの方法です。

関連情報