![同じノードに同じパスで複数のローカル永続ボリュームを作成すると、例外なく動作します。](https://rvso.com/image/747335/%E5%90%8C%E3%81%98%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AB%E5%90%8C%E3%81%98%E3%83%91%E3%82%B9%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E6%B0%B8%E7%B6%9A%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E4%BE%8B%E5%A4%96%E3%81%AA%E3%81%8F%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
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 つの方法です。