Importar um volume do EBS pré-existente

Vista geral

Se já tiver um volume do AWS Elastic Block Store (EBS) para importar para o GKE no AWS, pode criar um objeto PersistentVolume (PV) e reservá-lo para um PersistentVolumeClaim (PVC) específico.

Esta página explica como criar um PV através de um volume do EBS existente preenchido com dados e como usar o PV num Pod.

Antes de começar

  • No diretório do anthos-aws, use anthos-gke para mudar o contexto para o cluster de utilizadores.
    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 utilizadores.

Criar um PersistentVolume para um volume EBS pré-existente

Pode importar um volume do EBS existente especificando um novo PV.

  1. Copie o seguinte YAML para um ficheiro com o nome 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 artigo Significado da memória.
    • storage-class-name: o nome da StorageClass que aprovisiona o volume. Por exemplo, pode usar o valor predefinido standard-rwo.

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

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

    • zone: a zona de disponibilidade da AWS que aloja o volume do 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. Aplique o YAML ao seu cluster

    kubectl apply -f existing-volume.yaml
    
  3. Confirme a criação da sua propriedade de visualização de página

    kubectl describe pv volume-name
    

    O resultado deste comando contém o estado da PV.

Usar o volume com uma PersistentVolumeClaim e um pod

Depois de importar o volume, pode criar um PVC e um pod que anexa o PVC.

O YAML abaixo cria um PVC e anexa-o a um pod que executa o servidor Web Nginx. Copie-o para um ficheiro com o nome nginx.yaml e conclua a configuração substituindo os valores:

  • storage-class: o nome da StorageClass do PersistentVolume que criou anteriormente. Por exemplo, standard-rwo.
  • volume-name: o nome do volume que 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. Aplique o YAML ao seu cluster

    kubectl apply -f nginx.yaml
    
  2. Verifique o estado da sua instância do Nginx com kubectl describe. O resultado deve ter um STATUS de Running.

    kubectl describe pod web-server
    

Usar volumes EBS encriptados

Se o volume do EBS estiver encriptado com o AWS Key Management Service (KMS), tem de conceder à função do AWS IAM do plano de controlo do GKE no AWS acesso à sua chave do KMS.

Para obter o nome da função do AWS IAM, siga estes passos:

  1. Altere para o diretório com a configuração do GKE na AWS. Criou este diretório quando Instalou o serviço de gestão.

    cd anthos-aws

  2. Escolha se criou o seu ambiente do GKE na AWS com a ferramenta anthos-gke ou se criou os seus perfis do IAM da AWS manualmente.

    ferramenta anthos-gke

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

    terraform output | grep iamInstanceProfile
    

    Se criou o seu ambiente do GKE no AWS com a ferramenta anthos- gke, o resultado tem o seguinte aspeto:

      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 o passo seguinte.

    Criado manualmente

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

    terraform output | less
    

    Desloque a saída e encontre o iamInstanceProfile após a definição de AWSCluster.

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

    Copie o valor de INSTANCE_PROFILE_NAME para o seguinte passo.

  3. Para conceder ao plano de controlo acesso aos seus volumes EBS, adicione o gke-xxxxxx-controlplane perfil do AWS IAM como um utilizador de chaves à chave do AWS KMS usada para encriptar o seu volume EBS.

O que se segue?