Configurando o Block Storage for VPC

O Block Storage for VPC fornece armazenamento de dados montado no hypervisor, de alto desempenho para suas instâncias de servidor virtual que pode ser provisionado em uma VPC.

É 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 a Block Storage for VPC é a opção de armazenamento correto para você, consulte Escolher uma solução de armazenamento. Para obter informações de precificação, consulte Precificação para o Block Storage for VPC.

  • O complemento do cluster Block Storage for VPC é ativado por padrão em clusters VPC.
  • Se você desativar o Block Storage for VPC complemento, ele permanecerá desativado até que você o ative novamente. Ele não é ativado quando você atualiza ou renova o mestre do cluster.

Início rápido para IBM Cloud Block Storage for VPC

Neste guia de início rápido, você cria um volume 10Gi 5IOPS tier Block Storage for VPC 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.

Agora disponível, você pode escolher uma classe de armazenamento de segunda geração.

Seus volumes Block Storage for VPC podem ser montados por vários pods, desde que esses pods sejam agendados no mesmo nó.

  1. Crie um arquivo para o seu PVC e nomeia-o pvc.yaml. Escolha entre uma classe de armazenamento de primeira geração e uma de segunda geração.

    Exemplo de primeira geração usando a classe de armazenamento ibmc-vpc-block-5iops-tier:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: ibmc-vpc-block-5iops-tier
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    

    Exemplo de segunda geração usando a classe de armazenamento ibmc-vpc-block-sdp:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: ibmc-vpc-block-sdp
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. Crie o PVC em seu cluster.

    kubectl apply -f pvc.yaml
    
  3. Depois que seu PVC estiver ligado, crie uma implementação de app que use o seu PVC. Crie um arquivo para sua implementação e nomeia-o deployment.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: my-deployment
        labels:
          app: my-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: ngnix # Your containerized app image.
            name: my-container
            volumeMounts:
            - name: my-volume
              mountPath: /mount-path
          volumes:
          - name: my-volume
            persistentVolumeClaim:
              claimName: my-pvc
    
  4. Crie a implementação em seu cluster.

    kubectl apply -f deployment.yaml
    

Para obter mais informações, veja os links a seguir.

Incluindo o Block Storage for VPC em seus apps

