Ir para o conteúdo

Como usar o armazenamento persistente no Amazon EKS?

8 minuto de leitura
0

Quero usar o armazenamento persistente no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Para usar o armazenamento persistente no Amazon EKS, conclua as etapas de uma das seguintes opções:

Observação: Para segurança e eficiência, é uma prática recomendada instalar o driver CSI por meio de um complemento do Amazon EKS. Também é uma prática recomendada instalar a versão mais recente dos drivers. Para ver as etapas de instalação e a versão mais recente do driver, consulte aws-ebs-csi-driver ou aws-efs-csi-driver no site do GitHub.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Pré-requisitos:

  • Configure uma versão do kubectl que se alinhe à sua versão do Kubernetes. Para obter mais informações sobre os requisitos de defasagem de versão, consulte kubectl no site do Kubernetes.

  • Instale ou atualize o eksctl. Para obter instruções, consulte Installation [Instalação] no site do eksctl.

  • Defina as permissões de Criar do AWS Identity and Access Management (AWS IAM). Em seguida, anexe a política ao perfil do driver CSI ou ao perfil do nó de processamento do Amazon EKS.

  • Crie seu cluster do Amazon EKS e anexe seus nós de processamento ao cluster. Para verificar se você anexou seus nós de processamento ao cluster, execute o seguinte comando:

    kubectl get nodes
  • Para verificar se existe um provedor IAM OpenID Connect (OIDC) para seu cluster, execute o seguinte comando describe-cluster da AWS CLI:

    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.identity.oidc.issuer"
     --output text

    Observação: Substitua your_cluster_name pelo nome do seu cluster.

  • Para verificar se você configurou seu provedor de identidade OIDC, execute o seguinte comando list-open-id-connect-providers:

    aws iam list-open-id-connect-providers | grep OIDC-ID

    Observação: Substitua OIDC-ID pelo ID do seu provedor OIDC. Se você receber uma mensagem de erro, crie um provedor de identidade OIDC"No OpenIDConnect provider found in your account".

Driver CSI do Amazon EBS

Para implantar o driver CSI do Amazon EBS, conclua as seguintes etapas:

  1. Crie um arquivo de política de confiança do IAM semelhante ao exemplo a seguir:

    cat <<EOF > trust-policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:aud": "sts.amazonaws.com",
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Observação: Substitua YOUR_AWS_ACCOUNT_ID pelo ID da sua conta da AWS, YOUR_AWS_REGION pela sua região da AWS e OIDC-ID pelo seu ID de provedor OIDC.

  2. Para criar um perfil do IAM chamado AmazonEKS_EBS_CSI_DriverRole, execute o seguinte comando create-role:

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. Para anexar a política do IAM gerenciada pela AWS do driver CSI ao perfil do IAM, execute o seguinte comando attach-role-policy:

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Para implantar o driver CSI do Amazon EBS, você pode usar o Kustomize, o Helm ou um complemento gerenciado do Amazon EKS. Para obter instruções de implantação, consulte Installation [Instalação] no site do GitHub.

  5. Teste seu driver CSI do Amazon EBS com uma aplicação de exemplo que usa provisionamento dinâmico para os pods. O driver CSI do Amazon EBS provisiona volumes do EBS sob demanda.

Driver CSI do Amazon EFS

Crie um perfil do IAM para o driver CSI

