Criar vários volumes persistentes locais no mesmo nó com o mesmo caminho funciona sem exceção

Criar vários volumes persistentes locais no mesmo nó com o mesmo caminho funciona sem exceção

Ao fazer testes de configuração em um cluster Kubernetes de 2 nós de trabalho usando kind (https://kind.sigs.k8s.io/docs/user/quick-start), descobri isso e não consigo encontrar informações em outro lugar.

Criei uma pasta em todos os meus nós de trabalho em /var/testpv e criei o seguinte 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

Funcionou bem, então criei um segundo:

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

(Mesmo, apenas nome diferente)

Então criei 2 PVC usando esta classe de armazenamento:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-local-claim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: fast-disks

e

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-local-claim2
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: fast-disks

Então, finalmente, dois pods usando esses PVCs:

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

e

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

Tudo funciona bem, posso ver os arquivos criados em cada um desses pods indo para o armazenamento correto, cada pod em um nó de trabalho diferente.

Porém, se eu tentar criar um novo PV, PVC e pod, não haverá erro algum!

Pior ainda, o PV é criado no mesmo local para que eu possa ver os arquivos pod1 ou pod2 (dependendo)!

Eu teria assumido que o Kubernetes faria algum tipo de verificação de que um PV para o mesmo host realmente existiria, mas aparentemente não existe.

Estou esquecendo de algo? Estou fazendo algo errado? Ou é super necessário ter muito cuidado ao criar PVs?

Obrigado por qualquer visão,

Responder1

Sim, funciona porque é a única maneira de compartilhar discos ao usar pv local. Este é o comportamento esperado. Em alguns casos, você pode querer compartilhar arquivos entre pods e esta é uma maneira de conseguir isso.

informação relacionada