Como importar um volume EBS preexistente

Visão geral

Se você já tiver um volume do AWS Elastic Block Store (EBS) para importar para clusters do Anthos na AWS, crie um objeto PersistentVolume (PV) e o reserve para um PersistentVolumeClaim (PVC) específico.

Nesta página, explicamos como criar um PV usando um volume EBS atual preenchido com dados e como usá-lo em um pod.

Antes de começar

  • No diretório anthos-aws, use anthos-gke para alternar o contexto para o cluster de usuário.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Substitua CLUSTER_NAME pelo nome do cluster de usuários.

Como criar um PersistentVolume para um volume EBS preexistente

É possível importar um volume EBS atual especificando um novo PV.

  1. Copie o YAML a seguir em um arquivo chamado existing-volume.yaml e conclua a configuração substituindo os valores:

    • volume-capacity: tamanho do volume. Por exemplo, 30Gi. Para mais informações sobre como especificar a capacidade do volume no Kubernetes, consulte o Significado da memória.
    • storage-class-name: nome do StorageClass que provisiona o volume. Por exemplo, use o padrão standard-rwo.

      .
    • ebs-id: ID do volume EBS. Por exemplo, vol-05786ec9ec9526b67.

    • fs-type: o sistema de arquivos do volume. Por exemplo, ext4.

    • zone: a zona de disponibilidade da AWS que hospeda o volume EBS. Por exemplo, us-east-1c.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: volume-name
      annotations:
        pv.kubernetes.io/provisioned-by: ebs.csi.aws.com
    spec:
      capacity:
        storage: volume-capacity
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: storage-class-name
      claimRef:
        name: my-pvc
        namespace: default
      csi:
        driver: ebs.csi.aws.com
        volumeHandle: ebs-volume-id
        fsType: file-system-type
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.ebs.csi.aws.com/zone
              operator: In
              values:
              - zone
    
  2. Aplicar o YAML ao cluster

    kubectl apply -f existing-volume.yaml
    
  3. Confirmar a criação do PV

    kubectl describe pv volume-name
    

    A saída desse comando contém o status do PV.

Como usar o volume com um PersistentVolumeClaim e um pod

Depois de importar o volume, é possível criar um PVC e um Pod que anexe o PVC.

O YAML abaixo cria um PVC e o anexa a um Pod que executa o servidor da Web Nginx. Copie-o para um arquivo chamado nginx.yaml e conclua a configuração substituindo os valores:

  • storage-class: o nome do StorageClass do PersistentVolume criado anteriormente. Por exemplo, standard-rwo.
  • volume-name: o nome do volume que você criou anteriormente.
  • volume-capacity: tamanho do volume. Por exemplo, 30Gi.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-class-name
  volumeName: volume-name
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: volume-capacity
---

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: data
  volumes:
   - name: data
     persistentVolumeClaim:
       claimName: my-pvc
  1. Aplicar o YAML ao cluster

    kubectl apply -f nginx.yaml
    
  2. Verifique o status da sua instância do Nginx com kubectl describe. A saída precisa ter um STATUS de Running.

    kubectl describe pod web-server
    

Como usar volumes EBS criptografados

Se o volume do EBS for criptografado com o AWS Key Management Service (KMS), você precisará conceder acesso aos papéis do de IAM da AWS aos clusters do Anthos no plano de controle da AWS para a chave KMS.

Para encontrar o nome do papel de IAM da AWS, siga estas etapas:

  1. Mude para o diretório com os clusters do Anthos na configuração da AWS. Você criou esse diretório ao instalar o serviço de gerenciamento.

    cd anthos-aws

  2. Escolha se você criou os clusters do Anthos no ambiente da AWS com a ferramenta anthos-gke ou se criou manualmente os perfis de IAM da AWS.

    Ferramenta anthos-gke

    Use o comando terraform output e procure o valor de iamInstanceProfile.

    terraform output | grep iamInstanceProfile
    

    Se você tiver criado seus clusters do Anthos no ambiente da AWS com a ferramenta anthos- gke, a saída será semelhante a esta:

      iamInstanceProfile: gke-CLUSTER_ID-controlplane
      iamInstanceProfile: gke-CLUSTER_ID-nodepool
    

    Em que CLUSTER_ID é o ID do cluster. Copie o valor de gke-CLUSTER_ID-controlplane para a etapa a seguir.

    Criados manualmente

    Analise a saída de terraform output com o seguinte comando:

    terraform output | less
    

    Role a resposta até o iamInstanceProfile depois da definição do AWSCluster.

    kind: AWSCluster
    metadata:
      name: cluster-0
    spec:
      ...
      controlPlane:
       ...
        iamInstanceProfile: INSTANCE_PROFILE_NAME
    

    Copie o valor de INSTANCE_PROFILE_NAME para a etapa a seguir.

  3. Para conceder ao plano de controle acesso aos volumes do EBS, adicione o perfil do IAM gke-xxxxxx-controlplane da AWS como um usuário de chaves à chave do KMS da AWS usada para criptografar o EBS. volume.

A seguir