Aprendi que StatefulSet
procurará PVCs com nomes específicos. Eu descobri isso na documentação do link que diz:
The storage for a given Pod must either be provisioned by a PersistentVolume Provisioner based on the requested storage class, or pre-provisioned by an admin.
E através da experimentação, descobri que o pré-provisionamento significava apenas criar PersistentVolumeClaim
s com os nomes esperados.
Consegui restaurar um instantâneo do EBS para um volume, criar um PersistentVolume
fazendo referência diretamente ao ID do volume restaurado e, em seguida, criar um PersistentVolumeClaim
com o nome correto. Então, por exemplo, essa instalação do mongo espera volumes nomeados como datadir-pii-mongodb-replicaset-[0-2]
e, depois de restaurar o instantâneo do EBS para um volume, eu uso o seguinte yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
labels:
failure-domain.beta.kubernetes.io/region: us-west-2
failure-domain.beta.kubernetes.io/zone: us-west-2a
name: pv-a
namespace: larksettings-pii
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 320Gi
awsElasticBlockStore:
fsType: xfs
volumeID: aws://us-west-2a/vol-xxxxxxxxxxxxx
storageClassName: mongo-xfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: mongodb-replicaset
release: pii
name: datadir-pii-mongodb-replicaset-0
namespace: larksettings-pii
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 320Gi
storageClassName: mongo-xfs
volumeName: pv-a
Tenha cuidado com as zonas de disponibilidade. Como abordei três zonas, precisei restaurar os três instantâneos em zonas separadas e garantir que as PersistentVolume
spec refletissem isso.