При тестировании настройки на кластере Kubernetes с двумя рабочими узлами с использованием kind (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 и pod, никаких ошибок не будет!
Хуже того, PV создается в одном месте, поэтому я могу видеть файлы pod1 или pod2 (в зависимости от)!
Я бы предположил, что Kubernetes проверит, что PV для того же хоста с тем же самым действительно существует, но, видимо, это не так.
Я что-то упускаю? Я делаю что-то неправильно? Или нужно быть очень осторожным при создании клипов?
Спасибо за понимание,
Да, это работает, потому что это единственный способ поделиться дисками при использовании локального pv. Это ожидаемое поведение. В некоторых случаях вам может потребоваться обмен файлами между модулями, и это один из способов добиться этого.