Conclua as etapas a seguir para um cluster com nós de processamento:

  1. Para usar a AmazonEFSCSIDriverPolicy, consulte Se estiver usando perfis do IAM para contas de serviço. Em seguida, prossiga para a etapa 7.
    Ou execute o comando a seguir para baixar o documento de política do IAM do GitHub:

    curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
  2. Para criar uma política do IAM, execute o seguinte comando create-policy:

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. Execute o comando describe-cluster para determinar o ID de provedor OIDC do seu cluster:

    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.identity.oidc.issuer"
     --output text

    Observação: Substitua your_cluster_name pelo nome do seu cluster.

  4. Crie a seguinte política de confiança do IAM que concede a ação AssumeRoleWithWebIdentity à sua conta de serviço do Kubernetes:

    cat <<EOF > trust-policy.json{
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Observação: Substitua YOUR_AWS_ACCOUNT_ID pelo ID da sua conta, YOUR_AWS_REGION pela sua região e OIDC-ID pelo ID do provedor OIDC do seu cluster.

  5. Para criar um perfil do IAM, execute o seguinte comando create-role:

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. Para anexar sua nova política do IAM ao perfil, execute o seguinte comando attach-role-policy:

    aws iam attach-role-policy
      --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/AmazonEKS_EFS_CSI_Driver_Policy
      --role-name AmazonEKS_EFS_CSI_DriverRole

    Observação: Substitua YOUR_AWS_ACCOUNT_ID pelo ID da sua conta.

  7. Se você usa um complemento gerenciado, prossiga com a Implantação do driver CSI do Amazon EFS. Para instalar um driver autogerenciado, conclua as etapas 7 a 10. Salve o conteúdo a seguir em um arquivo YAML chamado efs-service-account.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/name: aws-efs-csi-driver
      name: efs-csi-controller-sa
      namespace: kube-system
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/AmazonEKS_EFS_CSI_DriverRole

    Observação: Substitua YOUR_AWS_ACCOUNT_ID pelo ID da sua conta.

  8. Para criar a conta de serviço do Kubernetes em seu cluster, execute o seguinte comando:

    kubectl apply -f efs-service-account.yaml

    Observação: A conta de serviço do Kubernetes efs-csi-controller-sa tem a anotação do perfil do IAM que você criou.

  9. Para baixar o manifesto do registro público do Amazon Elastic Container Registry (Amazon ECR), execute o seguinte comando:

    kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-VERSION" > public-ecr-driver.yaml

    Observação: Substitua VERSION pelo número da sua versão de lançamento. É uma prática recomendada usar a versão mais recente lançada. Para obter uma lista de branches ativas, consulte Branches no site do GitHub. É possível usar o Helm em vez do Kustomize para instalar o driver. Para ver as etapas, consulte Deploy the driver [Implantar o driver] no site do GitHub.

  10. Edite o arquivo baixado para remover as seguintes linhas:

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  name: efs-csi-controller-sa
  namespace: kube-system

Observação: Você não precisa incluir as linhas anteriores porque você já criou uma conta de serviço na etapa 7.

Implante o driver CSI do Amazon EFS

Para aplicar o manifesto, execute o seguinte comando:

kubectl apply -f public-ecr-driver.yaml

Se seu cluster não contiver nós e contiver somente pods do AWS Fargate, execute o seguinte comando para implantar o driver em todas as regiões:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml

Crie um sistema de arquivos do EFS

Conclua as etapas a seguir:

  1. Para obter o ID da nuvem privada virtual (VPC) do seu cluster do Amazon EKS, execute o seguinte comando describe-cluster:
    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.resourcesVpcConfig.vpcId"
     --output text
    Observação: Substitua your_cluster_name pelo nome do seu cluster.
  2. Para obter o intervalo CIDR para seu cluster da VPC, execute o seguinte comando describe-vpcs:
    aws ec2 describe-vpcs
     --vpc-ids YOUR_VPC_ID
     --query "Vpcs[].CidrBlock"
     --output text
    Observação: Substitua YOUR_VPC_ID pelo ID da sua VPC.
  3. Para criar um grupo de segurança que permita o tráfego de entrada do sistema de arquivos de rede (network file system, NFS) para seus pontos de montagem do Amazon EFS, execute o seguinte comando create-security-group:
    aws ec2 create-security-group
     --description efs-test-sg
     --group-name efs-sg
     --vpc-id YOUR_VPC_ID
    Observação: Substitua YOUR_VPC_ID pelo ID da sua VPC. Na saída, observe o valor do GroupId.
  4. Para permitir que os recursos em sua VPC se comuniquem com seu sistema de arquivos do EFS, execute o seguinte comando authorize-security-group-ingress para adicionar uma regra de entrada NFS:
    aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    Observação: Substitua YOUR_VPC_CIDR pelo CIDR da sua VPC e sg-abc pelo ID do seu grupo de segurança.
  5. Para criar um sistema de arquivos do EFS para seu cluster do Amazon EKS, execute o seguinte comando create-file-system:
    aws efs create-file-system --creation-token eks-efs
    Observação: Observe o FileSystemId.
  6. Para criar um destino de montagem para o Amazon EFS, execute o seguinte comando create-mount-target:
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
    Observação: Substitua FileSystemId pelo seu ID do sistema de arquivos do EFS, sg-abc pelo ID do seu grupo de segurança e SubnetID pelo ID da sub-rede do seu nó de processamento. É uma prática recomendada executar o comando anterior para cada zona de disponibilidade em que seus nós de processamento são executados. Dessa forma, todas as instâncias do Amazon Elastic Compute Cloud (Amazon EC2) nessas zonas de disponibilidade podem usar o sistema de arquivos. Para criar destinos de montagem em várias sub-redes, execute o comando para cada ID de sub-rede.

Teste o driver CSI do Amazon EFS

Para implantar dois pods que gravam no mesmo arquivo, consulte Multiple Pods Read Write Many [Diversos pods gravam muitos] no site do GitHub.

Informações relacionadas

Solução de erros na operação de arquivos relacionados a cotas

Amazon EFS CSI driver [Driver CSI do Amazon EFS] no site do GitHub

Como soluciono problemas com minhas montagens de volumes do Amazon EBS no Amazon EKS?

Como soluciono problemas com minhas montagens de volumes do Amazon EFS no Amazon EKS?

AWS OFICIALAtualizada há um ano