Pode usar a funcionalidade de instantâneo de volume do Kubernetes para volumes persistentes e aprovisionamento dinâmico nos seus clusters do GKE.
Os instantâneos de volume permitem-lhe criar uma cópia do volume num ponto específico no tempo. Pode usar esta cópia para repor um volume num estado anterior ou para aprovisionar um volume de substituição.
Pode aprovisionar e anexar instantâneos de volumes com os seguintes componentes:
Requisitos
Para usar as cópias instantâneas de volume no GKE no AWS, tem de ter o seguinte:
Um volume que usa um controlador da interface de armazenamento de contentores (CSI) que suporta instantâneos. Os controladores do Elastic Block Store (EBS) que o GKE no AWS usa por predefinição suportam capturas de ecrã.
Para ver uma lista de todos os controladores de CSI que suportam instantâneos, consulte a coluna "Outras funcionalidades" em Controladores na documentação do Kubernetes.
Ter um
PersistentVolumeClaim
existente para usar num instantâneo. OPersistentVolume
que usa para uma origem de instantâneo tem de ser gerido por um controlador CSI. Pode verificar se está a usar um controlador CSI verificando se a especificaçãoPersistentVolume
tem uma secçãocsi
comdriver: ebs.csi.aws.com
. Se o seu cluster Aprovisionar dinamicamente PersistentVolumes pelo controlador CSI, conforme descrito nas secções seguintes, é gerido pelo controlador CSI.
Antes de começar
Crie e use um instantâneo de volume
Os exemplos neste documento mostram como realizar as seguintes tarefas:
- Crie um exemplo
PersistentVolumeClaim
ePod
. - Crie um VolumeSnapshot.
- Restaure a imagem instantânea do volume.
- Verifique se o restauro funcionou.
Para usar uma análise detalhada do volume, tem de concluir os seguintes passos:
- Crie um objeto
VolumeSnapshot
para pedir um instantâneo de um PersistentVolumeClaim existente. - Faça referência ao
VolumeSnapshot
numPersistentVolumeClaim
para restaurar um volume para essa imagem instantânea ou criar um novo volume com a imagem instantânea.
Crie um exemplo de PersistentVolumeClaim
e Pod
Para criar o objeto
PersistentVolumeClaim
, guarde o seguinte manifesto comoexample-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Para
spec.storageClassName
, pode especificar qualquer classe de armazenamento que use um controlador CSI suportado. Este exemplo usa a classe de armazenamentostandard-rwo
predefinida.Aplique o manifesto:
kubectl apply -f example-pvc.yaml
Crie um Pod que escreva a data e a hora atuais no volume. Para criar um Pod, guarde o seguinte manifesto como
snapshot-shell.yaml
:apiVersion: v1 kind: Pod metadata: name: snapshot-shell spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "echo $(date -u) >> /data/out.txt"] volumeMounts: - name: snapshot-volume mountPath: /data restartPolicy: Never volumes: - name: snapshot-volume persistentVolumeClaim: claimName: example-pvc
Aplique o manifesto:
kubectl apply -f snapshot-shell.yaml
Verifique o estado do Pod:
kubectl get pod snapshot-shell
Pode demorar algum tempo até que o Pod seja executado e concluído. Pode executar o comando anterior até ver um resultado semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
Crie um VolumeSnapshot
Um objeto VolumeSnapshot
é um pedido de uma captura de ecrã de um objeto PersistentVolumeClaim
existente. Quando cria um objeto VolumeSnapshot
, o cluster cria e associa-o automaticamente a um objeto VolumeSnapshotContent
, que é um recurso no seu cluster, como um objeto PersistentVolume
.
Guarde o seguinte manifesto como
volumesnapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvc
Aplique o manifesto:
kubectl apply -f volumesnapshot.yaml
Depois de criar uma captura instantânea de volume, o cluster cria um objeto
VolumeSnapshotContent
correspondente. Este objeto armazena a imagem instantânea e as associações de objetosVolumeSnapshot
. Não interage diretamente com objetosVolumeSnapshotContents
.Confirme que o cluster criou o objeto
VolumeSnapshotContents
:kubectl get volumesnapshotcontents
O resultado é semelhante ao seguinte:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Confirme se a cópia instantânea de volume está pronta
Depois de criar o conteúdo da imagem instantânea do volume, o controlador CSI especificado no elemento VolumeSnapshotClass
cria uma imagem instantânea no sistema de armazenamento correspondente. Depois de o cluster criar um instantâneo no sistema de armazenamento e associá-lo a um objeto VolumeSnapshot
, o instantâneo está pronto a usar. Pode verificar o estado executando o seguinte comando:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Se o instantâneo estiver pronto a usar, o resultado é semelhante ao seguinte:
NAME READY
example-snapshot true
Restaure o instantâneo de volume
Pode fazer referência a um VolumeSnapshot
num PersistentVolumeClaim
para aprovisionar um novo volume com dados de um volume existente ou restaurar um volume para um estado capturado na captura de ecrã.
Para fazer referência a um VolumeSnapshot
num PersistentVolumeClaim
, adicione o campo dataSource
ao seu PersistentVolumeClaim
.
Neste exemplo, faz referência ao VolumeSnapshot
que criou num novo
PersistentVolumeClaim
e cria um Pod que monta o
PersistentVolumeClaim
.
Guarde o seguinte manifesto como
pvc-restore.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: example-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Aplique o manifesto:
kubectl apply -f pvc-restore.yaml
Inicie um pod temporário que monte o PVC no pod e imprima o conteúdo de
out.txt
nos registos.Guarde o seguinte manifesto como
restore-log.yaml
:apiVersion: v1 kind: Pod metadata: name: restore-verify spec: volumes: - name: restore-data persistentVolumeClaim: claimName: pvc-restore containers: - name: shell-container image: ubuntu:bionic volumeMounts: - mountPath: "/data" name: restore-data command: [ "/bin/sh" ] args: ["-c", "cat /data/out.txt", "exit", "1"] restartPolicy: Never
Aplique o manifesto:
kubectl apply -f restore-log.yaml
Verifique se o instantâneo foi restaurado com êxito
O Pod que criou no passo anterior lê a partir do resumo. Para ver os dados do resumo, use o comando kubectl logs
.
kubectl logs restore-verify
O resultado deve incluir uma indicação de tempo do instantâneo.
Limpar
Para evitar incorrer em custos pelos recursos usados nesta página, siga estes passos.
Elimine o
VolumeSnapshot
:kubectl delete volumesnapshot example-snapshot
Elimine o pod temporário:
kubectl delete -f restore-log.yaml
Elimine o Pod:
kubectl delete -f snapshot-shell.yaml
Elimine os
PersistentVolumeClaim
objetos:kubectl delete pvc example-pvc pvc-restore
O que se segue?
- Leia a documentação do Volume Snapshot do Kubernetes.
- Instale controladores CSI adicionais.