Como importar um volume EBS preexistente

Visão geral

Se você já tiver um volume do AWS Elastic Block Store (EBS) a ser importado para o GKE na AWS, crie um objeto PersistentVolume (PV) e o reserve para uma PersistentVolumeClaim (PVC) específica.

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ários.
    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 serviço de gerenciamento de chaves (KMS) da AWS, você precisará conceder aos papéis do IAM da AWS do plano de controle do GKE na AWS acesso à chave do KMS.

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

  1. Mude para o diretório com o GKE 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 o ambiente do GKE na AWS com a ferramenta anthos-gke ou se criou manualmente os perfis do IAM da AWS.

    Ferramenta anthos-gke

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

    terraform output | grep iamInstanceProfile
    

    Se você criou o ambiente do GKE na 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 da AWS gke-xxxxxx-controlplane como um usuário de chaves à chave do KMS da AWS usada para criptografar o volume do EBS.

A seguir