Configurando o Block Storage for Classic

O IBM Cloud Block Storage for Classic é um armazenamento iSCSI persistente e de alto desempenho que pode ser incluído em seus apps usando volumes persistentes (PVs) do Kubernetes. É possível escolher entre camadas de armazenamento predefinidas com tamanhos de GB e IOPS que atendam aos requisitos de suas cargas de trabalho. Para saber se o site IBM Cloud Block Storage for Classic é a opção de armazenamento correta para você, consulte Escolha de uma solução de armazenamento.

Tenha em mente os requisitos a seguir ao usar o plug-in do IBM Cloud Block Storage for Classic.

O plug-in do IBM Cloud Block Storage for Classic está disponível apenas para clusters padrão do IBM Cloud Kubernetes Service provisionados na infraestrutura clássica. Se você tiver um cluster de VPC, consulte Configurando o Block Storage for Classic.

Se o cluster não puder acessar a rede pública, como um cluster privado atrás de um firewall ou um cluster apenas com o terminal em serviço de nuvem privada ativado, certifique-se de ter instalado o plug-in IBM Cloud Block Storage for Classic versão 1.3.0 ou mais recente para se conectar à instância do Block Storage for Classic na rede privada.

As instâncias de Block Storage for Classic são específicas de uma região de campus único com várias zonas. Se você tiver um cluster de múltiplas zonas, considere as opções de armazenamento persistente multizona.

Infraestrutura clássica

As etapas desta página aplicam-se apenas aos clusters clássicos. Nos clusters VPC, o complemento de cluster “ Block Storage for VPC ” é instalado por padrão. Para obter mais informações, consulte Configurando Block Storage for VPC.

Iniciação rápida para IBM Cloud Block Storage for Classic

Neste guia de início rápido, você criará um volume do tipo “ Block Storage for Classic ” do nível Silver do 24Gi em seu cluster, criando um PVC para provisionar dinamicamente o volume. Em seguida, você cria uma implementação de app que monta o seu PVC.

Primeira vez usando o Block Storage for Classic em seu cluster? Volte aqui depois que você tiver instalado o plug-in do Block Storage for Classic.

  1. Salve a configuração de reclamação de volume persistente (PVC) a seguir em um arquivo chamado pvc.yaml.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: block-storage-pvc
      labels:
        billingType: "hourly"
        region: us-east
        zone: wdc07
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 45Gi
      storageClassName: ibmc-block-silver
    
  2. Aplique a configuração no cluster para criar a PVC.

    kubectl apply -f pvc.yaml
    
  3. Aguarde até que a PVC esteja no status Bound. É possível verificar o status executando o comando a seguir.

    kubectl get pvc
    
  4. Após a PVC ser Bound, crie uma implementação de app que use a PVC. Salve a configuração de implementação a seguir em um arquivo chamado deployment.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
      labels:
        app: my-app
    spec:
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: nginx # Use the nginx image, or your own containerized app image.
            name: my-container
            command: ["/bin/sh"]
            args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] # This app prints the timestamp, then sleeps.
            workingDir: /home
            imagePullPolicy: Always
            ports:
              - containerPort: 80
            volumeMounts:
            - name: my-volume
              mountPath: /mount-path
          volumes:
          - name: my-volume
            persistentVolumeClaim:
              claimName: block-storage-pvc
    
  5. Crie a implementação em seu cluster.

    kubectl apply -f deployment.yaml
    
  6. Aguarde até que a implementação seja Ready. Verifique o status da implementação executando o seguinte comando.

    kubectl get deployments
    

    Saída de exemplo

    NAME            READY   UP-TO-DATE   AVAILABLE   AGE
    my-deployment   1/1     1            1           3m19s
    
  7. Liste os pods e verifique se o pod my-deployment está em execução.

    kubectl get pods
    

    Saída de exemplo

    NAME                            READY   STATUS    RESTARTS   AGE
    my-deployment-ccdf87dfb-vzn95   1/1     Running   0          5m27s
    
  8. Obtenha os logs de pods para verificar se o registro de data e hora está gravado.

    kubectl logs
    

    Saída de exemplo

    2022-01-21 14:18:59
    

Você criou com sucesso uma implementação que usa Block Storage for Classic! Para obter mais informações, veja os links a seguir.

Instalando o IBM Cloud Block Storage for Classic plug-in em seu cluster

Instale o plug-in do IBM Cloud Block Storage for Classic com um gráfico Helm para configurar classes de armazenamento predefinidas para o Block Storage for Classic. É possível usar essas classes de armazenamento para criar um PVC para provisionar o Block Storage for Classic para seus apps.

