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.

  1. Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  2. Verifique se o estado do complemento é normal e o status é Ready.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
    Name                   Version                     Health State   Health Status   
    vpc-block-csi-driver   5.2   normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)   
    
  3. Verifique se os pods do driver estão implementados e se o status é Running.

    oc get pods -n kube-system | grep vpc-block-csi
    

    Saí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
    
  4. Criar um PVC.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-block-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-block-5iops-tier
    
    oc create -f pvc.yaml
    
  5. Verifique se a PVC foi criada e está em um estado Bound.

    oc get pvc
    
    NAME                   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
    
  6. 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 earlier
    
    oc create -f pod.yaml
    
  7. Verifique se o pod está em execução no cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. 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/bash
    

    Saí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.

  1. Certifique-se de que você tenha permissões de Share Snapshot Operator no IAM.

  2. Crie um recurso de captura instantânea de volume em seu cluster usando a classe de instantâneos ibmc-vpcblock-snapshot que é implementada quando você ativou o complemento. Salve a seguinte configuração VolumeSnapshot em um arquivo chamado snapvol.yaml.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-csi-block-pvc
    spec:
      volumeSnapshotClassName: ibmc-vpcblock-snapshot
      source:
        persistentVolumeClaimName: csi-block-pvc
    
    oc create -f snapvol.yaml
    
  3. Verifique se o instantâneo está pronto para usar.

    oc get volumesnapshots
    

    Exemplo 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 resourceGroup ou 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.

  1. Obtenha o ID do grupo de recursos onde você deseja criar o instantâneo.

    ibmcloud resource groups
    
  2. Crie um arquivo de configuração VolumeSnapshotClass. Salve o YAML a seguir em um arquivo chamado vpc-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 resourceGroup deve ser a ID do grupo de recursos, não o nome do grupo de recursos.

  3. Crie o VolumeSnapshotClass em seu cluster.

    oc create -f vpc-snap-custom-rg.yaml
    
  4. Verifique se o site VolumeSnapshotClass foi 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.

  1. Crie um arquivo de configuração VolumeSnapshot que faça referência à sua classe de snapshot personalizada. Salve o YAML a seguir em um arquivo chamado snapshot-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
    
  2. Crie a captura instantânea.

    oc create -f snapshot-custom-rg.yaml
    
  3. Verifique se o instantâneo está pronto para usar.

    oc get volumesnapshots
    
  4. 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.

  1. 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
    
  2. Verifique se a PVC foi criada e está em um estado Bound.

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    restore-pvc            Bound    pvc-4ede7630-5a49-4bae-b34d-dc528acfb884   10Gi       RWO            ibmc-vpc-block-5iops-tier   18h
    
  3. 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 earlier
    
    oc create -f podtwo.yaml
    
  4. Verifique se o pod foi criado.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. 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.txt
    

    Saí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.

  1. 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
    
  2. Edite o parâmetro IsSnapshotEnabled para false..

  3. 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.