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.