Este documento mostra como criar um snapshot de volume e usá-lo para restaurar o volume. As instruções aqui se aplicam a clusters que usam o driver CSI do vSphere.
Antes de começar
Confira Como usar o driver da interface de armazenamento de contêiner do vSphere.
Verifique
se o cluster tem um StorageClass chamado standard-rwo
e se o
driver CSI do vSphere está instalado.
A versão do vSphere, o ESXi e o vCenter Server, precisam ser a versão 7.0 ou mais recente. Para mais informações, consulte Solução de problemas de armazenamento.
Visão geral das etapas
Estas são as principais etapas do exercício fornecido neste documento:
- Criar um PersistentVolumeClaim.
- Crie um
PersitentVolumeClaim
que solicite a classe de armazenamento
standard-rwo
. Em seguida, o cluster provisiona dinamicamente um PersistentVolume e o associa ao PersistentVolumeClaim.
- Crie uma implantação.
- Crie uma implantação que tenha um pod. O pod especifica um volume com base no seu PersistentVolumeClaim. O contêiner no pod monta o volume em
/hello/
.
- Grave um arquivo no volume do pod.
- Crie um arquivo chamado
hello.txt
no volume do pod. O conteúdo do arquivo é "Hello World!".
- Criar um VolumeSnapshot.
- Crie um VolumeSnapshot que capture o estado do volume do pod.
- Corrompa o arquivo.
- Altere o arquivo
hello.txt
para que ele pareça um arquivo corrompido. O conteúdo do arquivo agora é "Hello W-corrupted-file-orld!"
- Use o snapshot para restaurar o volume.
- Crie um segundo PersistentVolumeClaim que use o VolumeSnapshot como a
fonte de dados. Edite sua implantação para que o volume dela seja associado ao novo
PersistentVolumeClaim. Em seguida, verifique se o arquivo
hello.txt
foi restaurado.
Criar um PersistentVolumeClaim
Confira o manifesto de um PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo
No manifesto anterior, é possível notar que storageClassName
está definido como
standard-rwo
. Essa é a classe de armazenamento associada ao driver CSI do
vSphere.
Salve o manifesto em um arquivo chamado my-pvc.yaml
. Crie e acesse o
PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
Na saída, é possível notar que o PersistentVolumeClaim está vinculado a um
PersistentVolume provisionado dinamicamente. Por exemplo, a saída a seguir
mostra que o PersistentVolumeClaim chamado my-pvc
está vinculado a um
PersistentVolume chamado pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5
:
my-pvc Bound pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5 … standard-rwo 100s
Crie uma implantação
Veja o manifesto de uma implantação:
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: my-volume mountPath: /hello/ volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc
No contexto deste exercício, estes são os pontos importantes que você precisa entender sobre o manifesto de implantação anterior:
O pod solicita armazenamento especificando o PersistentVolumeClaim,
my-pvc
, que você criou anteriormente.O pod tem um contêiner, e o contêiner monta o volume em
/hello/
.
Salve o manifesto em um arquivo chamado my-deployment.yaml
e crie a implantação:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
A implantação tem um pod. Consiga o nome do pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Anote o nome do pod. Por exemplo, na saída a seguir, o nome do pod é my-deployment-7575c4f5bf-r59nt
:
my-deployment-7575c4f5bf-r59nt 1/1 Running 0 65s
Crie um arquivo no volume do pod e acesse o arquivo.
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello World!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
A saída mostra o conteúdo do arquivo /hello/hello.txt
:
Hello World!
Criar um snapshot
Confira o manifesto de um VolumeSnapshot:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: csi-vsphere-snapshot-class source: persistentVolumeClaimName: my-pvc
Salve o manifesto em um arquivo chamado my-snapshot.yaml
e crie o VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Corrompa o arquivo no volume
Altere o conteúdo de hello.txt
para que ele pareça
ter sido corrompido:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello W-corrupted-file-orld!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
Na saída, você notará que o arquivo foi alterado:
Hello W-corrupted-file-orld!
Restaurar
Confira o manifesto do segundo PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc-2 spec: storageClassName: standard-rwo dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
No manifesto anterior, é possível notar que a fonte de dados da novo PersistentVolumeClaim é o VolumeSnapshot criado anteriormente.
Salve o manifesto em um arquivo chamado my-pvc-2.yaml
. Crie e acesse o
PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc-2.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc-2
Abra a implantação para edição:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit deployment my-deployment
Mude my-pvc
para my-pvc-2
e feche o editor:
… volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc-2
A implantação exclui o pod e cria um novo que usa o novo PersistentVolumeClaim.
Aguarde alguns minutos e acesse o novo nome do pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Verifique se o volume do pod foi restaurado:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec NEW_POD_NAME \ -- sh -c 'cat /hello/hello.txt'
A saída mostra que o volume foi restaurado:
Hello World!
Solução de problemas
Para acessar orientações sobre solução de problemas, consulte Solução de problemas de armazenamento.