Создание нескольких локальных постоянных томов на одном узле с одним и тем же путем работает без исключений

Создание нескольких локальных постоянных томов на одном узле с одним и тем же путем работает без исключений

При выполнении тестирования настройки на кластере Kubernetes с 2 рабочими узлами с использованием вида (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

И, наконец, два модуля, использующих эти ПВХ:

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?

Спасибо за любую информацию.

решение1

Да, это работает, потому что это единственный способ совместного использования дисков при использовании локального pv. Это ожидаемое поведение. В некоторых случаях вам может понадобиться совместное использование файлов между подами, и это один из способов достижения этого.

Связанный контент