Escolha o seu perfil do Block Storage for VPC e crie uma solicitação de volume persistente para provisionar dinamicamente o Block Storage for VPC para seu cluster. O provisionamento dinâmico cria automaticamente o volume persistente correspondente e solicita o dispositivo de armazenamento físico em sua conta do IBM Cloud.

  1. Decida sobre o perfil do Block Storage for VPC que melhor atende aos requisitos de capacidade e desempenho desejados.

  2. Selecione a classe de armazenamento correspondente para o seu perfil do Block Storage for VPC.

    Todas as classes de armazenamento predefinidas da IBM configuram o Block Storage for VPC com um sistema de arquivos ext4 por padrão. Se desejar usar um sistema de arquivos diferente, como xfs ou ext3, crie uma classe de armazenamento customizada.

    • 10 IOPS/GB: ibmc-vpc-block-10iops-tier ou ibmc-vpc-block-retain-10iops-tier
    • 5 IOPS/GB: ibmc-vpc-block-5iops-tier ou ibmc-vpc-block-retain-5iops-tier
    • 3 IOPS/GB: ibmc-vpc-block-general-purpose ou ibmc-vpc-block-retain-general-purpose
    • Customizado: ibmc-vpc-block-custom ou ibmc-vpc-block-retain-custom
  3. Decida sobre a sua configuração do Block Storage for VPC.

    1. Escolha um tamanho para seu armazenamento. Certifique-se de que o tamanho seja suportado pelo perfil do Block Storage for VPC que você escolheu.
    2. 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 volume persistente (PV), o dispositivo de armazenamento físico em sua conta do 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 o Block Storage for VPC existente.
      • Para que o PV, os dados e seu dispositivo físico do Block Storage for VPC sejam excluídos quando você excluir o PVC, escolha uma classe de armazenamento sem retain.
  4. Crie um arquivo de configuração para definir sua solicitação de volume persistente e salve a configuração como um arquivo YAML.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc_name> # Enter a name for your PVC.
    spec:
      accessModes:
      - <access-mode> # ReadWriteOnce or ReadWriteOncePod
      resources:
        requests:
          storage: 10Gi # Enter the size. Make sure that the size is supported in the profile that you chose.
      storageClassName: <storage_class> # Enter the storage class name that you selected earlier.
    
  5. Crie o PVC em seu cluster.

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

    kubectl describe pvc <pvc_name>
    

    Saída de exemplo

    Name:          mypvv
    Namespace:     default
    StorageClass:  ibmc-vpc-block-5iops-tier
    Status:        Bound
    Volume:        
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"csi-block-pvc-good","namespace":"default"},"spec":{...
                volume.beta.kubernetes.io/storage-provisioner: vpc.block.csi.ibm.io
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity: 10Gi   
    Access Modes:  
    VolumeMode:    Filesystem
    Events:
        Type       Reason                Age               From                         Message
        ----       ------                ----              ----                         -------
        Normal     ExternalProvisioning  9s (x3 over 18s)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "vpc.block.csi.ibm.io" or manually created by system administrator
    Mounted By:  <none>
    
  7. Crie um arquivo de configuração de implementação para seu app e monte o PVC em seu app.

    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>
    
    labels.app
    Na seção de metadados, insira um rótulo para a implementação.
    matchLabels.app e labels.app
    Nas seções de seletor de especificação e metadados de modelo, digite um rótulo para o seu app.
    image
    Especifique 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
    Especifique o nome do contêiner que você deseja implementar em seu pod.
    mountPath
    Na seção de montagens de volume de contêineres, especifique o caminho absoluto do diretório para onde o PVC é montado dentro do contêiner.
    name
    Na seção de montagens de volume de contêineres, insira o nome do volume para montar em seu pod. É possível inserir qualquer nome que você desejar.
    name
    Na seção volumes, insira o nome do volume para montar em seu pod. Geralmente, esse nome é igual a volumeMounts.name.
    claimName
    Na seção de solicitação de volume persistente de volumes, digite o nome do PVC que você criou anteriormente.
  8. Crie a implementação em seu cluster.

    kubectl apply -f deployment.yaml
    
  9. Verifique se o PVC foi montado com sucesso em seu app. Pode demorar alguns minutos para que seus pods atinjam um estado Em execução.

    Durante a implementação de seu app, é possível ver erros Unable to mount volumes intermitentes na seção Eventos de sua saída da CLI. O complemento de cluster Block Storage for VPC tenta automaticamente montar novamente o armazenamento em seus aplicativos. Aguarde mais alguns minutos para que o armazenamento seja montado em seu app.

    kubectl describe deployment <deployment_name>
    

    Saída de exemplo

    ...
    Volumes:
    myvol:
        Type:    PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:    mypvc
        ReadOnly:    false
    

Usando uma instância do Block Storage for VPC existente

Se você tiver um dispositivo físico do Block Storage for VPC existente que deseja usar em seu cluster, será possível criar manualmente o PV e o PVC para provisionar estaticamente o armazenamento.

É possível anexar um volume a apenas um nó do trabalhador. Certifique-se de que o volume esteja na mesma zona que o nó do trabalhador para que o anexo tenha sucesso.

  1. Determine o volume que você deseja anexar a um nó do trabalhador em seu cluster de VPC. Observe o ID do volume.

    ibmcloud is volumes
    
  2. Liste os detalhes do seu volume. Observe o Tamanho, Zona e IOPS. Esses valores são usados para criar o seu PV.

    ibmcloud is volume <volume_id>
    
  3. Recupere uma lista de nós do trabalhador em seu cluster de VPC. Anote a Zona do nó do trabalhador que está na mesma zona que o seu volume de armazenamento.

    ibmcloud ks worker ls -c <cluster_name>
    
  4. Opcional: se você provisionou a sua instância física do Block Storage for VPC usando uma classe de armazenamento retain, o PV e o armazenamento físico não serão removidos quando você remover o PVC. Para usar seu dispositivo físico do Block Storage for VPC em seu cluster, deve-se remover primeiro o PV existente.

    1. Listar os PVs em seu cluster e procurar o PV que pertence ao seu dispositivo do Block Storage for VPC. O PV está em um estado released.

      kubectl get pv
      
    2. Remova o PV.

      kubectl delete pv <pv_name>
      
  5. Crie um arquivo de configuração para seu PV. Inclua o ID, o Tamanho, a Zona e o IOPS que você recuperou anteriormente.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: <pv_name> # Example: my-persistent-volume
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: <vpc_block_storage_size> # Example: 20Gi
      csi:
        driver: vpc.block.csi.ibm.io
        fsType: ext4
        volumeAttributes:
          iops: "<vpc_block_storage_iops>" # Example: "3000"
          volumeId: <vpc_block_storage_ID> # Example: a1a11a1a-a111-1111-1a11-1111a11a1a11
          zone: "<vpc_block_zone>" # Example: "eu-de-3"
          region: "<vpc_block_region>"
        volumeHandle: <vpc_block_storage_ID>
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: failure-domain.beta.kubernetes.io/zone
              operator: In
              values:
              - <worker_node_zone> # Example: eu-de-3
            - key: failure-domain.beta.kubernetes.io/region
              operator: In
              values:
              - <worker_node_region> # Example: eu-de
            - key: kubernetes.io/hostname
              operator: In
              values:
              - <worker_node_primary_IP>
      persistentVolumeReclaimPolicy: Retain
      storageClassName: ""
      volumeMode: Filesystem
    
    name
    Na seção de metadados, digite um nome para o seu PV.
    storage
    Na seção de capacidade de especificação, digite o tamanho do volume do Block Storage for VPC em gigabytes (Gi) que você recuperou anteriormente. Por exemplo, se o tamanho de seu dispositivo for 100 GB, insira 100Gi.
    iops
    Na seção de atributos de volume CSI de especificação, digite o IOPS máximo do volume do Block Storage for VPC que você recuperou anteriormente.
    zone
    Na seção de atributos de volume CSI de especificação, digite a zona de bloco de VPC que corresponde ao local que você recuperou anteriormente. Por exemplo, se seu local for Washington DC-1, use us-east-1 como sua zona. Para listar zonas disponíveis, execute ibmcloud is zones. Para encontrar uma visão geral de zonas e locais disponíveis do VPC, consulte Criando um VPC em uma região diferente. Mencione o parâmetro "region" quando o "zone" for especificado.
    region
    A região do nó do trabalhador na qual deseja anexar o armazenamento.
    worker_node_primary_IP
    O IP primário do nó do trabalhador no qual deseja anexar o armazenamento. É possível localizar o IP primário do nó do trabalhador executando ibmcloud ks worker ls.
    volumeId e spec.csi.volumeHandle
    Na seção de atributos de volume CSI de especificação, digite o ID do volume do Block Storage for VPC que você recuperou anteriormente.
    storageClassName
    Para o nome da classe de armazenamento de especificação, digite uma sequência vazia.
    matchExpressions
    Na seção de afinidade do nó de especificação, digite os termos do seletor do nó para corresponder à zona. Para a chave, insira failure-domain.beta.kubernetes.io/zone. Para o valor, insira a zona de seu nó do trabalhador no qual você deseja anexar o armazenamento.
    matchExpressions
    Na seção de afinidade do nó spec, digite os termos seletores do nó para combinar com a região. Para a chave, insira failure-domain.beta.kubernetes.io/region. Para o valor, insira a região do nó do trabalhador no qual você deseja anexar o armazenamento.
  6. Crie o PV em seu cluster.

    kubectl apply -f pv.yaml
    
  7. Verifique se o PV foi criado em seu cluster.

    kubectl get pv
    
  8. Crie outro arquivo de configuração para seu PVC. Para que o PVC corresponda ao PV criado anteriormente, deve-se escolher o mesmo valor para o tamanho do armazenamento e o modo de acesso. No campo de sua classe de armazenamento, insira um valor de sequência vazia para corresponder ao seu PV. Se algum desses campos não corresponder ao PV, um novo PV e uma instância do Block Storage for VPC serão criados automaticamente por meio do provisionamento dinâmico.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc_name>
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: <vpc_block_storage_size>
      storageClassName: ""
    
  9. Crie a PVC.

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

kubectl describe pvc <pvc_name>
  1. Crie uma implementação ou um pod que use o seu PVC.
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>
      nodeSelector:
        kubernetes.io/hostname: "<worker_node_primary_IP>"

Atualizando o complemento do cluster do Block Storage for VPC

Você pode atualizar o complemento Block Storage for VPC do cluster usando o addon update comando.

Antes de atualizar o complemento, revise o log de mudanças.

Antes de atualizar para uma versão " 5.x de uma versão anterior, você não deve ter nenhum snapshot de volume no estado " failure. Para obter mais informações, consulte Por que não consigo excluir meus recursos de Block Storage for VPC instantâneo de volume?

  1. Confira para ver se uma atualização está disponível. Se uma atualização estiver disponível, a versão do plug-in será sinalizada com um asterisco e a versão mais recente será mostrada. Anote a versão mais recente, pois esse valor é usado posteriormente.

    ibmcloud ks cluster addons --cluster <cluster_name_or_ID>
    

    Saída de exemplo

    Name                   Version                 Health State   Health Status   
    vpc-block-csi-driver   1.0.0* (2.0.0 latest)   normal         Addon Ready
    
  2. Atualize o complemento. Observe que os comandos de atualização são diferentes, dependendo da versão instalada.

    5.0 e mais recente Execute o comando addon update

    ibmcloud ks cluster addon update vpc-block-csi-driver --cluster CLUSTER [-f] [-q] [--version VERSION] [-y]
    

    Todas as versões anteriores à versão 5.0 Desative e ative o complemento

    ibmcloud ks cluster addon disable vpc-block-csi-driver --cluster CLUSTER [-f] [-q]
    
    ibmcloud ks cluster addon enable vpc-block-csi-driver --cluster CLUSTER [-f] [-q] [--version VERSION] [-y]
    
  3. Verifique se o complemento está no estado Addon Ready. O complemento pode levar alguns minutos para ficar pronto.

    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    

    Saída de exemplo

    Name                   Version   Health State   Health Status   
    vpc-block-csi-driver   2.0.0     normal         Addon Ready
    

    Se usar uma classe de armazenamento padrão diferente da classe de armazenamento ibmc-vpc-block-10iops-tier, você deverá mudar as configurações de classe de armazenamento padrão no configmap addon-vpc-block-csi-driver-configmap. Para obter mais informações, consulte Mudando a classe de armazenamento padrão.

  4. Se você criou suas próprias classes de armazenamento com base nas classes de armazenamento padrão do site Block Storage for VPC, deverá recriar essas classes de armazenamento para atualizar os parâmetros. Para obter mais informações, consulte Recriação de suas próprias classes de armazenamento após a atualização para a versão 4.2.

Recriando suas próprias classes de armazenamento após atualizar para a versão 4.2

Com a versão 4.2, os parâmetros padrão para as classes de armazenamento foram alterados. Os parâmetros sizeRange ou iopsRange não são mais utilizados. Se você criou alguma de suas próprias classes de armazenamento que usa esses parâmetros, deverá editá-las para removê-los. Para alterar os parâmetros em suas próprias classes de armazenamento, é necessário excluí-las e recriá-las. Antes, cada classe de armazenamento eram fornecidas para sizeRange e iopsRange como informações de referência. Com a versão 4.2, essas referências foram removidas. Agora, para obter informações sobre perfis de armazenamento de blocos, tamanhos e IOPs, consulte a referência perfis de armazenamento bloco .

  1. Para encontrar os detalhes de suas próprias classes de armazenamento, execute o seguinte comando.

    kubectl describe sc STORAGECLASS
    
  2. Se a classe de armazenamento utilizar sizeRange ou iopsRange, obtenha a classe de armazenamento YAML e salve-a em um arquivo.

    kubectl get sc STORAGECLASS -o yaml
    
  3. No arquivo que você salvou da saída do comando anterior, remova os parâmetros sizeRange ou iopsRange.

  4. Exclua a classe de armazenamento do cluster.

    kubectl delete sc STORAGECLASS
    
  5. Recrie a classe de armazenamento no cluster usando o arquivo criado anteriormente.

    kubectl apply -f custom-storage-class.yaml
    

Configurando a criptografia para o Block Storage for VPC

Use um provedor de serviço de gerenciamento de chaves (KMS), como IBM® Key Protect, para criar uma chave raiz privada que você usa na instância do Block Storage for VPC para criptografar os dados conforme eles são gravados no armazenamento. Depois de criar a chave raiz privada, crie sua própria classe de armazenamento ou um segredo Kubernetes com sua chave raiz e, em seguida, use essa classe de armazenamento ou segredo para provisionar sua instância Block Storage for VPC.

A ativação da criptografia Block Storage for VPC afeta o desempenho em aproximadamente 20%. No entanto, o impacto exato depende de seu nó do trabalhador e da configuração do volume de armazenamento Considere permitir impactos de desempenho ao ativar a criptografia.

  1. Crie uma instância do provedor KMS que você deseja usar.

  2. Crie uma chave raiz em sua instância do KMS.

  3. Configure a autorização de serviço para serviço. Autorize o Block Storage for VPC a acessar o IBM® Key Protect. Certifique-se de dar Block Storage for VPC pelo menos Reader acesso à sua instância KMS.

  4. Decida se você deseja armazenar o CRN da chave raiz Key Protect em uma classe de armazenamento customizada ou em um segredo do Kubernetes. Em seguida, siga as etapas para criar uma classe de armazenamento customizada ou um segredo do Kubernetes.

    Exemplo de classe de armazenamento customizada.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage_class_name> # Enter a name for your storage class.
    provisioner: vpc.block.csi.ibm.io
    parameters:
      profile: "5iops-tier"
      csi.storage.k8s.io/fstype: "ext4"
      billingType: "hourly"
      encrypted: "true"
      encryptionKey: "<encryption_key>"
      resourceGroup: ""
      zone: ""
      tags: ""
      generation: "gc"
      classVersion: "1"
    reclaimPolicy: "Delete"
    
    encrypted
    Nos parâmetros, digite true para criar uma classe de armazenamento que configure a criptografia para seus volumes Block Storage for VPC. Se você definir essa opção como true, deverá fornecer o CRN da chave raiz da instância do serviço Key Protect que deseja usar em parameters.encryptionKey.
    encryptionKey
    Nos parâmetros, digite o CRN de chave raiz que você recuperou anteriormente.

    Exemplo de segredo do Kubernetes.

    apiVersion: v1
    kind: Secret
    type: vpc.block.csi.ibm.io
    metadata:
      name: <secret_name>
      namespace: <namespace_name>
    stringData:
      encrypted: <true_or_false>
    data
      encryptionKey: <encryption_key>
    
    name
    Insira um nome para seu segredo.
    namespace
    Insira o namespace no qual você deseja criar seu segredo.
    encrypted
    Nos parâmetros, digite true para configurar a criptografia para seus volumes Block Storage for VPC.
    encryptionKey
    Nos parâmetros, digite o CRN da chave raiz de sua instância de serviço do Key Protect que você deseja usar para criptografar seu volume do Block Storage for VPC. Para usar o CRN da chave raiz em um segredo, primeiro deve-se convertê-lo em base64 executando echo -n "<root_key_CRN>" | base64.
  5. Siga as etapas de 4 a 9 em Incluindo o Block Storage for VPC em seus apps para criar uma PVC com sua classe de armazenamento customizada para provisionar o Block Storage for VPC que está configurada para criptografia com sua chave raiz do Key Protect. Em seguida, monte esse armazenamento para um pod de app.

    O app pode levar alguns minutos para montar o armazenamento e entrar em um estado de Execução.

  6. Verifique se seus dados estão criptografados. Liste seus volumes do Block Storage for VPC e anote o ID da instância que você criou. O Nome da instância de armazenamento é igual ao nome do PV criado automaticamente quando você criou o PVC.

    ibmcloud is vols
    

    Saída de exemplo

    ID                                     Name                                       Status      Capacity   IOPS   Profile           Attachment type   Created                     Zone         Resource group
    a395b603-74bf-4703-8fcb-b68e0b4d6960   pvc-479d590f-ca72-4df2-a30a-0941fceeca42   available   10         3000   5iops-tier        data              2019-08-17T12:29:18-05:00   us-south-1   a8a12accd63b437bbd6d58fb6a462ca7
    
  7. Usando o ID do volume, liste os detalhes para sua instância do Block Storage for VPC a fim de garantir que sua chave raiz do Key Protect esteja armazenada na instância de armazenamento. É possível encontrar a chave raiz no campo Chave de criptografia da saída da CLI.

    ibmcloud is vol <volume_ID>
    

    Saída de exemplo

    ID                                     a395b603-74bf-4703-8fcb-b68e0b4d6960   
    Name                                   pvc-479d590f-ca72-4df2-a30a-0941fceeca42   
    Status                                 available   
    Capacity                               10   
    IOPS                                   3000   
    Profile                                5iops-tier   
    Encryption key                         crn:v1:bluemix:public:kms:us-south:a/6ef045fd2b43266cfe8e6388dd2ec098:53369322-958b-421c-911a-c9ae8d5156d1:key:47a985d1-5f5e-4477-93fc-12ce9bae343f   
    Encryption                             user_managed   
    Resource group                         a8a12accd63b437bbd6d58fb6a462ca7
    Created                                2019-08-17T12:29:18-05:00
    Zone                                   us-south-1   
    Volume Attachment Instance Reference
    

Customizando as configurações de armazenamento padrão

É possível mudar algumas configurações de PVC padrão usando uma classe de armazenamento customizada ou um segredo de Kubernetes para criar o Block Storage for VPC com suas configurações customizadas.

Qual é a vantagem de usar um segredo e especificar meus parâmetros em uma classe de armazenamento personalizada?
Como um administrador de cluster, crie uma classe de armazenamento customizada quando quiser que todas as PVCs que os usuários do cluster criam sejam fornecidas com uma configuração específica e não quiser permitir que os usuários do cluster substituam a configuração padrão.
No entanto, quando múltiplas configurações forem necessárias e você não desejar criar uma classe de armazenamento customizada para cada possível configuração de PVC, será possível criar uma classe de armazenamento customizada com as configurações de PVC padrão e uma referência a um segredo do Kubernetes genérico. Se os usuários do cluster devem substituir as configurações padrão de sua classe de armazenamento customizada, eles poderão fazer isso criando um segredo do Kubernetes que retém suas configurações customizadas.

Para configurar a criptografia para sua instância do Block Storage for VPC, também será possível usar um segredo do Kubernetes se você desejar codificar o CRN de chave raiz do Key Protect para base64, em vez de fornecer a chave diretamente na classe de armazenamento customizada.

Mudando a classe de armazenamento padrão

Com a 4.2 versão, o complemento Block Storage for VPC de cluster define a classe de armazenamento padrão como a ibmc-vpc-block-10iops-tier classe. Se houver uma classe de armazenamento padrão diferente de ibmc-vpc-block-10iops-tier e as PVCs usarem a classe de armazenamento padrão, isso poderá resultar em várias classes de armazenamento padrão, o que pode causar falhas de criação de PVC. Para usar uma classe de armazenamento padrão diferente de ibmc-vpc-block-10iops-tier, é possível atualizar o addon-vpc-block-csi-driver-configmap para mudar o IsStorageClassDefault para falso.

A classe de armazenamento padrão para o complemento do cluster Block Storage for VPC é a classe de armazenamento ibmc-vpc-block-10iops-tier.

  1. Editar o addon-vpc-block-csi-driver-configmap

    kubectl edit cm addon-vpc-block-csi-driver-configmap -n kube-system
    
  2. Mude a configuração IsStorageClassDefault para false.

  3. Salve e encerre.

  4. Aguarde 15 minutos e verifique a mudança obtendo os detalhes da classe de armazenamento ibmc-vpc-block-10iops-tier.

    kubectl get sc ibmc-vpc-block-10iops-tier -o yaml
    

Criando sua própria classe de armazenamento

Crie sua própria classe de armazenamento customizada com as configurações preferenciais para sua instância do Block Storage for VPC. Ao usar o perfil SDP, você pode especificar a capacidade e o limite máximo de throughput.

Os perfis de desempenho definidos por SSD (SDP) estão disponíveis em Dallas, Frankfurt, Londres, Madri, Osaka, São Paulo, Sydney, Tóquio, Toronto e Washington D.C. A criação de instantâneos para perfis de desempenho definidos para SSD está disponível em Dallas, Frankfurt, Tóquio e Washington. D.C

Se desejar, você pode criar sua própria classe de armazenamento:

  • Configurar um valor de IOPs customizado.
  • Configurar o Block Storage for VPC com um tipo de sistema de arquivos diferente de ext4.
  • Configurar a criptografia.
  • Configure o desempenho definido pelo SSD.

Antes de Iniciar

  • Revise a Referência de classe de armazenamento para determinar o profile que você deseja usar para a sua classe de armazenamento.

  • Também é possível revisar os perfis customizados caso você queira especificar um IOPs customizado para o seu Block Storage for VPC.

  • Se você quiser usar um perfil de desempenho definido por SSD (SDP), examine o intervalo de capacidade e os detalhes de IOPs. Observe que, ao usar um desempenho definido por SSD, a capacidade do volume é determinada pelos IOPs e pela taxa de transferência que você especificar.

  • Você pode usar uma classe de armazenamento existente como ponto de partida para criar sua própria classe. Salve os detalhes de uma classe de armazenamento existente usando o comando kubectl get sc <storageclass> -o yaml.

  • Para manter os custos baixos, você pode provisionar inicialmente um PVC com baixa capacidade, IOPS mínimo e taxa de transferência mínima usando a classe de armazenamento ibmc-vpc-block-sdp, que tem um mínimo de 3.000 IOPS e 1.000 taxas de transferência (Mbps). Após o provisionamento, você pode acessar o PVC e ajustar o IOPS e a taxa de transferência conforme as necessidades forem melhor definidas.

Para criar uma classe de armazenamento personalizada:

  1. Crie um arquivo de configuração de classe de armazenamento personalizado no seguinte formato. Escolha entre uma classe de armazenamento de primeira geração e uma de segunda geração.

    Exemplo da primeira geração:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage_class_name>
    provisioner: vpc.block.csi.ibm.io
    parameters:
      profile: "<profile>" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom
      csi.storage.k8s.io/fstype: "<file_system_type>" # xfs, ext3, or ext4
      billingType: "hourly"
      encrypted: "<encrypted_true_false>"
      encryptionKey: "<encryption_key>"
      resourceGroup: ""
      zone: "<zone>"
      region: "<region>"
      tags: "<tags>"
      generation: "gc"
      throughput: "<throughput>" # Example: 2000
      classVersion: "1"
      iops: "<iops>" # Only specify this parameter if you are using a "custom" profile.
    allowVolumeExpansion: (true|false) # Select true or false. Only supported on version 3.0.1 and later
    volumeBindingMode: <volume_binding_mode>
      # csi.storage.k8s.io/provisioner-secret-name: # Uncomment and add secret parameters to enforce encryption.
      # csi.storage.k8s.io/provisioner-secret-namespace:
    reclaimPolicy: "<reclaim_policy>"
    
    name
    Insira um nome para a sua classe de armazenamento.
    profile
    Digite o perfil que você selecionou na etapa anterior. Escolha general-purpose, sdp, 5iops-tier, 10iops-tier, ou custom use um valor de IOPs personalizado. Para encontrar os tamanhos de armazenamento compatíveis com um perfil específico, consulte Perfil de IOPS em camadas. Qualquer PVC que usa essa classe de armazenamento deve especificar um valor de tamanho que esteja dentro desse intervalo.
    csi.storage.k8s.io/fstype
    Nos parâmetros, digite o sistema de arquivos para sua instância do Block Storage for VPC. Escolha xfs, ext3 ou ext4. Se quiser modificar a propriedade ou as permissões do volume, você deverá especificar o endereço csi.storage.k8s.io/fstype em sua própria classe de armazenamento e seu PVC deverá ter ReadWriteOnce como accessMode. O driver Block Storage for VPC usa o ReadWriteOnceWithFSType fsGroupPolicy. Para obter mais informações, consulte a documentação do driver CSI.
    encrypted
    Nos parâmetros, digite true para criar uma classe de armazenamento que configure a criptografia para seu volume Block Storage for VPC. Se você definir essa opção como true, deverá fornecer o CRN da chave raiz da instância do serviço Key Protect que deseja usar em parameterencryptionKey. Para obter mais informações sobre como criptografar seus dados, consulte Configurando a criptografia para o seu Block Storage for VPC.
    encryptionKey
    Se você digitou true para parameters.encrypted, digite o CRN da chave raiz da instância de serviço Key Protect que deseja usar para criptografar o volume Block Storage for VPC. Para obter mais informações sobre como criptografar seus dados, consulte Configurando a criptografia para o seu Block Storage for VPC.
    zone
    Nos parâmetros, digite a zona da VPC na qual deseja criar a instância do Block Storage for VPC. Certifique-se de usar uma zona à qual seus nós do trabalhador estão conectados. Para listar as zonas VPC que os nós de trabalho usam, execute ibmcloud ks cluster get --cluster <cluster_name_or_ID> e observe o campo Worker Zones na saída da CLI. Se você não especificar uma zona, uma das zonas do nó do trabalhador será selecionada automaticamente para a instância do Block Storage for VPC.
    region
    A região do nó do trabalhador na qual deseja anexar o armazenamento.
    tags
    Nos parâmetros, insira uma lista de tags separada por espaços para aplicar à sua instância Block Storage for VPC. As tags podem ajudá-lo a encontrar instâncias mais facilmente ou agrupar suas instâncias com base em características comuns, como o app ou o ambiente para o qual são usadas.
    iops
    Se você digitou custom ou sdp para o profile, digite um valor para os IOPs que deseja que o Block Storage for VPC use. Consulte a tabela Perfil de IOPs customizado do Block Storage for VPC para obter uma lista de intervalos de IOPs suportados por tamanho de volume.
    throughput
    Digite esse valor se estiver usando um perfil sdp. Para obter mais informações, consulte os detalhes de IOPs e taxa de transferência do perfil SDP
    reclaimPolicy
    Insira a política de recuperação para sua classe de armazenamento. Se você desejar manter o PV, o dispositivo de armazenamento físico e seus dados ao remover o PVC, insira Retain. Se você desejar excluir o PV, o dispositivo de armazenamento físico e seus dados ao remover o PVC, insira Delete.
    allowVolumeExpansion
    Insira a política de expansão de volume para sua classe de armazenamento. Se você deseja permitir a expansão de volume, insira true. Se você não deseja permitir a expansão de volume, insira false.
    volumeBindingMode
    Escolha se desejar atrasar a criação da instância do Block Storage for VPC até que o primeiro pod que usa esse armazenamento esteja pronto para ser planejado. Para atrasar a criação, insira WaitForFirstConsumer. Para criar a instância ao criar o PVC, insira Immediate.

    Exemplo de segunda geração:

    Se você provisionar um PVC 9.6TB usando a classe de armazenamento ibmc-vpc-block-5iops-tier de primeira geração, o IOPS máximo será de 48.000 e a taxa de transferência máxima será de 6144 Mbps. Entretanto, com a classe de armazenamento ibmc-vpc-block-sdp-max-bandwidth de segunda geração, o IOPS máximo é de 64.000 e a taxa de transferência máxima é de 8192 Mbps.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ibmc-vpc-block-sdp-max-bandwidth
    provisioner: vpc.block.csi.ibm.io
    parameters:
      profile: "sdp" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom
      csi.storage.k8s.io/fstype: "ext4" # xfs, ext3, or ext4
      billingType: "hourly"
      encrypted: "false"
      encryptionKey: ""
      resourceGroup: ""
      zone: "us-east"
      region: "tor01"
      tags: "tag"
      generation: "gc"
      throughput: "8192" # Example: 2000
      classVersion: "1"
      iops: "64000" # Only specify this parameter if you are using a "custom" profile.
    allowVolumeExpansion: true # Select true or false. Only supported on version 3.0.1 and later
    volumeBindingMode: Immediate
    reclaimPolicy: "Delete"
    
  2. Crie a classe de armazenamento customizada no cluster.

    kubectl apply -f custom-storageclass.yaml
    
  3. Verifique se a classe de armazenamento está disponível no cluster.

    kubectl get sc
    

    Saída de exemplo

    NAME                                    PROVISIONER            AGE
    <custom-storageclass>             vpc.block.csi.ibm.io   4m26s
    
  4. Siga as etapas em Incluindo o Block Storage for VPC em seus apps para criar um PVC com sua classe de armazenamento customizada para fornecer o Block Storage for VPC. Em seguida, monte esse armazenamento para um app de amostra.

  5. Opcional: Verifique seu tipo de sistema de arquivos do Block Storage for VPC.

Verificando seu sistema de arquivos do Block Storage for VPC

É possível criar uma classe de armazenamento customizada para fornecer o Block Storage for VPC com um sistema de arquivos diferente, como xfs ou ext3. Por padrão, todas as instâncias do Block Storage for VPC são provisionadas com um sistema de arquivos ext4.

  1. Siga as etapas para criar uma classe de armazenamento customizada com o sistema de arquivos que você deseja usar.

  2. Siga as etapas de 4 a 9 em Incluindo o Block Storage for VPC em seus apps para criar uma PVC com a sua classe de armazenamento customizada para provisionar o Block Storage for VPC com um sistema de arquivos diferente. Em seguida, monte esse armazenamento para um pod de app.

    O app pode levar alguns minutos para montar o armazenamento e entrar em um estado de Execução.

  3. Verifique se seu armazenamento está montado com o sistema de arquivos correto. Liste os pods em seu cluster e anote o Nome do pod usado para montar seu armazenamento.

    kubectl get pods
    
  4. Efetue login em seu pod.

    kubectl exec <pod_name> -it bash
    
  5. Liste os caminhos de montagem dentro de seu pod.

    mount | grep /dev/xvdg
    

    Saída de exemplo para xfs.

    /dev/xvdg on /test type xfs (rw,relatime,attr2,inode64,noquota)
    
  6. Saia do pod.

    exit
    

Atualizando o VolumeAttachLimit

Nas versões 5.2 e mais recentes do complemento do cluster Block Storage for VPC, é possível editar o número máximo de volumes que podem ser conectados a cada nó editando o configmap. O valor padrão é 12.

A sua conta deve ser aprovada para usar este recurso.

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

  2. Edite o configmap. Substitua VALUE pelo limite de anexo de volume que você deseja configurar

    kubectl patch configmap/addon-vpc-block-csi-driver-configmap \       
    -n kube-system \
    --type merge \
    -p '{"data":{"VolumeAttachmentLimit":"VALUE"}}'
    
  3. Aguarde a reinicialização dos pods ibm-vpc-block-csi-node no namespace kube-system. Verifique se os pods foram reiniciados..

    kubectl get pods -n kube-system -w| grep block-csi
    
  4. Agora é possível conectar volumes aos nós do trabalhador usando o fornecimento dinâmico ou criando manualmente os anexos. Para obter mais informações, consulte Incluindo Block Storage for VPC em seus apps ou Usando uma instância existente do Block Storage for VPC..

Armazenando suas configurações de PVC customizadas em um segredo do Kubernetes

Especifique as configurações do PVC em um segredo do Kubernetes e referencie esse segredo em uma classe de armazenamento customizada. Em seguida, use a classe de armazenamento customizada para criar um PVC com os parâmetros customizados que você configurou em seu segredo.

Quais opções eu tenho para usar o segredo Kubernetes?
Como um administrador de cluster, é possível escolher se você deseja permitir que cada usuário do cluster substitua as configurações padrão de uma classe de armazenamento ou se desejar criar um segredo que todos em seu cluster devem usar e que impõe a codificação base64 para o CRN da chave raiz do Key Protect.
Cada usuário pode customizar as configurações padrão
Neste cenário, o administrador do cluster cria uma classe de armazenamento customizada com as configurações de PVC padrão e uma referência a um segredo genérico do Kubernetes. Os usuários de cluster podem substituir as configurações padrão da classe de armazenamento, criando um segredo do Kubernetes com as configurações do PVC que eles desejarem. Para que as configurações customizadas no segredo sejam aplicadas na instância do Block Storage for VPC, deve-se criar uma PVC com o mesmo nome do segredo do Kubernetes.
Impingir a codificação base64 para a chave-raiz do Key Protect
Neste cenário, você cria uma classe de armazenamento customizada com as configurações de PVC padrão e uma referência a um segredo estático do Kubernetes que substitui ou aprimora as configurações padrão da classe de armazenamento customizada. Os usuários do cluster não podem substituir as configurações padrão criando seus próprios segredos do Kubernetes. Em vez disso, os usuários do cluster devem provisionar o Block Storage for VPC com a configuração que você escolheu em sua classe de armazenamento customizada e no segredo. O benefício de usar esse método em vez da criação de uma classe de armazenamento customizada somente é que é possível cumprir a codificação base64 para o CRN de chave raiz de sua instância de serviço do Key Protect quando você deseja criptografar os dados em sua instância do Block Storage for VPC.
O que eu preciso saber antes de começar a usar o segredo Kubernetes para minhas configurações de PVC?
Algumas configurações de PVC, como reclaimPolicy, fstype ou volumeBindingMode, não podem ser definidas na chave Kubernetes e devem ser definidas na classe de armazenamento. Como o administrador do cluster, se você desejar ativar seus usuários de cluster para substituir suas configurações padrão, deverá assegurar que configurou classes de armazenamento customizadas suficientes que referenciam um segredo genérico do Kubernetes para que seus usuários possam provisionar o Block Storage for VPC com configurações reclaimPolicy, fstype e volumeBindingMode diferentes.

Ativando cada usuário para customizar as configurações de PVC padrão

  1. Como o administrador de cluster, siga as etapas para criar uma classe de armazenamento customizada. No arquivo YAML da classe de armazenamento customizada, referencie o segredo do Kubernetes na seção metadata.parameters conforme a seguir. Certifique-se de incluir o código no estado em que se encontra e de não mudar os nomes de variáveis.

    csi.storage.k8s.io/provisioner-secret-name: ${pvc.name}
    csi.storage.k8s.io/provisioner-secret-namespace: ${pvc.namespace}
    
  2. Como o usuário do cluster, crie um segredo do Kubernetes que customiza as configurações padrão da classe de armazenamento.

    apiVersion: v1
    kind: Secret
    type: vpc.block.csi.ibm.io
    metadata:
      name: <secret_name>
      namespace: <namespace_name>
    stringData:
      iops: "<IOPS_value>"
      zone: "<zone>"
      tags: "<tags>"
      encrypted: <true_or_false>
      resourceGroup: "<resource_group>"
    data
      encryptionKey: <encryption_key>
    
    name
    Insira um nome para seu segredo do Kubernetes.
    namespace
    Insira o namespace no qual você deseja criar seu segredo. Para referenciar o segredo em seu PVC, o PVC deve ser criado no mesmo namespace.
    iops
    Na seção de dados sequência, digite o intervalo de IOPS que você deseja permitir para sua instância do Block Storage for VPC. O intervalo que você inserir deverá corresponder à camada do Block Storage for VPC que planeja usar.
    zone
    Na seção de dados de sequência, digite a zona de VPC na qual deseja criar a instância do Block Storage for VPC. Certifique-se de usar uma zona à qual seus nós do trabalhador estão conectados. Para listar as zonas VPC que os nós de trabalho usam, execute ibmcloud ks cluster get --cluster <cluster_name_or_ID> e observe o campo Worker Zones na saída da CLI. Se você não especificar uma zona, uma das zonas do nó do trabalhador será selecionada automaticamente para a instância do Block Storage for VPC.
    tags
    Na seção de dados de sequência, digite uma lista separada por vírgulas de tags para usar quando o PVC for criado. As tags podem ajudá-lo a encontrar sua instância de armazenamento depois que ela for criada.
    resourceGroup
    Na seção de dados da cadeia de caracteres, digite o ID do grupo de recursos ao qual deseja que a instância do Block Storage for VPC tenha acesso. Se você não inserir um grupo de recursos, a instância será automaticamente autorizada a acessar recursos do grupo de recursos ao qual o cluster pertence.
    encrypted
    Na seção de dados da cadeia, digite true para criar um segredo que configure a criptografia para os volumes Block Storage for VPC. Se você definir essa opção como true, deverá fornecer o CRN da chave raiz da instância do serviço Key Protect que deseja usar em parameters.encryptionKey. Para obter mais informações sobre como criptografar seus dados, consulte Configurando a criptografia para o seu Block Storage for VPC.
    encryptionKey
    Na seção de dados, se você digitou true para parameters.encrypted, digite o CRN da chave raiz da instância de serviço Key Protect que deseja usar para criptografar os volumes Block Storage for VPC. Para usar o CRN da chave raiz em um segredo, primeiro deve-se convertê-lo em base64 executando echo -n "<root_key_CRN>" | base64. Para obter mais informações sobre como criptografar seus dados, consulte Configurando a criptografia para o seu Block Storage for VPC.
  3. Crie seu segredo do Kubernetes.

    kubectl apply -f secret.yaml
    
  4. Siga as etapas em Incluindo Block Storage for VPC em seus apps para criar um PVC com suas configurações customizadas. Certifique-se de criar o PVC com a classe de armazenamento customizada que o administrador de cluster criou e use o mesmo nome para seu PVC que você usou para seu segredo. Usando o mesmo nome para o segredo e o PVC aciona o provedor de armazenamento para aplicar as configurações do segredo em seu PVC.

Impondo a codificação base64 para a Key Protect CRN da chave raiz

  1. Como o administrador de cluster, crie um segredo do Kubernetes que inclua o valor codificado em base64 para seu CRN da chave raiz do Key Protect. Para recuperar o CRN de chave raiz, consulte Configurando a criptografia para o seu Block Storage for VPC.

    apiVersion: v1
    kind: Secret
    type: vpc.block.csi.ibm.io
    metadata:
      name: <secret_name>
      namespace: <namespace_name>
    stringData:
      encrypted: <true_or_false>
      resourceGroup: "<resource_group>"
    data:
      encryptionKey: <encryption_key>
    
    name
    Insira um nome para seu segredo do Kubernetes.
    namespace
    Insira o namespace no qual você deseja criar seu segredo. Para referenciar o segredo em seu PVC, o PVC deve ser criado no mesmo namespace.
    encrypted
    Na seção de dados da cadeia, digite true para criar um segredo que configure a criptografia para os volumes Block Storage for VPC. Se você definir essa opção como true, deverá fornecer o CRN da chave raiz da instância do serviço Key Protect que deseja usar em parameters.encryptionKey. Para obter mais informações sobre como criptografar seus dados, consulte Configurando a criptografia para o seu Block Storage for VPC.
    encryptionKey
    Na seção de dados, se você digitou true para parameters.encrypted, digite o CRN da chave raiz da instância de serviço Key Protect que deseja usar para criptografar o volume Block Storage for VPC. Para usar o CRN da chave raiz em um segredo, primeiro deve-se convertê-lo em base 64 executando echo -n "<root_key_CRN>" | base64. Para obter mais informações sobre como criptografar seus dados, consulte Configurando a criptografia para o seu Block Storage for VPC.
  2. Crie o segredo do Kubernetes.

    kubectl apply -f secret.yaml
    
  3. Siga as etapas para criar uma classe de armazenamento customizada. No arquivo YAML da classe de armazenamento customizada, referencie o segredo do Kubernetes na seção metadata.parameters conforme a seguir. Certifique-se de inserir o nome do segredo do Kubernetes que você criou anteriormente e o namespace no qual você criou o segredo.

    csi.storage.k8s.io/provisioner-secret-name: <secret_name>
    csi.storage.k8s.io/provisioner-secret-namespace: <secret_namespace>
    
  4. Como o usuário do cluster, siga as etapas em Incluindo o Block Storage for VPC em seus apps para criar um PVC por meio de sua classe de armazenamento customizada.

Configurando a expansão de volume

Para fornecer volumes que suportem expansão, deve-se utilizar uma classe de armazenamento que tenha allowVolumeExpansion configurado como true.

É possível expandir somente volumes que são montados por um pod do app.

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

  1. Se você não estiver usando a versão 4.2 ou posterior do complemento, atualize o complemento de cluster Block Storage for VPC em seu cluster.

  2. Crie uma PVC que use uma classe de armazenamento que suporta expansão de volume.

  3. Implemente um app que use sua PVC. Ao criar o seu app, anote o mountPath que você especificar.

  4. Depois que sua PVC for montada por um pod do app, será possível expandir seu volume editando o valor do campo spec.resources.requests.storage na PVC. Para expandir o seu volume, edite a sua PVC e aumente o valor no campo spec.resources.requests.storage.

    kubectl edit pvc <pvc-name>
    

    Exemplo

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  5. Salve e feche a PVC.

  6. Opcional: verifique se o volume está expandido. Obtenha os detalhes da PVC e faça uma nota do nome do PV.

    kubectl get pvc <pvc-name>
    
  7. Descreva o seu PV e anote o ID do volume.

    kubectl describe PV
    
  8. Obtenha os detalhes do volume do Block Storage for VPC e verifique a capacidade.

    ibmcloud is vol <volume-ID>
    

Expansão manual de volumes antes da versão complementar 4.2

Conclua as etapas a seguir para expandir manualmente os volumes existentes do Block Storage for VPC que foram criados antes da versão 4.2 do add-on.

É possível expandir somente volumes que são montados por um pod do app.

  1. Obtenha os detalhes de seu app e anote o nome e o mountPath da PVC.

    kubectl get pod <pod-name> -n <pod-namespace> -o yaml
    
  2. Obtenha os detalhes da PVC e faça uma nota do nome do PV.

    kubectl get pvc
    
  3. Descreva seu PV e obtenha o volumeId.

    kubectl describe pv `pv-name` | grep volumeId
    

    Saída de exemplo para um ID de volume de r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1.

    volumeId=r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1
    
  4. Redimensione o volume usando uma solicitação PATCH. O exemplo a seguir redimensiona um volume para 250 GiB.

    curl -sS -X PATCH -H "Authorization: <iam_token>" "https://<region>.iaas.cloud.ibm.com/v1/volumes/<volumeId>?generation=2&version=2020-06-16" -d '{"capacity":250}'
    
    <iam_token>
    Seu token do IAM. Para recuperar seu token do IAM, execute ibmcloud iam oauth-tokens.
    <region>
    A região em que o cluster está, por exemplo us-south.
    <volumeId>
    O ID do volume recuperado anteriormente. Por exemplo, r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1.
    <capacity>
    A capacidade aumentada em GiB, por exemplo, 250.
  5. Efetue login em seu pod de app.

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

    chroot /host
    
  7. Obtenha os detalhes do sistema de arquivos e anote o caminho do Filesystem que você deseja atualizar. Também é possível grep para o caminho de montagem, conforme especificado no pod de aplicativo. df -h | grep <mount-path>.

    df -h
    

    Saída de exemplo

    Filesystem      Size  Used Avail Use% Mounted on
    overlay          98G   64G   29G  70% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs            32G     0   32G   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/vda2        98G   64G   29G  70% /etc/hosts
    /dev/vdg        9.8G   37M  9.8G   1% /mount-path # Note the Filesystem path that corresponds to the mountPath that you specified in your app.
    tmpfs            32G   40K   32G   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs            32G     0   32G   0% /proc/acpi
    tmpfs            32G     0   32G   0% /proc/scsi
    tmpfs            32G     0   32G   0% /sys/firmware
    
  8. Redimensione o sistema de arquivos.

    sudo resize2fs <filesystem-path>
    

    Exemplo de comando

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

    df -h
    

Fazendo backup e restaurando dados

Os dados no Block Storage for VPC são protegidos entre as zonas de falha redundantes em sua região. Para fazer backup manualmente de seus dados, use o comando kubectl cp do Kubernetes.

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

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

Para fazer backup ou restaurar dados, escolha entre as opções a seguir:

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

Entendendo a capacidade de solicitação de volume

O VPC Block CSI Driver calcula a capacidade de volume usando a fórmula a seguir.

  • Se o valor for fornecido em Gi: rBytes(requestedBytes) = X * 1024^3

  • Se o valor for fornecido em G: rBytes(requestedBytes) = X * 10^9

O valor solicitado é igual a (((rBytes+ GiB - 1) / GiB) * GiB) / GiB.

Por exemplo:

  • Se um valor de 20Gi for fornecido, aplicando a fórmula acima, o volume criado será 20GB.
  • Se um valor de 20G for fornecido, o volume criado será 19GB.

Às vezes, a capacidade do volume criado é menor que o valor solicitado. Observe que o faturamento se aplica ao volume que é criado, não ao volume solicitado.

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

Devido a um problema conhecido, as atualizações das tags de usuário nos volumes Block Storage VPC podem não ser exibidas quando um perfil confiável é implementado. Esse problema não está presente em clusters que não usam perfis confiáveis.

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.