Nesta página, mostramos como fazer backup e restaurar o armazenamento do Filestore usando snapshots de volume do Kubernetes.
Criar um snapshot de volume do Kubernetes é equivalente a criar um backup do Filestore. Para mais informações, consulte Sobre snapshots de volume do Kubernetes.
Requisitos
Para usar snapshots de volume no GKE, você precisa atender aos seguintes requisitos:
Você precisa implantar o Driver CSI do Filestore: Apenas os níveis de serviço do Filestore a seguir têm suporte:
- HDD básico com o GKE versão 1.21 ou posterior
- HDD básico (100 GiB a 63,9 TiB) com o GKE versão 1.33 ou mais recente
- SSD básico com o GKE versão 1.21 ou posterior
- Por zona (1 TiB a 9,75 TiB) com o GKE versão 1.31 ou mais recente
- Por zona (10 TiB a 100 TiB) com o GKE versão 1.27 ou mais recente
- Regional com o GKE versão 1.33.4-gke.1172000 ou posterior
- Enterprise com o GKE versão 1.25 ou posterior
Use as versões 1.17 ou mais recentes do plano de controle. Para usar a propriedade Driver CSI do Filestore em um
VolumeSnapshot, use o número de versão do GKE aplicável para seu nível de serviço.
- Tenha um
PersistentVolumeClaimpara usar em um snapshot. OPersistentVolumeque você usa para uma origem de snapshot precisa ser gerenciado por um driver CSI. Para saber se você está usando um driver CSI, verifique se a especificação doPersistentVolumetem uma seçãocsicomdriver: pd.csi.storage.gke.iooufilestore.csi.storage.gke.io. Se oPersistentVolumefor provisionado dinamicamente pelo driver CSI conforme descrito nas seções a seguir, ele será gerenciado pelo driver CSI.
Limitações
Os volumes de snapshots têm as mesmas restrições de tamanho que os volumes regulares. Por exemplo, os snapshots do Filestore precisam ser maiores ou iguais a 1 TiB para o nível HDD básico.
O driver CSI do Filestore não oferece suporte a fluxos de trabalho dinâmicos de provisionamento ou backup para o nível de serviço regional do Filestore:
Só é possível fazer backup de um compartilhamento por instância por vez. Isso significa que não é possível criar um backup de várias ações ou restaurar um backup para uma instância com várias ações. No entanto, as solicitações de backup de dois compartilhamentos diferentes em duas instâncias diferentes do Filestore serão executadas ao mesmo tempo.
É possível restaurar um backup de uma instância básica para a instância de origem do mesmo nível de serviço, uma instância já existente ou uma nova instância. Se você escolher uma nova instância, poderá escolher entre uma instância básica de HDD e uma básica de SSD, independentemente do nível da instância de origem.
Não é possível restaurar instâncias zonais, regionais e empresariais para uma instância de origem ou atual, apenas para uma nova. O nível da nova instância não precisa corresponder ao nível da instância de origem. Por exemplo, é possível restaurar o backup de uma instância regional para uma zonal. A capacidade provisionada da nova instância precisa ser igual ou maior que a da instância de origem.
Para ver uma lista completa das limitações de recursos, consulte Limitações de recursos de backup do Filestore.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e inicialize a
gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
Como criar e usar um snapshot de volume
Os exemplos neste documento mostram como fazer o seguinte:
- Crie um
PersistentVolumeClaime umDeployment. - Adicione um arquivo a
PersistentVolumeusado peloDeployment. - Crie um
VolumeSnapshotClasspara configurar o snapshot. - Crie um snapshot de volume do
PersistentVolume. - Exclua o arquivo de teste.
- Restaure o
PersistentVolumepara o snapshot criado. - Verifique se a restauração funcionou.
Para usar um snapshot de volume, conclua as etapas a seguir:
- Crie um objeto
VolumeSnapshotClasspara especificar o driver CSI e a política de exclusão do snapshot. - Crie um objeto
VolumeSnapshotpara solicitar um snapshot de umPersistentVolumeClaimexistente. - Faça referência ao
VolumeSnapshotem umPersistentVolumeClaimpara restaurar um volume para esse snapshot ou criar um novo volume usando o snapshot.
Criar um PersistentVolumeClaim e um Deployment
Para criar o objeto
PersistentVolumeClaim, salve o manifesto a seguir comomy-pvc.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1TiEste exemplo cria um PVC do Filestore de nível empresarial. Para saber mais, consulte Acessar instâncias do Filestore com o driver CSI do Filestore.
Para
spec.storageClassName, é possível especificar qualquer classe de armazenamento que use um driver CSI compatível.Aplique o manifesto:
kubectl apply -f my-pvc.yamlPara criar um
Deployment, salve o seguinte manifesto comomy-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app 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: sdk-volume mountPath: /usr/share/hello/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvcAplique o manifesto:
kubectl apply -f my-deployment.yamlVerifique o status de
Deployment.kubectl get deployment hello-appPode levar algum tempo para
Deploymentficar pronto. Execute o comando anterior até ver uma saída semelhante a esta:NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 2m55s
Adicionar um arquivo de teste ao volume
Liste o
PodsnoDeployment:kubectl get pods -l app=hello-appO resultado será assim:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56sCrie um arquivo de teste em um
Pod:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'Substitua
POD_NAMEpelo nome doPod.Verifique se o arquivo existe.
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'O resultado será assim:
Hello World!
Criar um objeto VolumeSnapshotClass.
Crie um objeto VolumeSnapshotClass para especificar o driver CSI e deletionPolicy para o snapshot de volume. É possível referenciar
objetos VolumeSnapshotClass ao criar objetos VolumeSnapshot.
Salve o seguinte manifesto
volumesnapshotclass.yamlcomo :Filestore
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: filestore.csi.storage.gke.io parameters: type: backup deletionPolicy: DeleteNeste exemplo:
- O campo
driveré usado pelo driver CSI para provisionar o snapshot. Neste exemplo,filestore.csi.storage.gke.iousa o driver CSI do Filestore (em inglês). - O campo
deletionPolicyinforma ao GKE o que fazer com o objetoVolumeSnapshotContente o snapshot subjacente quando o objetoVolumeSnapshotvinculado é excluído. EspecifiqueDeletepara excluir o objetoVolumeSnapshotContente o snapshot subjacente. EspecifiqueRetainse quiser manterVolumeSnapshotContente o snapshot subjacente.
- O campo
Aplique o manifesto:
kubectl apply -f volumesnapshotclass.yaml
Criar um VolumeSnapshot
Um objeto VolumeSnapshot é uma solicitação para um snapshot de um objeto PersistentVolumeClaim atual. Quando você cria um objeto VolumeSnapshot, o GKE o cria e o vincula automaticamente a um objeto VolumeSnapshotContent, que é um recurso no cluster como um objeto PersistentVolume.
Salve o seguinte manifesto
volumesnapshot.yamlcomo :apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvcAplique o manifesto:
kubectl apply -f volumesnapshot.yamlDepois de criar um snapshot
Volume, o GKE cria um objetoVolumeSnapshotContentcorrespondente no cluster. Esse objeto armazena o snapshot e as vinculações dos objetosVolumeSnapshot. Você não interage diretamente com objetosVolumeSnapshotContents.Confirme se o GKE criou o objeto
VolumeSnapshotContents:kubectl get volumesnapshotcontentsO resultado será assim:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Depois que o conteúdo do snapshot de Volume é criado, o driver CSI especificado
em VolumeSnapshotClass cria um snapshot no sistema de armazenamento
correspondente. Depois que o GKE cria um snapshot no sistema de armazenamento e
o vincula a um objeto VolumeSnapshot no cluster, o snapshot está
pronto para uso. Verifique o status executando o seguinte comando:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Se o snapshot estiver pronto para uso, a saída será semelhante a esta:
NAME READY
my-snapshot true
Excluir o arquivo de teste
Exclua o arquivo de teste que você criou:
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'Verifique se o arquivo não existe mais:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'O resultado será assim:
cat: /usr/share/hello/hello.txt: No such file or directory
Restaurar o snapshot do volume
É possível referenciar um VolumeSnapshot em um PersistentVolumeClaim para provisionar
um novo volume com dados de um volume atual.
Para fazer referência a um VolumeSnapshot em um PersistentVolumeClaim, adicione o
campo dataSource ao seu PersistentVolumeClaim.
Neste exemplo, você faz referência ao VolumeSnapshot criado em um novo
PersistentVolumeClaim e atualiza o Deployment para usar a nova declaração.
Salve o seguinte manifesto como
pvc-restore.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1TiAplique o manifesto:
kubectl apply -f pvc-restore.yamlAtualize o arquivo
my-deployment.yamlpara usar o novoPersistentVolumeClaim:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restoreAplique o manifesto atualizado:
kubectl apply -f my-deployment.yaml
Verificar se o snapshot foi restaurado
Obtenha o nome do novo
Podque o GKE cria para oDeploymentatualizado:kubectl get pods -l app=hello-app
Verifique se o arquivo de teste existe:
kubectl exec NEW_POD_NAME \
-- sh -c 'cat /usr/share/hello/hello.txt'
Substitua NEW_POD_NAME pelo nome do novo Pod criado pelo GKE.
O resultado será assim:
Hello World!
Importar um snapshot preexistente
É possível usar um snapshot de volume atual criado fora do cluster atual
para provisionar manualmente o objeto VolumeSnapshotContents. Por exemplo, é possível
preencher um volume no GKE com um snapshot de outro
recurso doCloud de Confiance criado em um cluster diferente.
Localize o nome do snapshot.
Console do Cloud de Confiance
CLI do Google Cloud
Execute este comando:
gcloud compute snapshots listO resultado será assim:
NAME DISK_SIZE_GB SRC_DISK STATUS snapshot-5e6af474-cbcc-49ed-b53f-32262959a0a0 1 us-central1-b/disks/pvc-69f80fca-bb06-4519-9e7d-b26f45c1f4aa READYSalve o seguinte manifesto
VolumeSnapshotcomorestored-snapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: restored-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: volumeSnapshotContentName: restored-snapshot-contentAplique o manifesto:
kubectl apply -f restored-snapshot.yamlSalve o seguinte manifesto
VolumeSnapshotContentcomorestored-snapshot-content.yaml. Substitua o camposnapshotHandlepelo ID do projeto e nome do snapshot. TantovolumeSnapshotRef.namequantovolumeSnapshotRef.namespaceprecisam apontar para aVolumeSnapshotcriada anteriormente para que a vinculação bidirecional seja válida.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: restored-snapshot-content spec: deletionPolicy: Retain driver: filestore.csi.storage.gke.io source: snapshotHandle: projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME volumeSnapshotRef: kind: VolumeSnapshot name: restored-snapshot namespace: defaultAplique o manifesto:
kubectl apply -f restored-snapshot-content.yamlSalve o seguinte manifesto
PersistentVolumeClaimcomorestored-pvc.yaml. O controlador de armazenamento do Kubernetes encontrará umVolumeSnapshotchamadorestored-snapshote tentará encontrar ou criar dinamicamente umPersistentVolumecomo a fonte de dados. Depois, use esse PVC em um pod para acessar os dados restaurados.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restored-pvc spec: dataSource: name: restored-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteOnce resources: requests: storage: 1GiAplique o manifesto:
kubectl apply -f restored-pvc.yamlSalve o manifesto
Poda seguir comorestored-pod.yamlse referindo aPersistentVolumeClaim. O driver CSI provisionará umPersistentVolumee o preencherá a partir do snapshot.apiVersion: v1 kind: Pod metadata: name: restored-pod spec: containers: - name: busybox image: busybox args: - sleep - "3600" volumeMounts: - name: source-data mountPath: /demo/data volumes: - name: source-data persistentVolumeClaim: claimName: restored-pvc readOnly: falseAplique o manifesto:
kubectl apply -f restored-pod.yamlVerifique se o arquivo foi restaurado:
kubectl exec restored-pod -- sh -c 'cat /demo/data/hello.txt'
Limpar
Para evitar cobranças na conta do Cloud de Confiance by S3NS pelos recursos usados nesta página, siga as etapas abaixo.
Exclua o
VolumeSnapshot:kubectl delete volumesnapshot my-snapshotExclua o
VolumeSnapshotClass:kubectl delete volumesnapshotclass my-snapshotclassExclua o
Deployment:kubectl delete deployments hello-appExcluir os objetos
PersistentVolumeClaim:kubectl delete pvc my-pvc pvc-restore
A seguir
- Leia a documentação do Snapshot de volume do Kubernetes.
- Saiba mais sobre a expansão de volume.
- Saiba como instalar manualmente um driver CSI.
- Saiba mais sobre o Filestore como uma opção de armazenamento de arquivos para o GKE.