Configurando capturas instantâneas com o complemento do cluster Block Storage for VPC
Nuvem privada virtual
As capturas instantâneas de volume do Block Storage for VPC fornecem uma maneira padronizada de copiar os conteúdos de um volume em um determinado momento sem criar um volume totalmente novo. Para obter mais informações sobre snapshots, consulte Como funcionam os snapshots. Para obter mais informações sobre o Block Storage for VPC, consulte Sobre o Block Storage for VPC.
Por padrão, o complemento de cluster Block Storage for VPC cria volumes e snapshots no mesmo grupo de recursos VPC em que o cluster é implantado. No entanto, a partir da versão do add-on 5.2.46 e posteriores, você pode criar snapshots em um grupo
de recursos diferente especificando o parâmetro resourceGroup em seu VolumeSnapshotClass. Para obter mais informações, consulte Criação de snapshots em um grupo de recursos diferente.
Criando um app
Crie um exemplo de Solicitação de Volume Persistente (PVC) e implemente um pod que referencie essa solicitação.
-
Verifique se o estado do complemento é
normale o status éReady.ibmcloud oc cluster addon ls --cluster CLUSTER-IDName Version Health State Health Status vpc-block-csi-driver 5.2 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) -
Verifique se os pods do driver estão implementados e se o status é
Running.oc get pods -n kube-system | grep vpc-block-csiSaída de exemplo
ibm-vpc-block-csi-controller-0 7/7 Running 0 77s ibm-vpc-block-csi-node-56c85 4/4 Running 0 77s ibm-vpc-block-csi-node-87j2t 4/4 Running 0 77s ibm-vpc-block-csi-node-cmh2h 4/4 Running 0 77s -
Criar um PVC.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ibmc-vpc-block-5iops-tieroc create -f pvc.yaml -
Verifique se a PVC foi criada e está em um estado
Bound.oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-block-pvc Bound pvc-0798b499-0b61-4f57-a184-4caeb7b9298d 10Gi RWO ibmc-vpc-block-5iops-tier 4m22s -
Crie um arquivo de configuração YAML para uma implementação que monte a PVC criada.
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: replicas: 1 selector: matchLabels: app: my-deployment template: metadata: labels: app: my-deployment spec: containers: - image: nginx # Your containerized app image name: container-name volumeMounts: - mountPath: /myvolumepath # Mount path for PVC name: my-vol # Volume mount name volumes: - name: my-vol # Volume resource name persistentVolumeClaim: claimName: csi-block-pvc # The name of the PVC you created earlieroc create -f pod.yaml -
Verifique se o pod está em execução no cluster.
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
Agora que o pod foi criado, efetue login nele e crie um arquivo de texto a ser usado para a captura instantânea.
oc exec -it POD_NAME /bin/bashSaída de exemplo
root@my-deployment-58dd7c89b6-8zdcl:/# cd myvolumepath/ root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# echo "hi" > new.txt root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# exit
Criando uma captura instantânea do volume
Depois de criar uma implementação e uma PVC, é possível criar os recursos de captura instantânea do volume.
Você pode criar snapshots somente quando um volume estiver anexado a um pod.
-
Certifique-se de que você tenha permissões de Share Snapshot Operator no IAM.
-
Crie um recurso de captura instantânea de volume em seu cluster usando a classe de instantâneos
ibmc-vpcblock-snapshotque é implementada quando você ativou o complemento. Salve a seguinte configuraçãoVolumeSnapshotem um arquivo chamadosnapvol.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-csi-block-pvc spec: volumeSnapshotClassName: ibmc-vpcblock-snapshot source: persistentVolumeClaimName: csi-block-pvcoc create -f snapvol.yaml -
Verifique se o instantâneo está pronto para usar.
oc get volumesnapshotsExemplo de saída em que
READYTOUSEétrue:NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE snapshot-csi-block-pvc true csi-block-pvc 1Gi ibmc-vpcblock-snapshot snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b 18h 18h
Criação de snapshots em um grupo de recursos diferente
A partir da versão Block Storage for VPC cluster add-on 5.2.46 e posteriores, é possível criar snapshots de volume em um grupo de recursos diferente do grupo de recursos do cluster. Esse recurso oferece maior flexibilidade na organização de recursos, no gerenciamento de cotas e no controle de acesso.
- Requisito de versão: Esse recurso é compatível apenas com a versão do add-on 5.2.46 e posterior.
- Comportamento padrão: Se você não especificar um parâmetro
resourceGroupou se especificar uma cadeia de caracteres vazia, os snapshots serão criados no grupo de recursos do cluster.
Pré-requisitos
Antes de começar, verifique se você tem as seguintes permissões no IAM:
- VPC Infrastructure Services (é): Editor e redator
- Kubernetes Service (container-kubernetes): Operador
- Grupo de recursos: Visualizador para cada grupo de recursos onde você deseja criar snapshots
Criação de um VolumeSnapshotClass
Para criar snapshots em um grupo de recursos diferente, é necessário criar um VolumeSnapshotClass personalizado que especifique o ID do grupo de recursos de destino.
-
Obtenha o ID do grupo de recursos onde você deseja criar o instantâneo.
ibmcloud resource groups -
Crie um arquivo de configuração
VolumeSnapshotClass. Salve o YAML a seguir em um arquivo chamadovpc-snap-custom-rg.yaml. Substitua<RESOURCE_GROUP_ID>pela ID do grupo de recursos de destino.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: vpc-snap-custom-rg driver: vpc.block.csi.ibm.io deletionPolicy: Delete parameters: resourceGroup: <RESOURCE_GROUP_ID>O parâmetro
resourceGroupdeve ser a ID do grupo de recursos, não o nome do grupo de recursos. -
Crie o
VolumeSnapshotClassem seu cluster.oc create -f vpc-snap-custom-rg.yaml -
Verifique se o site
VolumeSnapshotClassfoi criado.oc get volumesnapshotclass
Criação de um snapshot com um grupo de recursos personalizado
Depois de criar o VolumeSnapshotClass personalizado, você pode criar snapshots que façam referência a ele.
-
Crie um arquivo de configuração
VolumeSnapshotque faça referência à sua classe de snapshot personalizada. Salve o YAML a seguir em um arquivo chamadosnapshot-custom-rg.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-custom-rg spec: volumeSnapshotClassName: vpc-snap-custom-rg source: persistentVolumeClaimName: csi-block-pvc -
Crie a captura instantânea.
oc create -f snapshot-custom-rg.yaml -
Verifique se o instantâneo está pronto para usar.
oc get volumesnapshots -
Verifique se o snapshot foi criado no grupo de recursos de destino usando a CLI do site IBM Cloud.
ibmcloud target -g <RESOURCE_GROUP_NAME> ibmcloud is snapshots
Restaurando de uma captura instantânea do volume
Depois de implementar os recursos de instantâneo, você pode restaurar os dados em um novo volume usando o instantâneo. A criação de um PVC provisiona dinamicamente um novo volume com dados instantâneos.
-
Crie uma segunda PVC que referencie a captura instantânea do volume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restore-pvc spec: storageClassName: ibmc-vpc-block-5iops-tier dataSource: name: snapshot-csi-block-pvc kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 10Gi -
Verifique se a PVC foi criada e está em um estado
Bound.oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE restore-pvc Bound pvc-4ede7630-5a49-4bae-b34d-dc528acfb884 10Gi RWO ibmc-vpc-block-5iops-tier 18h -
Crie um segundo arquivo de configuração YAML para uma implementação que monte a PVC criada.
apiVersion: apps/v1 kind: Deployment metadata: name: podtwo labels: app: podtwo spec: replicas: 1 selector: matchLabels: app: podtwo template: metadata: labels: app: podtwo spec: containers: - image: nginx # Your containerized app image name: container-name volumeMounts: - mountPath: /myvolumepath # Mount path for pvc from container name: my-vol # Volume mount name volumes: - name: my-vol # Volume resource name persistentVolumeClaim: claimName: restore-pvc # The name of the PVC that you created earlieroc create -f podtwo.yaml -
Verifique se o pod foi criado.
oc get podsNAME READY STATUS RESTARTS AGE POD_NAME 1/1 Running 0 30m POD2_NAME 1/1 Running 0 46h -
Efetue login no pod recém-criado e verifique se o arquivo de texto de amostra criado anteriormente foi salvo no novo pod.
oc exec -it POD_NAME /bin/bash root@POD_NAME :/# cd myvolumepath/ root@POD_NAME :/myvolumepath# ls lost+found new.txt root@POD_NAME :/myvolumepath# cat new.txtSaída de exemplo
hi
Desativando capturas instantâneas
Por padrão, a funcionalidade de captura instantânea é ativada ao usar Block Storage for VPC. Essa funcionalidade pode ser desativada no configmap addon-vpc-block-csi-driver-configmap no espaço de nomes kube-system mudando
o IsSnapshotEnabled para false. Observe que com essa mudança no configmap, quaisquer capturas instantâneas criadas falharão com a mensagem:CreateSnapshot functionality is disabled.
-
Salve o configmap atual de seu cluster em sua máquina local
oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml -
Edite o parâmetro
IsSnapshotEnabledparafalse.. -
Salve o arquivo e aplique suas alterações.
oc apply -f snapshotconfigmap.yaml
Próximas etapas
Implemente o webhook de validação de captura instantânea para validar a entrada do usuário Para obter mais informações, consulte Implementando o webhook de validação de instantâneos.
Resolução de problemas instantâneos
Analise os seguintes tópicos de solução de problemas.