Os clusters clássicos que executam o IBM Cloud Kubernetes Service versão 1.24 ou mais recente não precisam instalar o plug-in do IBM Cloud Block Storage for Classic. O driver e o plug-in são instalados nesses clusters por padrão.

Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  1. Certifique-se de que o nó do trabalhador aplique a correção mais recente para sua versão secundária para executar seu nó do trabalhador com as configurações de segurança mais recentes. A versão de correção também assegura que a senha raiz no nó do trabalhador seja renovada.

    Se você não aplicou atualizações ou recarregou seu nó do trabalhador dentro dos últimos 90 dias, sua senha raiz no nó do trabalhador expirará e a instalação do plug-in de armazenamento poderá falhar.

    1. Liste a versão de correção atual de seus nós do trabalhador.
        ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID
        ```
        Saída de exemplo
        ```sh {: screen}
        OK
        ID                                                  Public IP        Private IP     Machine Type           State    Status   Zone    Version
        kube-dal10-crb1a23b456789ac1b20b2nc1e12b345ab-w26   169.xx.xxx.xxx    10.xxx.xx.xxx   b3c.4x16.encrypted     normal   Ready    dal10   1.35_1523*
        ```
        Se o nó do trabalhador não aplicar a versão de correção mais recente, você verá um asterisco (`*`) na coluna **Versão** da saída da CLI.
    
    2. Revise as [informações de versão doKubernetes](/docs/containers?topic=containers-cs_versions) para localizar as mudanças mais recentes
    
    3. Aplique a versão de correção mais recente recarregando seu nó do trabalhador. Siga as instruções do [comando `ibmcloud ks worker reload](/docs/containers?topic=containers-kubernetes-service-cli#worker-reload-cli) ` para reprogramar com segurança quaisquer pods em execução no seu nó de trabalho antes de reinicializá-lo. Observe que durante o recarregamento, a máquina do nó do trabalhador será atualizada com a imagem mais recente e os dados serão excluídos se não forem [armazenados fora do nó do trabalhador](/docs/containers?topic=containers-storage-plan).
    
    
  2. Siga as instruções para instalar o cliente do Helm versão 3 em sua máquina local.

  3. Inclua o repositório de gráfico do Helm do IBM Cloud no cluster no qual você deseja usar o plug-in do IBM Cloud Block Storage for Classic.

    Se você tiver ativado o VRF e os terminais em serviço em sua conta do IBM Cloud, será possível usar o repositório do Helm do IBM Cloud privado para manter o seu tráfego de extração de imagem na rede privada. Se não for possível ativar terminais de VRF ou serviço na conta, use o domínio de registro público: helm repo add iks-charts https://icr.io/helm/iks-charts.

    helm repo add iks-charts https://icr.io/helm/iks-charts
    
  4. Atualize o repositório Helm para recuperar a versão mais recente de todos os gráficos Helm nesse repositório.

    helm repo update
    
  5. Instale o plug-in IBM Cloud Block Storage for Classic e dê um nome à sua instalação, por exemplo: block-storage-plugin. Quando você instala o plug-in, classes de armazenamento de bloco predefinidas são incluídas no cluster.

    helm install <name> iks-charts/ibmcloud-block-storage-plugin -n <namespace>
    

    Saída de exemplo

    NAME:   <name>
    LAST DEPLOYED: Wed Apr 18 10:02:55 2018
    NAMESPACE: default
    STATUS: DEPLOYED
    RESOURCES:
    ==> v1beta1/DaemonSet
    NAME                           DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
    ibmcloud-block-storage-driver  0        0        0      0           0          <none>         0s
    ==> v1beta1/Deployment
    NAME                           DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
    ibmcloud-block-storage-plugin  1        0        0           0          0s
    ==> v1/StorageClass
    NAME                      PROVISIONER        AGE
    ibmc-block-bronze         ibm.io/ibmc-block  0s
    ibmc-block-custom         ibm.io/ibmc-block  0s
    ibmc-block-gold           ibm.io/ibmc-block  0s
    ibmc-block-retain-bronze  ibm.io/ibmc-block  0s
    ibmc-block-retain-custom  ibm.io/ibmc-block  0s
    ibmc-block-retain-gold    ibm.io/ibmc-block  0s
    ibmc-block-retain-silver  ibm.io/ibmc-block  0s
    ibmc-block-silver         ibm.io/ibmc-block  0s
    ==> v1/ServiceAccount
    NAME                           SECRETS  AGE
    ibmcloud-block-storage-plugin  1        0s
    ==> v1beta1/ClusterRole
    NAME                           AGE
    ibmcloud-block-storage-plugin  0s
    ==> v1beta1/ClusterRoleBinding
    NAME                           AGE
    ibmcloud-block-storage-plugin  0s
    NOTES:
    Thank you for installing: ibmcloud-block-storage-plugin.   Your release is named: <name>
    
  6. Verifique a instalação.

    kubectl get pod -n <namespace> | grep block
    

    Saída de exemplo

    ibmcloud-block-storage-driver-kh4mt                              1/1       Running   0          27d       10.118.98.19   10.118.98.19
    ibmcloud-block-storage-plugin-58c5f9dc86-pbl4t                   1/1       Running   0          14d       172.21.0.204   10.118.98.19
    

    A instalação é bem-sucedida quando você vê um pod ibmcloud-block-storage-plugin e um ou mais pods ibmcloud-block-storage-driver. O número de pods ibmcloud-block-storage-driver é igual ao número de nós do trabalhador em seu cluster. Todos os pods devem estar em um estado Executando.

  7. Verifique se as classes de armazenamento para Block Storage for Classic foram incluídas no cluster.

    kubectl get sc | grep block
    

    Saída de exemplo

    ibmc-block-bronze                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-custom                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-gold                        ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-retain-bronze               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-custom               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-gold                 ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-silver               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-silver                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    
  8. Repita essas etapas para cada cluster no qual você deseja provisionar armazenamento de bloco.

Agora é possível continuar a criar um PVC para provisionar armazenamento de bloco para seu app.

Atualizando o plug-in do IBM Cloud Block Storage

É possível fazer upgrade do plug-in existente do IBM Cloud Block Storage para a versão mais recente.

Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  1. Atualize o repositório Helm para recuperar a versão mais recente de todos os gráficos Helm nesse repositório.

    helm repo update
    
  2. Opcional: faça download do gráfico Helm mais recente em sua máquina local. Em seguida, extraia o pacote e revise o arquivo release.md para localizar as informações de liberação mais recentes.

    helm pull iks-charts/ibmcloud-block-storage-plugin --untar
    
  3. Encontre o nome de liberação e o namespace do gráfico do Helm de armazenamento de blocos que você instalou em seu cluster.

    helm ls -A
    

    Saída de exemplo

    NAME            NAMESPACE   REVISION    UPDATED                             STATUS      CHART                                   APP VERSION
    block-plugin    default     1           2022-01-21 09:02:46.11622 -0500 EST deployed        bmcloud-block-storage-plugin-v2.1.5
    
  4. Faça upgrade do plug-in do IBM Cloud Block Storage para a versão mais recente. Inclua o nome da liberação e o namespace que você recuperou anteriormente.

    helm upgrade RELEASE-NAME iks-charts/ibmcloud-block-storage-plugin -n NAMESPACE
    
  5. Opcional: quando você atualiza o plug-in, a classe de armazenamento default está desconfigurada. Para configurar a classe de armazenamento padrão para uma classe de armazenamento de sua escolha, execute o comando a seguir.

    kubectl patch storageclass STORAGECLASS -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    

Removendo o plug-in do IBM Cloud Block Storage

Se não quiser provisionar e usar o IBM Cloud Block Storage no cluster, será possível desinstalar o gráfico Helm.

A remoção do plug-in não remove os PVCs, PVs ou dados existentes. Quando você remove o plug-in, todos os pods e conjuntos de daemon relacionados são removidos do cluster. Não é possível provisionar um novo armazenamento de bloco para o cluster ou usar PVCs e PVs de armazenamento de blocos existentes após remover o plug-in.

Antes de Iniciar:

Para remover o plug-in:

  1. Encontre o nome do release e o namespace do gráfico de armazenamento de blocos que você instalou em seu cluster.

    helm ls -A
    

    Saída de exemplo

    NAME            NAMESPACE   REVISION    UPDATED                             STATUS   CHART                                  APP VERSION
    block-plugin    default     1           2022-01-21 09:02:46.11622 -0500 EST deployed    ibmcloud-block-storage-plugin-v2.1.5
    
  2. Exclua o plug-in do IBM Cloud Block Storage.

    helm uninstall NAME -n kube-system
    
  3. Verifique se os pods de armazenamento de bloco foram removidos.

    kubectl get pods -n kube-system | grep block
    

    A remoção dos pods será bem-sucedida se nenhum pod for exibido na saída da CLI.

  4. Verifique se as classes de armazenamento de bloco foram removidas. A remoção das classes de armazenamento será bem-sucedida se nenhuma classe de armazenamento for exibida na saída da CLI.

    kubectl get sc | grep block
    

Decidindo sobre a configuração de armazenamento de bloco

O IBM Cloud Kubernetes Service fornece classes de armazenamento predefinidas para armazenamento de bloco que podem ser usadas para provisionar armazenamento de bloco com uma configuração específica.

Cada classe de armazenamento especifica o tipo de armazenamento de bloco que você provisiona, incluindo o tamanho disponível, o IOPS, o sistema de arquivos e a política de retenção.

Certifique-se de escolher a configuração de armazenamento com cuidado para ter capacidade suficiente para armazenar seus dados. Depois de provisionar um tipo específico de armazenamento usando uma classe de armazenamento, você não poderá mudar a política de tipo ou retenção para o dispositivo de armazenamento. No entanto, é possível mudar o tamanho e o IOPS se você desejar aumentar a capacidade de armazenamento e o desempenho. Para alterar o tipo e a política de retenção do seu armazenamento, é necessário criar uma nova instância de armazenamento e copiar os dados da instância antiga para a nova.

  1. Liste as classes de armazenamento disponíveis no IBM Cloud® Kubernetes Service.

    kubectl get sc | grep block
    

    Saída de exemplo

    ibmc-block-bronze                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-custom                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-gold                        ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-retain-bronze               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-custom               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-gold                 ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-silver               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-silver                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    
  2. Revise a configuração de uma classe de armazenamento.

    kubectl describe storageclass STORAGECLASS
    

    Para obter mais informações sobre cada classe de armazenamento, consulte a referência de classe de armazenamento. Se não localizar o que está procurando, considere criar sua própria classe de armazenamento customizada. Para iniciar, consulte as amostras de classe de armazenamento customizadas.

  3. Escolha o tipo de armazenamento de bloco que você deseja provisionar.

    • Classes de armazenamento bronze, prata e ouro: essas classes de armazenamento provisionam o armazenamento do Endurance. Com o armazenamento Endurance, é possível escolher o tamanho do armazenamento em gigabytes em camadas de IOPS predefinidas.
    • Classe de armazenamento customizada: essa classe de armazenamento provisiona o armazenamento do Desempenho. Com o armazenamento de desempenho, você tem mais controle sobre o tamanho do armazenamento e do IOPS.
  4. Escolha o tamanho e o IOPS para seu armazenamento de bloco. O tamanho e o número de IOPS definem o número total de IOPS (operações de entrada/saída por segundo) que serve como um indicador de quão rápido o seu armazenamento é. Quanto mais total de IOPS o seu armazenamento tiver, mais rápido ele processará operações de leitura e gravação.

    • Classes de armazenamento bronze, prata e ouro: essas classes de armazenamento vêm com um número fixo de IOPS por gigabyte e são provisionadas em discos rígidos SSD. O número total de IOPS depende do tamanho do armazenamento que você escolher. É possível selecionar qualquer número inteiro de gigabyte dentro do intervalo de tamanho permitido, como 20 Gi, 256 Gi ou 11854 Gi. Para determinar o número total de IOPS, deve-se multiplicar o IOPS com o tamanho selecionado. Por exemplo, se você selecionar um tamanho de armazenamento de bloco de 1000Gi na classe de armazenamento prata que é fornecida com 4 IOPS por GB, seu armazenamento terá um total de 4.000 IOPS.
    Tabela de intervalos de tamanho de classe de armazenamento e IOPS por gigabyte
    Classe de armazenamento IOPS por gigabyte Intervalo de tamanho em gigabytes
    Bronze 2 IOPS/GB 20-12.000 Gi
    Prata 4 IOPS/GB 20-12.000 Gi
    Ouro 10 IOPS/GB 20-4000 Gi
    • Classe de armazenamento customizada: quando você escolhe essa classe de armazenamento, tem mais controle sobre o tamanho e o IOPS desejados. Para o tamanho, é possível selecionar qualquer número inteiro de gigabytes dentro do intervalo de tamanho permitido. O tamanho que você escolher determinará o intervalo de IOPS que estará disponível para você. É possível escolher um IOPS que seja um múltiplo de 100 dentro do intervalo especificado. O IOPS que você escolhe é estático e não escala com o tamanho do armazenamento. Por exemplo, se você escolher 40 Gi com 100 IOPS, o seu IOPS total permanecerá 100. A razão de IOPS para gigabytes também determina o tipo de disco rígido provisionado para você. Por exemplo, se estiver usando 500Gi a 100 IOPS, sua proporção de IOPS para gigabyte será de 0,2. O armazenamento com uma razão menor ou igual a 0,3 é provisionado em discos rígidos SATA. Se a sua razão for maior que 0,3, o armazenamento será provisionado em discos rígidos SSD.
    Table class size ranges and IOPS
    Intervalo de tamanho em gigabytes Intervalo de IOPS em diversos de 100
    20-39 Gi 100-1000 IOPS
    40-79 Gi 100-2000 IOPS
    80-99 Gi 100-4000 IOPS
    100-499 Gi 100-6000 IOPS
    500-999 Gi 100-10000 IOPS
    1000-1999 Gi 100-20000 IOPS
    2000-2999 Gi 200-40000 IOPS
    3000-3999 Gi 200-48000 IOPS
    4000-7999 Gi 300-48000 IOPS
    8000-9999 Gi 500-48000 IOPS
    10000-12000 Gi 1000-48000 IOPS
  5. Escolha se você deseja manter os seus dados após o cluster ou a solicitação de volume persistente (PVC) ser excluída.

    • Para manter seus dados, escolha uma classe de armazenamento retain. Quando você exclui o PVC, somente ele é excluído. O PV, o dispositivo de armazenamento físico em sua conta de infraestrutura da IBM Cloud e seus dados ainda existem. Para recuperar o armazenamento e usá-lo em seu cluster novamente, deve-se remover o PV e seguir as etapas para usar armazenamento de bloco existente.
    • Se desejar que o PV, os dados e seu dispositivo de armazenamento de bloco físico sejam excluídos quando você excluir o PVC, escolha uma classe de armazenamento sem retain.
  6. Escolha se você deseja ser faturado por hora ou mensalmente. A configuração padrão é faturamento por hora.

Configurando a criptografia para o Block Storage for Classic

É possível configurar a criptografia para o Block Storage for Classic usando o IBM Key Protect.

O exemplo a seguir explica como criar um ID de serviço com as funções de acesso necessárias para o Key Protect e seu cluster. As credenciais desse ID de serviço são usadas para ativar a criptografia para seus volumes do Block Storage for Classic.

É possível ativar a criptografia criando um segredo do Kubernetes que usa a sua chave de API pessoal, desde que você tenha a função de acesso ao serviço Leitor para sua instância do Key Protect, assim como a função de acesso à plataforma Visualizador e a função de acesso ao serviço Gravador para o seu cluster.

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

  1. Certifique-se de que você esteja designado para a função de acesso à plataforma Editor e para a função de acesso ao serviço Gravador para o Key Protect para que seja possível criar sua própria chave raiz a ser usada para criptografar sua instância do Block Storage for Classic. É possível revisar suas funções de acesso do IAM no Console do IAM. Para obter mais informações sobre as funções do IAM, consulte Acesso do IAM.

  2. Se você não tiver uma instância do Key Protect, forneça uma.

  3. Crie uma chave raiz. Por padrão, a chave raiz é criada sem uma data de expiração.

  4. Crie um ID de serviço do IAM. Substitua <service_ID_name> pelo nome que deseja designar ao ID de serviço. Esse ID de serviço é usado para acessar a sua instância do Key Protect por meio de seu volume do Block Storage for Classic.

    ibmcloud iam service-id-create <service_ID_name>
    

    Saída de exemplo

    OK
    Service ID test-id is created successfully
    ID            ServiceId-a1a11111-bb11-1111-a11b-1111111a11ba   
    Name          test-id   
    Description      
    CRN           crn:v1:bluemix:public:iam-identity::a/1a1111aa2b11111aaa1a1111aa2aa111::serviceid:ServiceId-a1a11111-bb11-1111-a11b-1111111a11bb   
    Version       1-bb11aa11a0aa1a11a011a1aaaa11a1bb   
    Locked        false
    
  5. Crie uma chave de API para seu ID de serviço. Substitua <api-key-name> por um nome para a chave de API e substitua <service_ID_name> pelo nome do ID de serviço que você criou. Certifique-se de salvar a chave de API já que ela não pode ser recuperada posteriormente. Essa chave de API é armazenada em um segredo do Kubernetes em seu cluster em uma etapa posterior.

    ibmcloud iam service-api-key-create <api_key_name> <service_ID_name>
    
  6. Recupere uma lista de serviços ativados pelo IAM em sua conta e anote o nome da instância do Key Protect que você criou.

    ibmcloud resource service-instances
    
  7. Recupere o GUID de sua instância do Key Protect. O ID é usado para criar uma política de serviço do IAM para o seu ID de serviço.

    ibmcloud resource service-instance "<instance_name>" | grep GUID
    
  8. Crie uma política de serviço do IAM para conceder seu acesso de ID de serviço à sua instância do Key Protect. O comando a seguir concede ao seu ID de serviço acesso Reader para a sua instância do Key Protect. A função de acesso Leitor é a função de acesso ao serviço mínima que seu ID de serviço deve ter para recuperar as chaves do Key Protect. Para obter mais informações, consulte Gerenciando o acesso do usuário para o Key Protect.

    ibmcloud iam service-policy-create <service_ID_name> --roles Reader --service-name kms --service-instance <service_instance_GUID>
    
  9. Crie outra política de acesso ao serviço do IAM para dar ao seu ID de serviço acesse ao seu cluster. O comando a seguir concede a função de acesso à plataforma Visualizador e a função de acesso ao serviço Gravador ao seu ID de serviço para o seu cluster. É possível recuperar o ID de cluster executando ibmcloud ks cluster get <cluster_name>.

    ibmcloud iam service-policy-create <service_ID_name> --roles Writer,Viewer --service-name containers-kubernetes --service-instance <cluster_ID>
    
  10. Se você já tiver o gráfico do Helm ibmcloud-block-storage-plugin instalado, ele deverá ser removido e uma nova versão deverá ser instalada.

    Se você tiver instalado o plug-in sem usar o Helm, a implementação do plug-in de armazenamento de bloco e todos os recursos associados deverão ser removidos manualmente antes da instalação de uma nova versão.

    helm uninstall <name> <namespace>
    
  11. Instale o gráfico do Helm ibmcloud-block-storage-plugin.

    helm install <name> iks-charts/ibmcloud-block-storage-plugin
    
  12. Crie um namespace ibm-block-secrets.

    kubectl create ns ibm-block-secrets
    
  13. Crie uma ligação de função no namespace ibm-block-secrets para o plug-in de armazenamento de bloco.

    kubectl create rolebinding ibmcloud-block-storage-plugin-byok --clusterrole=ibmcloud-block-storage-plugin-byok --serviceaccount=kube-system:ibmcloud-block-storage-plugin --group system:nodes --namespace=ibm-block-secrets
    
  14. Crie um segredo de Kubernetes chamado secret.yaml e que inclua as credenciais para acessar a chave raiz na instância de serviço Key Protect.

    1. Crie um arquivo de configuração para o segredo.
        apiVersion: v1
        kind: Secret
        metadata:
          labels:
            kmsConfig: kpc-secretLabel
          name: <secret_name> # Enter a name for your secret. Example: my_secret
          namespace: <namespace> # Enter the name of the namespace where you want to create the secret. The secret must be in same namespace where your app is deployed. Example: default
        stringData:
        config: |-
            {
                "api_key":"<service_id_api_key>", # Enter the API key for the service ID that you created. Example: "AA1aAAaA1a21AAaA1aAAaAa-AA-1AAaaA1aA1aAaaaAA"
                "iam_endpoint":"https://iam.cloud.ibm.com",
                "key_protect_endpoint":"https://<region>.kms.cloud.ibm.com", # Example: "https://us-east.kms.cloud.ibm.com"
                "root_key_crn":"<rook_key_crn>", # Example: "crn:v1:bluemix:public:kms:<region>:a/1ab011ab2b11111aaa1a1111aa1aa111:11aa111a-1111-11a1-a111-a11a111aa111:key:11a11111-1a1a-111a-111a-11111a1a1aa1",
                "version":""
            }
        type: ibm.io/kms-config
        ```
        `stringData.config.key_protect_endpoint`
        :   Insira o terminal regional de sua instância do Key Protect. Para obter uma lista de terminais do Key Protect, consulte [Regiões e terminais](/docs/key-protect?topic=key-protect-regions).
    
        `stringData.config.root_key_crn`
        :   Insira o CRN da chave raiz que você criou. Para recuperar seu CRN de chave-raiz, conclua as etapas a seguir.
            1. Navegue até a lista de recursos no [Console da IBM Cloud](https://cloud.ibm.com/resources){: external}.
            2. Clique em **Serviços**, em seguida, clique em sua instância do Key Protect.
            3. Localize a sua chave raiz no **Menu Ações**, em seguida, clique em **Visualizar CRN**.
            4. Clique no botão **Copiar** para copiar o CRN.
    
    1. Crie o segredo em seu cluster.
    
    ```sh {: pre}
        kubectl apply -f secret.yaml
        ```
    1. Verifique se o seu segredo foi criado.
    
    ```sh {: pre}
        kubectl get secrets
        ```
    
  15. Escolha entre as opções a seguir para criar uma instância do Block Storage for Classic que criptografe os dados com sua chave raiz.

Criptografia de dados de volume usando sua própria classe de armazenamento

É possível implantar aplicativos que utilizam volumes criptografados criando, primeiro, sua própria classe de armazenamento.

As etapas a seguir explicam como criar uma classe de armazenamento customizado e criptografado que pode ser usada para criar diversas instâncias de armazenamento de bloco criptografado com a mesma configuração. Se você desejar criar um PVC criptografado usando uma das classes de armazenamento fornecidas pela IBM, será possível fazer isso referenciando as credenciais do Key Protect diretamente em seu PVC.

  1. Decidir sobre uma configuração de armazenamento.

  2. Crie sua própria classe de armazenamento que provisiona uma instância de armazenamento em bloco criptografada, utilizando como base uma das classes de armazenamento fornecidas pelo IBM. É possível recuperar os detalhes uma classe de armazenamento executando kubectl get sc <storageclass_name> -o yaml. O exemplo a seguir é baseado na classe de armazenamento ibmc-block-retain-bronze.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <name> # Enter the name of the storage class. Example: my_custom_storageclass
    parameters:
      billingType: hourly
      classVersion: "2"
      fsType: ext4
      iopsPerGB: "2"
      sizeRange: '[20-12000]Gi'
      type: Endurance
      encrypted: "true" # Enter "true" to enable encryption.
      encryptionKeySecret: <secret_name> # # #nter the name of the secret that you created earlier.Example: my_secret
      encryptionKeyNamespace: <namespace> # # #nter the namespace where you created your secret. Example: default
    provisioner: ibm.io/ibmc-block
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    
  3. Crie a classe de armazenamento em seu cluster.

    kubectl apply -f storageclass.yaml
    
  4. Adicione o Block Storage for Classic ao seu aplicativo usando sua própria classe de armazenamento para criar um PVC.

  5. Verifique a criptografia de seus volumes do Block Storage for Classic.

Crie um PVC que referencie seu segredo do Block Storage for Classic

É possível provisionar o Block Storage for Classic criptografado criando um PVC que especifique o segredo do Kubernetes que retém suas credenciais do Key Protect.

As etapas a seguir mostram como é possível referenciar suas credenciais do Key Protect em seu PVC para criar uma instância do Block Storage for Classic criptografada. Para criar diversos volumes criptografados sem especificar as credenciais do Key Protect em cada PVC, é possível criar uma classe de armazenamento customizado e criptografado.

  1. Revise as classes de armazenamento do Block Storage for Classic fornecidas para determinar qual classe de armazenamento melhor atende aos seus requisitos de app. Se as classes de armazenamento fornecidas não atenderem aos seus requisitos de app, será possível criar sua própria classe de armazenamento customizada.

  2. Crie um arquivo de configuração do PVC denominado pvc.yaml e que referencie o segredo do Kubernetes no qual você armazenou as credenciais de serviço do Key Protect. Para criar esse segredo, consulte Configurando a criptografia para o Block Storage for Classic.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: <pvc_name> # Enter a name for your PVC.
      annotations:
      volume.beta.kubernetes.io/storage-class: "<storage_class>" # Enter a storage class. To see a list of storageclasses run `kubectl get storageclasses`.
      labels:
        encrypted: "true"
        encryptionKeyNamespace: <namespace> # Enter the namespace where your secret was created.
        encryptionKeySecret: <secret_name> # Enter the name of the secret you created.
    spec:
      accessModes:
        - ReadWriteOnce
        resources:
        requests:
            storage: 20Gi
    
  3. Crie o PVC em seu cluster.

    kubectl apply -f pvc.yaml
    
  4. Verifique o status de seu PVC.

    kubectl get pvc
    
  5. Aguarde até que seu PVC seja ligado, em seguida, crie uma implementação que use o seu PVC.

  6. Verifique a criptografia de seus volumes do Block Storage for Classic.

Verificando a criptografia de seus volumes do Block Storage for Classic

É possível verificar a criptografia de seus volumes verificando o caminho de montagem do volume.

  1. Efetue login em seu pod de app. Substitua <pod_name> pelo nome do pod que monta o seu volume criptografado do Block Storage for Classic.

    kubectl exec <pod_name> -it bash
    
  2. Liste o sistema de arquivos de seu pod.

    df -h
    
  3. Revise o caminho do sistema de arquivos para o seu volume criptografado do Block Storage for Classic.

    • Os volumes criptografados possuem uma estrutura de caminho de /dev/mapper/<pvc-ID_encrypted>. Neste exemplo, o volume criptografado é montado no caminho do arquivo /test no pod.
        Filesystem                                            Size  Used Avail Use% Mounted on
        overlay                                                98G  8.2G   85G   9% /
        tmpfs                                                  64M     0   64M   0% /dev
        tmpfs                                                 2.0G     0  2.0G   0% /sys/fs/cgroup
        /dev/mapper/pvc-a011a111-1111-1111-111a-aaa1a1111a11_encrypted   20G   45M   20G   1% /test
        ```
    * Os volumes não criptografados têm uma estrutura de caminho de `dev/mapper/<random_string>`.
    
    ```sh {: screen}
        Filesystem                                     Size  Used Avail Use% Mounted on
        overlay                                         98G   16G   78G  17% /
        tmpfs                                           64M     0   64M   0% /dev
        tmpfs                                          7.9G     0  7.9G   0% /sys/fs/cgroup
        /dev/mapper/3600a09803830476e733f4e477370716e   24G   45M   24G   1% /test
        ```
    

Remover o segredo do Kubernetes não revoga o acesso aos dados do volume. Se você tiver criado uma implementação somente de pod, o pod deverá ser excluído. Se você tiver criado uma implementação, ela deverá ser excluída.

Incluindo armazenamento de bloco em apps

Crie uma reivindicação de volume persistente (PVC) para provisionar dinamicamente armazenamento em bloco para o seu cluster. O provisionamento dinâmico cria automaticamente o volume persistente correspondente (PV) e pede o dispositivo de armazenamento real em sua conta de infraestrutura da IBM Cloud.

O armazenamento de bloco é fornecido com um modo de acesso ReadWriteOnce. Só é possível montá-lo em um pod em um nó do trabalhador no cluster de cada vez.

Antes de Iniciar:

Procurando implementar armazenamento de bloco em um conjunto stateful? Para obter mais informações, consulte Usando armazenamento de bloco em um conjunto stateful.

Para incluir o armazenamento de bloco:

  1. Crie um arquivo de configuração para definir a sua solicitação de volume persistente (PVC) e salve a configuração como um arquivo .yaml.

    • Exemplo para as classes de armazenamento bronze, prata e ouro: O arquivo .yaml a seguir cria uma reclamação denominada block-storage-pvc da classe de armazenamento "ibmc-block-silver", faturada por hora, com um tamanho gigabyte de 24Gi.
        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: block-storage-pvc
          labels:
            billingType: "hourly"
            region: us-south
            zone: dal13
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 24Gi
          storageClassName: ibmc-block-silver
        ```
    -  **Exemplo para usar sua própria classe de armazenamento**:
            O arquivo `.yaml` a seguir cria uma reclamação denominada `block-storage-pvc` da classe de armazenamento `ibmc-block-retain-custom`, faturada por hora, com um tamanho gigabyte de `45Gi` e IOPS de `"300"`.
    
    ```yaml {: codeblock}
        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: block-storage-pvc
          labels:
            billingType: "hourly"
            region: us-south
            zone: dal13
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 45Gi
              iops: "300"
          storageClassName: ibmc-block-retain-custom
        ```
    
        `name`
        :   Insira o nome do PVC.
    
        `billingType`
        :   Na seção de rótulos de metadados, especifique a frequência para a qual sua conta de armazenamento é calculada, "mensal" ou "horária". O padrão é "horária".
    
        `region`
        :   Na seção de rótulos de metadados, especifique a região na qual você deseja provisionar seu armazenamento de blocos. Se você especifica a região, deve-se também especificar uma zona. Se você não especificar uma região, ou se a região especificada não for localizada, o armazenamento será criado na mesma região do cluster. Essa opção é suportada somente com o plug-in do IBM Cloud Block Storage versão 1.0.1 ou superior. Para versões de plug-in mais antigas, se você tiver um cluster de diversas zonas, a zona na qual o seu armazenamento for provisionado será selecionada em uma base round-robin para balancear as solicitações de volume uniformemente em todas as zonas. Para especificar a zona para seu armazenamento, é possível criar uma [classe de armazenamento customizada](#block_multizone_yaml) primeiro. Em seguida, crie um PVC com a sua classe de armazenamento customizada.
    
        `zone`
        :   Na seção de rótulos de metadados, especifique a zona na qual você deseja provisionar o seu armazenamento de blocos. Se você especifica a zona, deve-se também especificar uma região. Se você não especificar uma zona ou se a zona especificada não for localizada em um cluster multizona, a zona será selecionada em uma base round-robin. Essa opção é suportada somente com o plug-in do IBM Cloud Block Storage versão 1.0.1 ou superior. Para versões de plug-in mais antigas, se você tiver um cluster de diversas zonas, a zona na qual o seu armazenamento for provisionado será selecionada em uma base round-robin para balancear as solicitações de volume uniformemente em todas as zonas. Para especificar a zona para seu armazenamento, é possível criar uma [classe de armazenamento customizada](#block_multizone_yaml) primeiro. Em seguida, crie um PVC com a sua classe de armazenamento customizada.
    
        `storage`
        :   Na seção de solicitações de recursos spec, digite o tamanho do armazenamento de blocos, em gigabytes (Gi). Depois que o armazenamento for provisionado, você não poderá mudar o tamanho do armazenamento de blocos. Certifique-se de especificar um tamanho que corresponda à quantia de dados que você deseja armazenar.
    
        `iops`
        :   Essa opção está disponível apenas para suas próprias classes de armazenamento personalizadas (`ibmc-block-custom / ibmc-block-retain-custom`). Na seção “Solicitações de recursos” da especificação, especifique o total de IOPS para o armazenamento, selecionando um múltiplo de 100 dentro do intervalo permitido. Se você escolher um IOPS diferente de um que esteja listado, o IOPS será arredondado para cima.
    
        `storageClassName`
        :   Na seção especificação, digite o nome da classe de armazenamento que você deseja usar para provisionar o armazenamento de blocos. É possível optar por usar uma das [classes de armazenamento fornecidas pela IBM](#block_storageclass_reference) ou [criar sua própria classe de armazenamento](#block_custom_storageclass). Se você não especificar uma classe de armazenamento, o PV será criado com a classe de armazenamento padrão `ibmc-file-bronze`.
    
    Para usar uma classe de armazenamento customizada, crie seu PVC com o nome da classe de armazenamento correspondente, um IOPS válido e o tamanho.
    {: tip}
    
    
  2. Crie o PVC.

    kubectl apply -f block-storage.yaml
    
  3. Verifique se o PVC foi criado e ligado ao PV. Esse processo pode levar alguns minutos.

    kubectl get pvc
    

    Saída de exemplo

    NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
    block-storage-pvc              Bound    pvc-1aa1aaaa-11a1-48d1-ab11-11b11111f3bc   45Gi       RWO            ibmc-block-silver   150m
    
  4. Para montar o PV para a implementação, crie um arquivo .yaml de configuração e especifique a PVC que é ligada ao PV.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment_name>
      labels:
        app: <deployment_label>
    spec:
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          containers:
          - image: <image_name>
            name: <container_name>
            volumeMounts:
            - name: <volume_name>
              mountPath: /<file_path>
          volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>
    
    app
    Nos metadados, digite um rótulo para a implementação.
    matchLabels.app e labels.app
    No seletor de especificação e nos metadados do modelo, digite um rótulo para o seu app.
    image
    O nome da imagem de contêiner que você deseja usar. Para listar as imagens disponíveis em sua conta do IBM Cloud Container Registry, execute ibmcloud cr image-list.
    name
    O nome do contêiner que você deseja implementar em seu cluster.
    mountPath
    Na seção de montagens de volume do contêiner, insira o caminho absoluto do diretório para onde o volume é montado dentro do contêiner. Os dados gravados no caminho de montagem são armazenados sob o diretório raiz na instância de armazenamento de blocos físicos. Para compartilhar um volume entre diferentes apps, é possível especificar subcaminhos de volume para cada um dos apps.
    name
    Na seção de montagens de volume de contêineres, insira o nome do volume para montar em seu pod.
    name
    Na seção volumes, insira o nome do volume para montar em seu pod. Geralmente, esse nome é o mesmo que volumeMounts/name.
    claimName
    Na seção de solicitação de volume persistente de volumes, insira o nome da PVC que liga o PV que você deseja usar.
  5. Crie a implementação.

    kubectl apply -f <local_yaml_path>
    
  6. Verifique se o PV foi montado com êxito.

    kubectl describe deployment <deployment_name>
    

    O ponto de montagem está no campo Montagens de volume e o volume está no campo Volumes.

    Volume Mounts:
        /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro)
        /volumemount from myvol (rw)
    ...
    Volumes:
    myvol:
        Type:    PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:    block-storage-pvc
        ReadOnly:    false
    

Usando o armazenamento de bloco existente em seu cluster

Se você já possui um dispositivo de armazenamento físico que deseja utilizar em seu cluster, é possível criar manualmente o PV e o PVC para provisionar o armazenamento de forma estática.

Para que seja possível iniciar a montagem de seu armazenamento existente em um app, deve-se recuperar todas as informações necessárias para o seu PV.

Recuperando as informações do armazenamento de blocos existente

  1. Recupere ou gere uma chave de API para sua conta de infraestrutura da IBM Cloud.

    1. Efetue login no Portal de infraestrutura IBM Cloud.
    2. Selecione Conta, depois Usuários e, em seguida, Lista de usuários.
    3. Localize o ID de usuário.
    4. Na coluna CHAVE API, clique em Gerar para gerar uma chave API ou em Visualizar para visualizar a chave API existente.
  2. Recupere o nome de usuário da API para sua conta de infraestrutura da IBM Cloud.

    1. No menu Lista de usuários, selecione seu ID de usuário.
    2. Na seção Informações de acesso da API, localize o seu Nome do usuário da API.
  3. Efetue login no plug-in da CLI da infraestrutura da IBM Cloud.

    ibmcloud sl init
    
  4. Escolha autenticar usando o nome de usuário e a chave de API para sua conta de infraestrutura da IBM Cloud.

  5. Insira o nome de usuário e a chave de API que você recuperou nas etapas anteriores.

  6. Liste os dispositivos de armazenamento de bloco disponíveis.

    ibmcloud sl block volume-list
    

    Saída de exemplo

    id          username              datacenter   storage_type                capacity_gb   bytes_used   lunId   
    11111111    IBM01AAA1111111-1     wdc07        endurance_block_storage     45            -            2      
    
  7. Recupere os detalhes do volume. Substitua <volume_ID> pelo ID do volume do Block storage recuperado na etapa 6.

    ibmcloud sl block volume-detail <volume_ID>
    

    Saída de exemplo

    ID                         11111111
    User name                  IBM01AAA1111111-1   
    Type                       endurance_block_storage   
    Capacity (GB)              45   
    LUN Id                     2   
    IOPs                       100   
    Datacenter                 wdc07   
    Target IP                  10.XXX.XX.XXX  
    # of Active Transactions   0   
    Replicant Count            0
    
  8. Anote o ID, Capacity, LUN Id, o Datacenter e Target IP do volume que você deseja montar para o cluster. Nota: para montar o armazenamento existente em um cluster, deve-se ter um nó do trabalhador na mesma zona que seu armazenamento. Para verificar a zona do nó do trabalhador, execute ibmcloud ks worker ls --cluster <cluster_name_or_ID>.

Criando um volume persistente (PV) e uma reclamação de volume persistente (PVC) correspondente

  1. Opcional: se você tiver um armazenamento que provisionou com uma classe de armazenamento retain, ao remover a PVC, o PV e o dispositivo de armazenamento físico não serão removidos. Para reutilizar o armazenamento em seu cluster, deve-se remover o PV primeiro. Liste os PVs existentes e procure o PV que pertence ao seu armazenamento persistente. O PV está em um estado released.

    kubectl get pv
    
  2. Remova o PV.

    kubectl delete pv <pv_name>
    
  3. Verificar se o PV é removido.

    kubectl get pv
    
  4. Crie um arquivo de configuração para seu PV. Inclua os parâmetros que você recuperou anteriormente.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: "block-storage-pv" # Enter a name for your PV. For example, my-static-pv.
      labels:
         failure-domain.beta.kubernetes.io/region: "<region>" # Example us-east.
         failure-domain.beta.kubernetes.io/zone: "<zone>" # Example: wdc04. See /docs/containers?topic=containers-regions-and-zones#zones-sz
    spec:
      capacity:
        storage: "<storage>"
      accessModes:
        - ReadWriteOnce
      flexVolume:
        driver: "ibm/ibmc-block"
        fsType: "<fs_type>" # Enter ext or xfs
        options:
          "Lun": "<Lun_ID>"
          "TargetPortal": "<TargetPortal>"
          "VolumeID": "<VolumeID>"
          "volumeName": "block-storage-pv" # Enter the same value as your PV name from metadata.name
    
    name
    Dê um nome ao PV. Por exemplo, block-storage-pv. Note que esse valor também deve ser inserido em spec.FlexVolume.options como o volumeName.
    labels
    Insira a região e a zona que você recuperou anteriormente. Deve-se ter pelo menos um nó do trabalhador na mesma região e zona que o seu armazenamento persistente para montar o armazenamento em seu cluster. Para recuperar detalhes do volume, execute ibmcloud sl block volume-list para obter o ID do volume. Em seguida, execute ibmcloud sl block volume-detail <volume_ID> para obter os detalhes do seu volume.
    region
    Entre na região na qual o Block Storage está localizado. Note que o cluster e o Block Storage devem estar na mesma região. Para localizar o local do cluster, execute ibmcloud ks cluster ls. Para obter mais informações sobre as regiões e zonas disponíveis, consulte regiões e zonas. Por exemplo, us-east.
    zone
    Entre na zona na qual o volume de armazenamento está localizado. Para recuperar detalhes do volume, execute ibmcloud sl block volume-list para obter o ID do volume. Em seguida, execute ibmcloud sl block volume-detail <volume_ID> para obter os detalhes do seu volume. Note que para anexar o Block Storage ao cluster, deve-se ter um nó do trabalhador disponível na mesma zona do volume que você deseja anexar. Para localizar as zonas dos nós do trabalhador, execute ibmcloud ks worker ls -c <cluster>. Por exemplo, wdc04.
    storage
    Insira o tamanho de armazenamento do volume do Block Storage existente que você deseja anexar ao cluster. O tamanho do armazenamento deve ser gravado em gigabytes, por exemplo, 20 Gi (20 GB) ou 1000 Gi (1 TB). Para recuperar detalhes do volume, execute ibmcloud sl block volume-list para obter o ID do volume. Em seguida, execute ibmcloud sl block volume-detail <volume_ID> para obter os detalhes do seu volume.
    fsType
    Insira o tipo de sistema de arquivos que está configurado para seu armazenamento de bloco existente. Escolha entre ext4 ou xfs. Se você não especificar essa opção, o PV será padronizado para ext4. Quando o fsType errado for definido, a criação do PV será bem-sucedida, mas a montagem do PV em um pod falhará. Para recuperar detalhes do volume, execute ibmcloud sl block volume-list para obter o ID do volume. Em seguida, execute ibmcloud sl block volume-detail <volume_ID> para obter os detalhes do seu volume.
    Lun
    Insira o ID de LUN do volume do Block Storage. Para recuperar detalhes do volume, execute ibmcloud sl block volume-list para obter o ID do volume. Em seguida, execute ibmcloud sl block volume-detail <volume_ID> para obter os detalhes do seu volume.
    TargetPortal
    Insira o endereço IP do Block Storage. Para recuperar o parâmetro TargetPortal, execute ibmcloud sl block volume-list para obter o ID de volume e, em seguida, execute ibmcloud sl block volume-detail <volume_ID> e anote o Target IP na saída.
    VolumeId
    Insira o ID do Block Storage. Para recuperar os detalhes do volume, execute ibmcloud sl block volume-list.
    volumeName
    Insira o mesmo valor do nome do PV. Por exemplo, block-storage-pv.
  5. Crie o PV em seu cluster.

    kubectl apply -f pv.yaml
    
  6. Verifique se o PV é criado.

    kubectl get pv
    
  7. Crie outro arquivo de configuração para criar seu PVC. Para que o PVC corresponda ao PV criado anteriormente, deve-se escolher o mesmo valor para storage e accessMode. O campo storage-class deve ser uma sequência de caracteres vazia. Se algum desses campos não corresponder ao PV, um novo PV será criado automaticamente no lugar.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: block-storage-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: "20Gi"
      storageClassName: ""
    
  8. Crie a PVC.

    kubectl apply -f static-pvc.yaml
    
  9. Verifique se o PVC foi criado e está ligado ao PV criado anteriormente. Esse processo pode levar alguns minutos.

    kubectl describe pvc static-pvc
    

    Saída de exemplo

    Name:          static-pvc
    Namespace:     default
    StorageClass:  
    Status:        Bound
    
  10. Opcional Salve a configuração de pod de exemplo a seguir como um arquivo chamado pod.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: block-storage
      labels:
        app: block-storage
    spec:
      containers:
        - name: block-storage
          image: nginx
          command: ["/bin/sh"]
          args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"]
          workingDir: /home
          imagePullPolicy: Always
          ports:
            - containerPort: 80
          volumeMounts:
            - name: block-storage-pv
              mountPath: /home
      volumes:
        - name: block-storage-pv
          persistentVolumeClaim:
            claimName: block-storage-pvc
    
  11. Crie o pod em seu cluster.

    kubectl create -f pod.yaml
    
  12. Depois que o pod estiver no status Running, obtenha os logs.

    kubectl logs
    

    Saída de exemplo

    2022-01-21 16:11:00
    

Você criou com êxito um PV e ligou-o a um PVC. Então você implementou um app que usa Block Storage. Agora os usuários de cluster podem montar a PVC para suas implementações e começar a ler e a gravar no volume persistente.

Usando o armazenamento de bloco em um conjunto stateful

Se você tiver um app stateful como um banco de dados, será possível criar conjuntos stateful que usam armazenamento de bloco para armazenar os dados de seu app. Como alternativa, é possível usar um banco de dados como um serviço do IBM Cloud e armazenar seus dados na nuvem.

O que preciso levar em consideração ao adicionar armazenamento em bloco a um stateful set?
Para incluir armazenamento em um conjunto stateful, especifique sua configuração de armazenamento na seção volumeClaimTemplates do YAML do conjunto stateful. O volumeClaimTemplates é a base para seu PVC e pode incluir a classe de armazenamento e o tamanho ou IOPS do armazenamento de bloco que você deseja provisionar. No entanto, se você desejar incluir rótulos nos volumeClaimTemplates, os Kubernetes não incluirão esses rótulos ao criar o PVC. Em vez disso, deve-se incluir os rótulos diretamente no conjunto stateful.

Não é possível implementar dois conjuntos stateful ao mesmo tempo. Se você tentar criar um conjunto stateful antes que um diferente seja totalmente implementado, a implementação do conjunto stateful poderá levar a resultados inesperados.

Como posso criar meu stateful set em uma zona específica?
Em um cluster com várias zonas, é possível especificar a zona e a região na qual você deseja criar seu conjunto stateful nas seções spec.selector.matchLabels e spec.template.metadata.labels do YAML do conjunto stateful. Como alternativa, é possível incluir esses rótulos em uma classe de armazenamento customizada e usar essa classe de armazenamento na seção volumeClaimTemplates de seu conjunto stateful.
Posso adiar a vinculação de um PV ao meu pod com estado até que o pod esteja pronto?
Sim, é possível criar sua própria classe de armazenamento para o seu PVC que inclui o campo volumeBindingMode: WaitForFirstConsumer
Quais são as opções disponíveis para adicionar armazenamento em bloco a um stateful set?
Para criar automaticamente seu PVC ao criar o conjunto stateful, use o fornecimento dinâmico. Também é possível optar por pré-provisionar os PVCs ou usar PVCs existentes com o conjunto stateful.

Criando a PVC usando fornecimento dinâmico ao criar um conjunto stateful

Use essa opção se desejar criar automaticamente o PVC ao criar o conjunto stateful.

Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

Conclua as etapas a seguir para verificar se todos os conjuntos stateful existentes em seu cluster estão totalmente implementados Se um conjunto stateful ainda estiver sendo implementado, não será possível começar a criar o conjunto stateful. Deve-se aguardar até que todos os conjuntos stateful no cluster estejam totalmente implementados para evitar resultados inesperados.

  1. Liste os conjuntos stateful existentes em seu cluster.

    kubectl get statefulset --all-namespaces
    

    Saída de exemplo

    NAME              DESIRED   CURRENT   AGE
    mystatefulset     3         3         6s
    
  2. Visualize o Status dos pods de cada conjunto stateful para assegurar-se de que a implementação do conjunto stateful esteja concluída.

    kubectl describe statefulset <statefulset_name>
    

    Saída de exemplo

    Name:               nginx
    Namespace:          default
    CreationTimestamp:  Fri, 05 Oct 2022 13:22:41 -0400
    Selector:           app=nginx,billingType=hourly,region=us-south,zone=dal10
    Labels:             app=nginx
    billingType=hourly
    region=us-south
    zone=dal10
    Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"podManagementPolicy":"Par..."
    Replicas:           3 desired | 3 total
    Pods Status:        0 Running / 3 Waiting / 0 Succeeded / 0 Failed
    Pod Template:
    Labels:  app=nginx
    billingType=hourly
    region=us-south
    zone=dal10
    ...
    

    Um conjunto stateful é totalmente implementado quando o número de réplicas localizadas na seção Réplicas de sua saída da CLI é igual ao número de pods Em execução na seção Status dos pods. Se um conjunto stateful ainda não estiver totalmente implementado, aguarde até que a implementação seja concluída antes de continuar.

  3. Crie um arquivo de configuração para seu conjunto stateful e o serviço usado para expor o conjunto stateful. O exemplo a seguir mostra como implementar NGINX como um conjunto stateful com três réplicas. Para cada réplica, um dispositivo de armazenamento de bloco de 20 gigabyte é provisionado com base nas especificações que são definidas na classe de armazenamento ibmc-block-retain-bronze. Todos os dispositivos de armazenamento são provisionados na zona dal10. Como o Block Storage não pode ser acessado de outras zonas, todas as réplicas do conjunto stateful também serão implementadas em nós do trabalhador localizados em dal10.

    apiVersion: v1
    kind: Service
    metadata:
     name: nginx
     labels:
    app: nginx
    spec:
    ports:
    - port: 80
        name: web
    clusterIP: None
    selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx
    spec:
      serviceName: "nginx"
      replicas: 3
      podManagementPolicy: Parallel
      selector:
        matchLabels:
        app: nginx
        billingType: "hourly"
        region: "us-south" # Enter the region where your cluster is located.
        zone: "dal10"
    template:
      metadata:
      labels:
          app: nginx
          billingType: "hourly"
          region: "us-south"
          zone: "dal10"
      spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myvol
        mountPath: /usr/share/nginx/html
    volumeClaimTemplates:
    - metadata:
        name: myvol
        spec:
        accessModes:
        - ReadWriteOnce
        resources:
            requests:
            storage: 20Gi
            iops: "300" #required only for performance storage
        storageClassName: ibmc-block-retain-bronze
    

    O exemplo a seguir mostra como implementar NGINX como um conjunto stateful com três réplicas. O conjunto stateful não especifica a região e a zona em que o armazenamento de bloco é criado. Em vez disso, o conjunto stateful usa uma regra de antiafinidade para assegurar que os pods sejam distribuídos entre os nós do trabalhador e as zonas. Ao definir topologykey: failure-domain.beta.kubernetes.io/zone, o planejador de Kubernetes não poderá planejar um pod em um nó do trabalhador se o nó do trabalhador estiver na mesma zona que um pod com o rótulo app: nginx. Para cada pod do conjunto stateful, dois PVCs são criados conforme definido na seção volumeClaimTemplates, mas a criação das instâncias de armazenamento de bloco é atrasada até que um pod do conjunto stateful que use o armazenamento seja planejado. Essa configuração é referida como planejamento de volume com reconhecimento de topologia.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ibmc-block-bronze-delayed
    parameters:
      billingType: hourly
      classVersion: "2"
      fsType: ext4
      iopsPerGB: "2"
      sizeRange: '[20-12000]Gi'
      type: Endurance
    provisioner: ibm.io/ibmc-block
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 3
      podManagementPolicy: "Parallel"
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - nginx
                  topologyKey: failure-domain.beta.kubernetes.io/zone
          containers:
          - name: nginx
            image: registry.k8s.io/nginx-slim:0.8
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: myvol1
              mountPath: /usr/share/nginx/html
            - name: myvol2
              mountPath: /tmp1
      volumeClaimTemplates:
      - metadata:
          name: myvol1
        spec:
          accessModes:
          - ReadWriteOnce # access mode
          resources:
            requests:
              storage: 20Gi
          storageClassName: ibmc-block-bronze-delayed
      - metadata:
          name: myvol2
        spec:
          accessModes:
          - ReadWriteOnce # access mode
          resources:
            requests:
              storage: 20Gi
          storageClassName: ibmc-block-bronze-delayed
    
    name
    Insira um nome para seu conjunto stateful. O nome inserido é usado para criar o nome da PVC no formato: <volume_name>-<statefulset_name>-<replica_number>.
    serviceName
    Insira o nome do serviço que deseja usar para expor o conjunto stateful.
    replicas
    Insira o número de réplicas para seu conjunto stateful.
    podManagementPolicy
    Insira a política de gerenciamento de pod que deseja usar para o conjunto stateful.
    • OrderedReady: Com essa opção, as réplicas do conjunto stateful são implementadas uma após a outra. Por exemplo, se você especificou três réplicas, o Kubernetes criará o PVC para a sua primeira réplica, esperará até que o PVC seja ligado, implementará a réplica do conjunto stateful e montará o PVC na réplica. Depois que a implementação é concluída, a segunda réplica é implementada. Para obter mais informações sobre esta opção, consulte Gerenciamento de pod OrderedReady
    • Parallel: com esta opção, a implementação de todas as réplicas do conjunto stateful é iniciada ao mesmo tempo. Se o seu app suportar a implementação paralela de réplicas, use essa opção para economizar tempo de implementação para seus PVCs e réplicas do conjunto stateful.
    matchLabels
    Na seção de seletor de especificação, insira todos os rótulos que você deseja incluir em seu conjunto stateful e seu PVC. Os rótulos incluídos no volumeClaimTemplates de seu conjunto stateful não são reconhecidos pelo Kubernetes. Os rótulos de amostra que é possível que você queira incluir são:
    • região e zona: se quiser que todas as réplicas de conjunto stateful e PVCs sejam criadas em uma zona específica, inclua ambos os rótulos. Também é possível especificar a zona e a região na classe de armazenamento usada. Se você não especificar uma zona e região e tiver um cluster multizona, a zona na qual o armazenamento é provisionado será selecionada em uma base round-robin para equilibrar as solicitações de volume uniformemente em todas as zonas.
    • billingType: Insira o tipo de cobrança que você deseja usar para seus PVCs. Escolha entre hourly ou monthly. Se você não especificar esse rótulo, todas as PVCs serão criadas com um tipo de faturamento por hora.
    labels
    Na seção de metadados do modelo de especificação, insira os mesmos rótulos que os incluídos na seção spec.selector.matchLabels.
    affinity
    Na seção de especificação de modelo de especificação, especifique sua regra de antiafinidade para garantir que seus pods de conjunto stateful sejam distribuídos em nós e zonas do trabalhador. O exemplo mostra uma regra de antiafinidade na qual o pod do conjunto stateful prefere não ser planejado em um nó do trabalhador no qual um pod que tem o rótulo app: nginx é executado. O topologykey: failure-domain.beta.kubernetes.io/zone restringe essa regra de antiafinidade ainda mais e evita que o pod seja planejado em um nó trabalhador se o nó do trabalhador estiver na mesma zona que um pod que possui o rótulo app: nginx. Usando essa regra de antiafinidade, é possível alcançar a antiafinidade entre os nós do trabalhador e as zonas.
    name
    Na seção de metadados de modelos de solicitação de volume de especificação, insira um nome para o seu volume. Use o mesmo nome definido na seção spec.containers.volumeMount.name. O nome inserido aqui é usado para criar o nome para a PVC no formato: <volume_name>-<statefulset_name>-<replica_number>.
    storage
    Na seção de solicitações de recursos de especificação de modelos de solicitação de volume de especificação, digite o tamanho do armazenamento de blocos em gigabytes (Gi).
    iops
    Na seção de solicitações de recursos de especificação de modelos de solicitação de volume de especificação, se você desejar provisionar o armazenamento de desempenho, digite o número de IOPS. Se você usar uma classe de armazenamento do Endurance e especificar vários IOPS, o número de IOPS será ignorado. Em vez disso, o IOPS especificado em sua classe de armazenamento é usado.
    storageClassName
    Na seção de especificação de modelos de solicitação de volume de especificação, insira a classe de armazenamento que você deseja usar. Para listar as classes de armazenamento existentes, execute o comando kubectl get sc | grep block``. Se você não especificar uma classe de armazenamento, a PVC será criada com a classe de armazenamento padrão que está configurada no cluster. Certifique-se de que a classe de armazenamento padrão use o provisionador ibm.io/ibmc-block para que seu conjunto stateful seja provisionado com armazenamento de bloco.
  4. Crie seu conjunto stateful.

    kubectl apply -f statefulset.yaml
    
  5. Aguarde o seu conjunto stateful ser implementado.

    kubectl describe statefulset <statefulset_name>
    

    Para ver o status atual de seus PVCs, execute kubectl get pvc. O nome da PVC é formatado como <volume_name>-<statefulset_name>-<replica_number>.

Provisionamento estático utilizando PVCs existentes com um conjunto com estado

É possível pré-provisionar seus PVCs antes de criar seu conjunto stateful ou usar PVCs existentes com esse conjunto.

Quando você provisionar dinamicamente seus PVCs ao criar o conjunto stateful, o nome do PVC será designado com base nos valores usados no arquivo YAML do conjunto stateful. Para que o conjunto stateful use PVCs existentes, o nome dos PVCs deve corresponder ao nome que seria criado automaticamente ao usar o fornecimento dinâmico.

Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  1. Para pré-fornecer o PVC para seu conjunto stateful antes de criar o conjunto stateful, siga as etapas de 1 a 3 em Incluindo armazenamento de bloco em apps para criar um PVC para cada réplica do conjunto stateful. Certifique-se de criar a PVC com um nome que siga o seguinte formato: <volume_name>-<statefulset_name>-<replica_number>.
volume_name

Use o nome que deseja especificar na seção spec.volumeClaimTemplates.metadata.name do conjunto stateful, como nginxvol.

statefulset_name

Use o nome que deseja especificar na seção metadata.name do conjunto stateful, como nginx_statefulset.

replica_number

Insira o número da réplica, começando com 0.

Por exemplo, se três réplicas de conjunto stateful devem ser criadas, crie três PVCs com nomes a seguir: nginxvol-nginx_statefulset-0, nginxvol-nginx_statefulset-1 e nginxvol-nginx_statefulset-2.

Procurando criar um PVC e um PV para um dispositivo de armazenamento existente? Crie seu PVC e PV usando o fornecimento estático.

  1. Siga as etapas em Fornecimento dinâmico: criando o PVC ao criar um conjunto stateful para criar seu conjunto stateful. O nome da PVC segue o formato <volume_name>-<statefulset_name>-<replica_number>. Certifique-se de usar os valores a seguir de seu nome do PVC na especificação do conjunto stateful: spec.volumeClaimTemplates.metadata.name : Insira o <volume_name> do nome da PVC.
metadata.name

Insira o <statefulset_name> do nome da PVC.

spec.replicas

Insira o número de réplicas que deseja criar para o conjunto stateful. O número de réplicas deve ser igual ao número de PVCs criados anteriormente.

Se as PVCs estiverem em zonas diferentes, não inclua um rótulo de região ou zona no conjunto stateful.

  1. Verifique se as PVCs são usadas nos pods de réplica do conjunto stateful listando os pods em seu cluster. Identifique os pods que pertencem ao conjunto stateful.

    kubectl get pods
    
  2. Verifique se o PVC existente está montado na réplica do conjunto stateful. Revise o ClaimName na seção Volumes de sua saída da CLI.

    kubectl describe pod <pod_name>
    

    Saída de exemplo

    Name:           nginx-0
    Namespace:      default
    Node:           10.xxx.xx.xxx/10.xxx.xx.xxx
    Start Time:     Fri, 05 Oct 2022 13:24:59 -0400
    ...
    Volumes:
    myvol:
      Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
      ClaimName:  myvol-nginx-0
    ...
    

Mudando o tamanho e o IOPS de seu dispositivo de armazenamento existente

Se você desejar aumentar a capacidade de armazenamento ou o desempenho, será possível modificar seu volume existente.

Para perguntas sobre faturamento e para localizar as etapas de como usar o console do IBM Cloud para modificar seu armazenamento, consulte Expandindo a capacidade do Block Storage e Ajustando o IOPS. As atualizações que você faz por meio do console não são refletidas no volume persistente (PV). Para incluir essas informações no PV, execute kubectl patch pv <pv_name> e atualize manualmente o tamanho e IOPS na seção Rótulos e Anotação do PV.

  1. Liste os PVCs em seu cluster e anote o nome do PV associado na coluna VOLUME.

    kubectl get pvc
    

    Saída de exemplo

    NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
    myvol            Bound     pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3   20Gi       RWO            ibmc-block-bronze    147d
    
  2. Para mudar o IOPS e o tamanho para seu armazenamento de bloco, edite o IOPS na seção metadata.labels.IOPS de seu PV primeiro. É possível aumentar ou diminuir o valor de IOPS Certifique-se de inserir um IOPS que seja suportado para o tipo de armazenamento que você tem. Por exemplo, se você tiver armazenamento de bloco do Endurance com 4 IOPS, será possível mudar o IOPS para 2 ou 10. Para obter mais valores de IOPS suportados, consulte Decidindo sobre a configuração de armazenamento de bloco.

    kubectl edit pv <pv_name>
    

    Para mudar o IOPS por meio da CLI, deve-se também mudar o tamanho do seu armazenamento de bloco. Se você deseja mudar somente o IOPS, mas não o tamanho, deve-se solicitar a mudança de IOPS por meio do console.

  3. Edite a PVC e inclua o novo tamanho na seção spec.resources.requests.storage de sua PVC. É possível mudar para um tamanho maior somente até a capacidade máxima que é configurada por sua classe de armazenamento. Não é possível reduzir o armazenamento existente. Para ver os tamanhos disponíveis para sua classe de armazenamento, consulte Decidindo sobre a configuração de armazenamento de bloco.

    kubectl edit pvc <pvc_name>
    
  4. Verifique se a expansão de volume foi solicitada. A expansão de volume foi solicitada com êxito quando você vê uma mensagem FileSystemResizePending na seção Condições de sua saída da CLI.

    kubectl describe pvc <pvc_name>
    

    Saída de exemplo

    ...
    Conditions:
    Type                      Status  LastProbeTime                     LastTransitionTime                Reason  Message
    ----                      ------  -----------------                 ------------------                ------  -------
    FileSystemResizePending   True    Mon, 01 Jan 0001 00:00:00 +0000   Thu, 25 Apr 2022 15:52:49 -0400           Waiting for user to (re-)start a pod to finish file system resize of volume on node.
    
  5. Liste todos os pods que montam a PVC. Se a PVC for montada por um pod, a expansão de volume será processada automaticamente. Se a sua PVC não for montada por um pod, a PVC deverá ser montada em um pod para que a expansão de volume possa ser processada.

    kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
    

    Os pods montados são retornados no formato: <pod_name>: <pvc_name>.

  6. Se a PVC não for montada por um pod, crie um pod ou uma implementação e monte a PVC. Se a PVC for montada por um pod, continue com a próxima etapa.

  7. Verifique se o tamanho e o IOPS são mudados na seção Rótulos de sua saída da CLI. Esse processo pode levar alguns minutos para ser concluído.

    kubectl describe pv <pv_name>
    

    Saída de exemplo

    ...
    Labels:       CapacityGb=50
    Datacenter=dal10
    IOPS=500
    
  8. Efetue login no pod que monta o PVC.

    kubectl exec <pod-name> -it -- bash
    
  9. Execute o seguinte comando para usar binários do host.

    chroot /host
    
  10. Redimensione o sistema de arquivos.

    sudo resize2fs <filesystem-path>
    

    Exemplo de comando

    sudo resize2fs /dev/vdg
    
  11. Verifique se o sistema de arquivos está redimensionado.

    df -h
    

Fazendo backup e restaurando dados

O armazenamento de bloco é provisionado no mesmo local que os nós do trabalhador em seu cluster. O armazenamento é hospedado em servidores em cluster pela IBM para fornecer disponibilidade no caso de um servidor ficar inativo. No entanto, o armazenamento de bloco não será submetido a backup automaticamente e poderá estar inacessível se o local inteiro falhar. Para proteger seus dados contra perda ou danos, será possível configurar backups periódicos que poderão ser usados para restaurar seus dados quando necessário.

Revise as opções de backup e restauração a seguir para seu armazenamento de bloco:

Configurar capturas instantâneas periódicas

É possível configurar capturas instantâneas periódicas para o seu armazenamento de bloco, que é uma imagem somente leitura que captura o estado da instância em um momento.

Para armazenar a captura instantânea, deve-se solicitar espaço de captura instantânea em seu armazenamento de bloco. As capturas instantâneas são armazenadas na instância de armazenamento existente dentro da mesma zona. Será possível restaurar dados de uma captura instantânea se um usuário remover dados importantes acidentalmente do volume. \n \n **Para criar uma captura instantânea para o volume, conclua as etapas a seguir.

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

  2. Efetue login na CLI ibmcloud sl.

    ibmcloud sl init
    
  3. PVs de Lista existente em seu cluster.

    kubectl get pv
    
  4. Obtenha os detalhes para o PV para o qual você deseja criar espaço de captura instantânea e anote o ID do volume, o tamanho e o IOPS. O tamanho e o IOPS são mostrados na seção Labels de sua saída da CLI.

    kubectl describe pv <pv_name>
    
  5. Para localizar o ID do volume, revise a anotação ibm.io/network-storage-id de sua saída da CLI.

  6. Crie o tamanho da captura instantânea para o volume existente com os parâmetros que você recuperou na etapa anterior.

    ibmcloud sl block snapshot-order <volume_ID> --size <size> --tier <iops>
    
  7. Espere o tamanho da captura instantânea para criar. O tamanho da captura instantânea é provisionado com êxito quando o Tamanho da captura instantânea (GB) na saída da CLI muda de 0 para o tamanho solicitado.

    ibmcloud sl block volume-detail <volume_ID>
    
  8. Crie a captura instantânea para o volume e anote o ID da captura instantânea que é criado para você.

    ibmcloud sl block snapshot-create <volume_ID>
    
  9. Verifique se a captura instantânea foi criada com êxito.

    ibmcloud sl block snapshot-list <volume_ID>
    
  10. Configure o planejamento de capturas instantâneas Para obter mais informações sobre as opções disponíveis para seu planejamento de captura instantânea, consulte a documentação da CLI.

    ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS>
    
  11. Para restaurar dados de uma captura instantânea para um volume existente, execute o comando a seguir.

    ibmcloud sl block snapshot-restore <volume_ID> <snapshot_ID>
    

Replicando capturas instantâneas para outra zona

Para proteger seus dados de uma falha de zona, é possível replicar capturas instantâneas para uma instância de armazenamento de bloco que está configurada em outra zona.

Os dados podem ser replicados do armazenamento primário para o armazenamento de backup somente. Não é possível montar uma instância replicada do Block Storage para um cluster. Quando seu armazenamento primário falha, é possível configurar manualmente o armazenamento de backup replicado para ser o primário. Em seguida, é possível montá-lo para seu cluster. Depois que o armazenamento primário é restaurado, é possível restaurar os dados do armazenamento de backup.

Duplicar o armazenamento

É possível duplicar sua instância de armazenamento de bloco na mesma zona que a instância de armazenamento original.

Uma duplicata tem os mesmos dados que a instância de armazenamento original no momento em que é criada. Diferentemente de réplicas, use a duplicata como uma instância de armazenamento independente da original. Para duplicar, primeiramente configure capturas instantâneas para o volume.

Fazendo backup dos dados para o IBM Cloud® Object Storage

É possível usar o gráfico do Helm ibm-backup-restore para acelerar um pod de backup e restauração no cluster.

Esse pod contém um script para executar um backup único ou periódico para qualquer persistent volume claim (PVC) em seu cluster. Os dados são armazenados em sua instância do IBM Cloud® Object Storage que você configurou em uma zona.

O armazenamento de bloco é montado com um modo de acesso RWO. This access allows only one pod to be mounted to the block storage at a time. Para fazer backup de seus dados, deve-se desmontar o pod do aplicativo do armazenamento, montá-lo em seu pod de backup, fazer backup dos dados e remontar o armazenamento para o pod do aplicativo.

Para tornar os seus dados ainda mais altamente disponíveis e proteger o seu app de uma falha de zona, configure uma segunda instância do Object Storage e replique dados entre as zonas. Se você precisar restaurar dados de sua instância do Object Storage, use o pod de restauração fornecido com o gráfico do Helm.

Copiando dados de e para pods e contêineres

É possível usar o comando kubectl cp para copiar arquivos e diretórios para/de pods ou contêineres específicos no cluster.

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

Ao executar o comando kubectl cp, se você não especificar um contêiner com -c, o comando usará o primeiro contêiner disponível no pod.

Copiar dados de sua máquina local para um pod em seu cluster.

kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>

Copiar dados de um pod em seu cluster para a sua máquina local.

kubectl cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>

Copiar dados de sua máquina local para um contêiner específico que é executado em um pod em seu cluster.

kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER

Referência de classe de armazenamento

Bronze

Nome
ibmc-block-bronze
ibmc-block-retain-bronze
Tipo
Armazenamento de resistência
Sistema de arquivos
ext4
IOPS por gigabyte
2
Intervalo de tamanho em gigabytes
20-12.000 Gi
Disco rígido
SSD
Política de recuperação
ibmc-block-bronze: Excluir
ibmc-block-retain-bronze: Reter

Prata

Nome
ibmc-block-silver
ibmc-block-retain-silver
Tipo
Armazenamento de resistência
Sistema de arquivos
ext4
IOPS por gigabyte
4
Intervalo de tamanho em gigabytes
20-12.000 Gi
Disco rígido
SSD
Política de recuperação
ibmc-block-silver: Excluir
ibmc-block-retain-silver: Reter

Ouro

Nome
ibmc-block-gold
ibmc-block-retain-gold
Tipo
Armazenamento de resistência
Sistema de arquivos
ext4
IOPS por gigabyte
10
Intervalo de tamanho em gigabytes
20-4000 Gi
Disco rígido
SSD
Política de recuperação
ibmc-block-gold: Excluir
ibmc-block-retain-gold: Reter

Customizado

Nome
ibmc-block-custom
ibmc-block-retain-custom
Tipo
Sistema PerformanceFile
ext4
IOPS e tamanho
Faixa de tamanho em gigabytes/intervalo de IOPS em múltiplos de 100
  • 20-39 Gi / 100-1000 IOPS
  • 40-79 Gi / 100-2000 IOPS
  • 80-99 Gi / 100-4000 IOPS
  • 100-499 Gi / 100-6000 IOPS
  • 500-999 Gi / 100-10000 IOPS
  • 1000-1999 Gi / 100-20000 IOPS
  • 2000-2999 Gi / 200-40000 IOPS
  • 3000-3999 Gi / 200-48000 IOPS
  • 4000-7999 Gi / 300-48000 IOPS
  • 8000-9999 Gi / 500-48000 IOPS
  • 10000-12000 Gi / 1000-48000 IOPS
Disco rígido
A razão de IOPS para gigabyte determina o tipo de disco rígido que é provisionado. Para determinar a sua razão de IOPS para gigabyte, você divide o IOPS pelo tamanho de seu armazenamento.
Exemplo: você escolheu 500Gi de armazenamento com 100 IOPS. A sua razão é 0,2 (100 IOPS/500 Gi).
Visão geral dos tipos de disco rígido por proporção:
  • Menor ou igual a 0,3: SATA
  • Maior que 0,3: SSD
Política de recuperação
ibmc-block-custom: Excluir
ibmc-block-retain-custom: Reter

Classes de armazenamento customizado de amostra

É possível criar uma classe de armazenamento customizada e usar a classe de armazenamento no PVC.

O IBM Cloud Kubernetes Service fornece classes de armazenamento predefinidas para provisionar armazenamento de bloco com uma camada e configuração específicas. Às vezes você pode querer provisionar armazenamento com uma configuração diferente que não seja coberta nas classes de armazenamento predefinidas. É possível usar os exemplos neste tópico para localizar classes de armazenamento customizadas de amostra.

Para criar sua classe de armazenamento customizada, consulte Customizando uma classe de armazenamento. Em seguida, use a sua classe de armazenamento customizada em seu PVC.

Criando armazenamento de reconhecimento de topologia

Para usar o armazenamento de bloco em um cluster com diversas zonas, seu pod deve ser planejado na mesma zona que a sua instância de armazenamento de bloco para que seja possível ler e gravar no volume. Antes da introdução do planejamento de volume com reconhecimento de topologia pelo Kubernetes, o fornecimento dinâmico de seu armazenamento criava automaticamente a instância de armazenamento de bloco quando um PVC era criado. Em seguida, quando você criou sua pod, o planejador Kubernetes tentou implementar o pod no mesmo centro de dados que sua instância de armazenamento de bloco.

A criação da instância de armazenamento de bloco sem saber as restrições do pod pode levar a resultados indesejados. Por exemplo, seu pod pode não estar apto a ser planejado para o mesmo nó do trabalhador que seu armazenamento porque o nó do trabalhador tem recursos insuficientes ou o nó do trabalhador está contaminado e não permite que o pod seja planejado. Com o planejamento de volume de reconhecimento de topologia, a instância de armazenamento de bloco é atrasada até que o primeiro pod que usa o armazenamento seja criado.

Para usar o planejamento de volume direcionado à topologia, certifique-se de ter instalado o plug-in do IBM Cloud Block Storage versão 1.2.0 ou mais recente.

Os exemplos a seguir mostram como criar classes de armazenamento que atrasem a criação da instância de armazenamento de bloco até que o primeiro pod que usa esse armazenamento esteja pronto para ser planejado. Para atrasar a criação, deve-se incluir a opção volumeBindingMode: WaitForFirstConsumer. Se você não incluir essa opção, o volumeBindingMode será configurado automaticamente como Immediate e a instância do Block Storage será criada na criação da PVC.

Exemplo para o armazenamento de bloco de resistência.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-bronze-delayed
  parameters:
    billingType: hourly
    classVersion: "2"
    fsType: ext4
    iopsPerGB: "2"
    sizeRange: '[20-12000]Gi'
    type: Endurance
  provisioner: ibm.io/ibmc-block
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer

Exemplo para o armazenamento de bloco de desempenho.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-performance-storageclass
  labels:
  kubernetes.io/cluster-service: "true"
  provisioner: ibm.io/ibmc-block
  parameters:
    billingType: "hourly"
    classVersion: "2"
    sizeIOPSRange: |-
    "[20-39]Gi:[100-1000]"
    "[40-79]Gi:[100-2000]"
    "[80-99]Gi:[100-4000]"
    "[100-499]Gi:[100-6000]"
    "[500-999]Gi:[100-10000]"
    "[1000-1999]Gi:[100-20000]"
    "[2000-2999]Gi:[200-40000]"
    "[3000-3999]Gi:[200-48000]"
    "[4000-7999]Gi:[300-48000]"
    "[8000-9999]Gi:[500-48000]"
    "[10000-12000]Gi:[1000-48000]"
    type: "Performance"
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer

Especificando a zona e a região

Se você deseja criar seu armazenamento de bloco em uma zona específica, será possível especificar a zona e a região em uma classe de armazenamento customizada.

Use a classe de armazenamento customizada se você usar o plug-in IBM Cloud Block Storage versão 1.0.0 ou se você desejar provisionar estaticamente o armazenamento de bloco em uma zona específica. Em todos os outros casos, especifique a zona diretamente em seu PVC.

O arquivo .yaml a seguir customiza uma classe de armazenamento que é baseada na classe de armazenamento sem retenção ibm-block-silver: o type é "Endurance", o iopsPerGB é 4, o sizeRange é "[20-12000]Gi" e o reclaimPolicy é configurado para "Delete". A zona é especificada como dal12. Para usar uma classe de armazenamento diferente como sua base, consulte a referência de classe de armazenamento.

Crie a classe de armazenamento na mesma região e zona que os nós do cluster e do trabalhador. Para obter a região do cluster, execute ibmcloud ks cluster get --cluster <cluster_name_or_ID> e procure o prefixo da região na URL principal, como eu-de em https://c2.eu-de.containers.cloud.ibm.com:11111. Para obter a zona do nó do trabalhador, execute ibmcloud ks worker ls --cluster <cluster_name_or_ID>.

Exemplo para o armazenamento de bloco de resistência.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-silver-mycustom-storageclass
  labels:
    kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
  zone: "dal12"
  region: "us-south"
  type: "Endurance"
  iopsPerGB: "4"
  sizeRange: "[20-12000]Gi"
reclaimPolicy: "Delete"

Exemplo para o armazenamento de bloco de desempenho.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: ibmc-block-performance-storageclass
labels:
  kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
  zone: "dal12"
  region: "us-south"
  type: "Performance"
  sizeIOPSRange: |-
  "[20-39]Gi:[100-1000]"
  "[40-79]Gi:[100-2000]"
  "[80-99]Gi:[100-4000]"
  "[100-499]Gi:[100-6000]"
  "[500-999]Gi:[100-10000]"
  "[1000-1999]Gi:[100-20000]"
  "[2000-2999]Gi:[200-40000]"
  "[3000-3999]Gi:[200-48000]"
  "[4000-7999]Gi:[300-48000]"
  "[8000-9999]Gi:[500-48000]"
  "[10000-12000]Gi:[1000-48000]"
reclaimPolicy: "Delete"

Montando o armazenamento de bloco com um sistema de arquivos XFS

Os exemplos a seguir criam uma classe de armazenamento que provisiona armazenamento de bloco com um sistema de arquivos XFS.

Exemplo para o armazenamento de bloco de resistência.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-custom-xfs
labels:
  addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
  type: "Endurance"
  iopsPerGB: "4"
  sizeRange: "[20-12000]Gi"
  fsType: "xfs"
reclaimPolicy: "Delete"

Exemplo para o armazenamento de bloco de desempenho.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-custom-xfs
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
  classVersion: "2"
  type: "Performance"
  sizeIOPSRange: |-
    [20-39]Gi:[100-1000]
    [40-79]Gi:[100-2000]
    [80-99]Gi:[100-4000]
    [100-499]Gi:[100-6000]
    [500-999]Gi:[100-10000]
    [1000-1999]Gi:[100-20000]
    [2000-2999]Gi:[200-40000]
    [3000-3999]Gi:[200-48000]
    [4000-7999]Gi:[300-48000]
    [8000-9999]Gi:[500-48000]
    [10000-12000]Gi:[1000-48000]
  fsType: "xfs"
reclaimPolicy: "Delete"

Removendo o armazenamento persistente de um cluster

Ao configurar o armazenamento persistente em seu cluster, você tem três componentes principais: a solicitação de volume persistente do Kubernetes (PVC) que solicita armazenamento, o volume persistente do Kubernetes (PV) que é montado em um pod e descrito no PVC e a instância de infraestrutura da IBM Cloud, como um arquivo clássico ou armazenamento de bloco. Dependendo de como você criou seu armazenamento, pode ser necessário excluir todos os três componentes separadamente.

Entendendo suas opções de remoção de armazenamento

A remoção do armazenamento persistente de sua conta do IBM Cloud varia dependendo de como você provisionou o armazenamento e quais componentes você já removeu.

Meu armazenamento persistente é excluído quando eu excluo meu cluster?
Durante a exclusão do cluster, você tem a opção de remover seu armazenamento persistente. No entanto, dependendo de como seu armazenamento foi provisionado, a remoção de seu armazenamento pode não incluir todos os componentes de armazenamento. Se você provisionou dinamicamente o armazenamento com uma classe de armazenamento que define a opção “ reclaimPolicy: Delete ”, seu PVC, PV e a instância de armazenamento serão excluídos automaticamente quando você excluir o cluster. No caso de armazenamento provisionado estaticamente ou de armazenamento provisionado com uma classe de armazenamento que define a opção “ reclaimPolicy: Retain ”, o PVC e o PV são removidos quando você exclui o cluster, mas sua instância de armazenamento e seus dados permanecem. Você ainda é cobrado por sua instância de armazenamento. Além disso, se você excluiu seu cluster em um estado não funcional, o armazenamento ainda poderá existir mesmo se você escolheu removê-lo.
Como faço para excluir o armazenamento se quiser manter meu cluster?
Ao provisionar dinamicamente o armazenamento com uma classe de armazenamento que configura reclaimPolicy: Delete, é possível remover o PVC para iniciar o processo de exclusão de seu armazenamento persistente. O PVC, o PV e a instância de armazenamento são removidos automaticamente. No caso de armazenamento provisionado estaticamente ou de armazenamento provisionado com uma classe de armazenamento que defina a opção “ reclaimPolicy: Retain ”, é necessário remover manualmente o PVC, o PV e a instância de armazenamento para evitar cobranças adicionais.
Como a cobrança é interrompida depois que eu excluir meu espaço de armazenamento?
Dependendo de quais componentes de armazenamento você excluir e quando, o ciclo de faturamento pode não parar imediatamente. Se você excluir o PVC e o PV, mas não a instância de armazenamento em sua conta do IBM Cloud, essa instância ainda existirá e você será cobrado por ela.

Se você excluir o PVC, o PV e a instância de armazenamento, o ciclo de faturamento parará, dependendo do billingType que você escolheu ao provisionar seu armazenamento e de como escolheu excluir o armazenamento.

  • Quando você cancela manualmente a instância de armazenamento persistente pelo console do IBM Cloud ou pela CLI, o faturamento é interrompido da seguinte forma:

    • Armazenamento por hora: o faturamento é parado imediatamente. Depois que seu armazenamento for cancelado, você ainda poderá ver sua instância de armazenamento no console por até 72 horas.
    • Armazenamento mensal: é possível escolher entre cancelamento imediato ou cancelamento na data do aniversário. Em ambos os casos, você é faturado até o término do ciclo de faturamento atual e as paradas de faturamento para o próximo ciclo de faturamento. Depois que seu armazenamento for cancelado, você ainda poderá ver sua instância de armazenamento no console ou na CLI por até 72 horas.
    • Cancelamento imediato: escolha essa opção para remover imediatamente seu armazenamento. Nem você nem seus usuários poderão mais usar o armazenamento ou recuperar os dados.
    • Data do aniversário: escolha essa opção para cancelar seu armazenamento na data do próximo aniversário. Suas instâncias de armazenamento permanecem ativas até a data do próximo aniversário e é possível continuar a usá-las até essa data para que a sua equipe tenha tempo para fazer backups dos dados.
  • Ao provisionar dinamicamente o armazenamento com uma classe de armazenamento que configura reclaimPolicy: Delete e você optar por remover o PVC, o PV e a instância de armazenamento serão removidos imediatamente. Para armazenamento em faturamento por hora, o faturamento é parado imediatamente. Para o armazenamento faturado mensal, você ainda é cobrado pelo restante do mês. Depois que seu armazenamento for removido e o faturamento for interrompido, você ainda poderá ver sua instância de armazenamento no console ou na CLI por até 72 horas.

O que preciso saber antes de excluir o armazenamento persistente?
Ao limpar o armazenamento persistente, você exclui todos os dados que estão armazenados nele. Se precisar de uma cópia dos dados, faça um backup.
Apaguei minha instância de armazenamento. Por que ainda consigo ver minha instância?
Depois de remover o armazenamento persistente, ele pode levar até 72 horas para que a remoção seja totalmente processada e para que o armazenamento desapareça do console ou da CLI do IBM Cloud.

Limpando o armazenamento persistente

Remova o PVC, o PV e a instância de armazenamento de sua conta do IBM Cloud para evitar encargos adicionais para seu armazenamento persistente.

Antes de Iniciar:

Para limpar os dados persistentes:

  1. Liste os PVCs em seu cluster e anote o NAME do PVC, o STORAGECLASS e o nome do PV que está ligado ao PVC e mostrado como VOLUME.

    kubectl get pvc
    

    Saída de exemplo

    NAME                  STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS            AGE
    claim1   Bound     pvc-06886b77-102b-11e8-968a-f6612bb731fb   20Gi       RWO           class       78d
    claim2     Bound     pvc-457a2b96-fafc-11e7-8ff9-b6c8f770356c   4Gi        RWX           class 105d
    claim3      Bound     pvc-1efef0ba-0c48-11e8-968a-f6612bb731fb   24Gi       RWX           class        83d
    
  2. Revise o ReclaimPolicy e o billingType para a classe de armazenamento.

    kubectl describe storageclass <storageclass_name>
    

    Se a política de recuperação indicar Delete, seu PV e o armazenamento físico serão removidos quando você remover o PVC. Se a política de recuperação indicar Retain ou se você provisionar o armazenamento sem uma classe de armazenamento, o PV e o armazenamento físico não serão removidos quando o PVC for removido. Deve-se remover o PVC, o PV e o armazenamento físico separadamente.

    Se o seu armazenamento for cobrado mensalmente, você ainda será cobrado pelo mês inteiro, mesmo se remover o armazenamento antes do término do ciclo de faturamento.

  3. Remova quaisquer pods que montam o PVC. Liste os pods que montam o PVC. Se nenhum pod for retornado na saída da CLI, você não tem um pod que usa PVC.

    kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
    

    Saída de exemplo

    depl-12345-prz7b:    claim1
    
  4. Remova o pod que usa o PVC. Se o pod fizer parte de uma implementação, remova a implementação.

    kubectl delete pod <pod_name>
    
  5. Verifique se o pod foi removido.

    kubectl get pods
    
  6. Remova a PVC.

    kubectl delete pvc <pvc_name>
    
  7. Revise o status de seu PV. Use o nome do PV que você recuperou anteriormente como VOLUME. Quando você remove o PVC, o PV que está ligado ao PVC é liberado. Dependendo de como você provisionou seu armazenamento, seu PV entrará em um estado Deleting se o PV for excluído automaticamente ou em um estado Released se o PV deverá ser excluído manualmente. Nota: para PVs que são excluídos automaticamente, o status pode indicar brevemente Released antes de ser excluído. Execute novamente o comando após alguns minutos para ver se o PV foi removido.

    kubectl get pv <pv_name>
    
  8. Se o seu PV não for excluído, remova-o manualmente.

    kubectl delete pv <pv_name>
    
  9. Verifique se o PV foi removido.

    kubectl get pv
    
  10. Liste a instância de armazenamento físico para a qual o PV apontou e observe o id da instância de armazenamento físico.

    ibmcloud sl block volume-list --columns id --columns notes | grep <pv_name>
    

    Saída de exemplo

    12345678   {"plugin":"ibmcloud-block-storage-plugin-689df949d6-4n9qg","region":"us-south","cluster":"aa1a11a1a11b2b2bb22b22222c3c3333","type":"Endurance","ns":"default","pvc":"block-storage-pvc","pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7","storageclass":"ibmc-block-silver","reclaim":"Delete"}
    

    Entendendo as informações do campo do Notas:

    "plugin":"ibm-file-plugin-5b55b7b77b-55bb7"
    O plug-in de armazenamento que o cluster usa.
    "region":"us-south"
    A região em que seu cluster está.
    "cluster":"aa1a11a1a11b2b2bb22b22222c3c3333"
    O ID do cluster que está associado à instância de armazenamento.
    "type":"Endurance"
    O tipo de arquivo ou armazenamento de blocos, seja Endurance ou Performance.
    "ns":"default"
    O espaço de nomes em que a instância de armazenamento está implementada.
    "pvc":"block-storage-pvc"
    O nome da PVC associada à instância de armazenamento.
    "pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"
    A PV associada à instância de armazenamento.
    "storageclass":"ibmc-file-gold"
    O tipo de classe de armazenamento: bronze, prata, ouro ou customizado.
  11. Remova a instância de armazenamento físico.

    ibmcloud sl block volume-cancel <classic_block_id>
    
  12. Verifique se a instância de armazenamento físico foi removida.

O processo de exclusão pode levar até 72 horas para ser concluído.

ibmcloud sl block volume-list

Configurando o monitoramento para PVs de conectividade do limited

Ao criar um pod e um PVC que usam Block Storage for Classic, duas portas de destino são designadas ao volume persistente subjacente (PV) no qual o armazenamento é montado. Várias portas de destino permitem o failover no caso de uma porta ficar inativa

Em versões anteriores do driver Block Storage for Classic, a incapacidade de localizar 2 portas de destino ao montar um PV durante o lançamento causou uma falha de implementação..

No entanto, às vezes, como durante as janelas de manutenção do IaaS, você pode desejar que seus pods sejam implementados com sucesso com apenas uma porta de destino disponível no volume persistente.

A partir da versão 2.4.12 do driver Block Storage for Classic, os pods serão implementados com sucesso mesmo se apenas uma porta de destino puder ser designada pelo PV. Além dessa mudança de comportamento, os PVs agora incluem um novo rótulo para indicar a disponibilidade da rede em que um rótulo de healthy significa que 2 portas de destinos foram designadas e limited significa que apenas 1 porta de destino poderia ser designada durante a montagem.

Para monitorar as instâncias em que a conectividade do pod com o Block Storage for Classic é limitada, é possível configurar um alerta customizado que procura o rótulo limited. Em seguida, configure o limite de alerta para >0

  1. No painel do IBM Cloud Monitoring, selecione Novo alerta > Métrica.

  2. Selecione Consulta do Prom e insira kube_persistentvolume_labels{label_ibm_io_pv_connectivity_status='limited'}

  3. Configure o limite como >0 e configure a gravidade que deseja usar para esse alerta.

  4. Selecione o seu canal de notificação e salve o alerta.

Atribuição de perfis confiáveis ao armazenamento em bloco

Você pode usar perfis confiáveis para conceder a diferentes identidades IBM Cloud acesso a recursos em sua conta, incluindo suas soluções de armazenamento. Os perfis confiáveis centralizam o controle de acesso, eliminam a necessidade de chaves de API de longa duração e permitem que você defina o escopo das permissões para o mínimo necessário para uma tarefa específica. Para obter mais informações, consulte Configuração de um perfil confiável para componentes de armazenamento.