Назад | Перейти на главную страницу

Безусловно, создание нескольких локальных постоянных томов на одном узле с одним и тем же путем работает

При тестировании настройки на кластере 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. Это ожидаемое поведение. В некоторых случаях вам может потребоваться обмен файлами между модулями, и это один из способов добиться этого.