Existe alguma maneira de anexar um volume existente (um que acabei de restaurar de um instantâneo) para um PVC?

1

Eu tenho um mongodb-replicaset criado com o gráfico de leme. O gráfico cria PVCs com base no StorageClass que eu forneço. Anoto meus volumes com uma tag capturada por uma tarefa cron que captura instantaneamente os volumes.

No caso de precisar restaurar de instantâneos de backup, digamos em outro cluster, sei que posso criar um volume a partir do instantâneo, mas não sei como transformar esse volume no PVC que o StatefulSet está esperando e pode reiniciar a partir de.

    
por monty0 24.05.2018 / 18:33

2 respostas

0

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.

    
por 12.09.2018 / 18:04
0

Quando você usa StatefulSet (ou ReplicaSet), ele cria volumes dinamicamente, porque o StatufulSet usa o modelo do PVC e cria vários volumes com base nesse modelo. Portanto, você não pode especificar qual volume será reivindicado pelo PVC. No seu caso, é possível criar um PV baseado no instantâneo, mas ele pode reivindicar apenas em instantâneos. Por exemplo, a captura instantânea da réplica 1 pode ser montada na réplica 3. De fato, é impossível recuperar a instalação assim.

    
por 25.05.2018 / 17:08