View a markdown version of this page

Use o armazenamento do sistema de arquivos do Amazon S3 com o driver CSI do Amazon EFS - Amazon EKS

Ajudar a melhorar esta página

Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.

Use o armazenamento do sistema de arquivos do Amazon S3 com o driver CSI do Amazon EFS

O S3 Files é um sistema de arquivos compartilhado que conecta qualquer computação AWS diretamente aos seus dados no Amazon S3. Ele fornece acesso rápido e direto a todos os seus dados do S3 como arquivos com semântica completa do sistema de arquivos e desempenho de baixa latência, sem que seus dados saiam do S3. Isso significa que aplicativos, agentes e equipes baseados em arquivos podem acessar e trabalhar com dados do S3 como um sistema de arquivos usando as ferramentas das quais eles já dependem. O driver Container Storage Interface (CSI) do Amazon EFS permite que os clusters do Kubernetes executados na AWS montem os sistemas de arquivos do Amazon S3 como volumes persistentes a partir da versão 3.0.0. Este tópico mostra como usar o driver da CSI do Amazon EFS para gerenciar o sistema de arquivos do Amazon S3 no cluster do Amazon EKS.

Considerações

  • O driver da CSI do Amazon EFS não é compatível com imagens de contêiner baseadas no Windows.

  • O EKS Fargate não oferece suporte a arquivos S3.

  • O driver CSI do Amazon EFS não é compatível com o Amazon EKS Hybrid Nodes.

  • O suporte aos arquivos do Amazon S3 no driver CSI do Amazon EFS começa na versão 3.0.0.

Pré-requisitos

  • O driver CSI do Amazon EFS precisa de permissões do AWS Identity and Access Management (IAM).

  • Versão 2.12.3 ou posterior ou versão 1.27.160 ou posterior da AWS Command Line Interface (AWS CLI) instalada e configurada no seu dispositivo ou no AWS CloudShell. Para verificar sua versão atual, use aws --version | cut -d / -f2 | cut -d ' ' -f1. Os gerenciadores de pacotes, como yum, apt-get ou Homebrew para macOS, geralmente estão várias versões atrás da versão mais recente da AWS CLI. Para instalar a versão mais recente, consulte Installing e Quick configuration with aws configure, no Guia do usuário da AWS Command Line Interface. A versão da AWS CLI instalada no AWS CloudShell também pode estar várias versões atrás da versão mais recente. Para atualizá-lo, consulte Instalar a AWS CLI no seu diretório pessoal, no Guia do usuário do AWS CloudShell.

  • A ferramenta da linha de comando kubectl está instalada no seu dispositivo ou no AWS CloudShell. A versão pode ser a mesma ou até uma versão secundária anterior ou posterior à versão do Kubernetes do seu cluster. Por exemplo, se a versão do cluster for a 1.29, será possível usar o kubectl versão 1.28, 1.29 ou 1.30 com ele. Para instalar ou atualizar o kubectl, consulte Configurar o kubectl e o eksctl.

Etapa 1: criar perfis do IAM

O driver da CSI do Amazon EFS exige permissões do IAM para interagir com seu sistema de arquivos. O driver EFS CSI usa duas contas de serviço com perfis do IAM separados:

  • efs-csi-controller-sa — usado pelo controlador, requer AmazonS3FilesCSIDriverPolicy.

  • efs-csi-node-sa — usado pelo daemonset do nó, requer:

    • AmazonS3ReadOnlyAccess — permite o streaming de leituras diretamente do seu bucket S3 para maior throughput.

    • AmazonElasticFileSystemsUtils — permite publicar logs do efs-utils no Amazon CloudWatch para visibilidade das operações de montagem e facilitar a solução de problemas.

nota

Se quiser usar o sistema de arquivos Amazon S3 e o armazenamento do Amazon EFS, você deve anexar as políticas gerenciadas AmazonS3FilesCSIDriverPolicy e AmazonEFSCSIDriverPolicy à função de controlador. Para ter mais informações sobre o armazenamento do Amazon EFS, consulte Usar armazenamento elástico do sistema de arquivos com o Amazon EFS.

Para implementar esse procedimento, você pode usar uma das seguintes ferramentas:

nota

As etapas específicas desse procedimento foram escritas para usar o driver como um complemento do Amazon EKS. Para obter detalhes sobre instalações autogerenciadas, consulte Set up driver permission no GitHub.

eksctl

Se estiver usando Identidades de Pods

Execute os comandos a seguir para criar perfis do IAM e a Identidade de Pods com o eksctl. Substitua my-cluster pelo seu valor.

export cluster_name=my-cluster # Create the controller role eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_ControllerRole \ --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy # Create the node role eksctl create podidentityassociation \ --service-account-name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_NodeRole \ --permission-policy-arns arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils

Se estiver usando perfis do IAM para contas de serviço

Execute os seguintes comandos para criar perfis do IAM com o eksctl. Substitua my-cluster pelo nome do seu cluster e region-code pelo código da região da AWS.

export cluster_name=my-cluster export region_code=region-code # Create the controller role export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $controller_role_name \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --approve \ --region $region_code # Create the node role export node_role_name=AmazonEKS_EFS_CSI_NodeRole eksctl create iamserviceaccount \ --name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $node_role_name \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --approve \ --region $region_code

Console de gerenciamento da AWS

Execute o seguinte para criar um perfil IAM com Console de gerenciamento da AWS.

  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação à esquerda, escolha Funções.

  3. Na página Perfis, selecione Criar perfil.

  4. Na página Selecionar entidade confiável, faça o seguinte:

    1. Se estiver usando Identidade de Pods do EKS:

      1. Na seção Tipo de entidade confiável), escolha Service da AWS.

      2. No menu suspenso Serviço ou caso de uso, escolha EKS.

      3. Na seção Caso de uso, escolha EKS - Identidade de Pods.

      4. Escolha Próximo.

    2. Se estiver usando perfis do IAM para contas de serviço:

      1. Na seção Tipo de entidade confiável, escolha Identidade da Web.

      2. Para Identity provider (Provedor de identidade), escolha OpenID Connect provider URL (URL do provedor OpenID Connect) para o seu cluster (conforme mostrado na guia Overview (Visão geral) do Amazon EKS).

      3. Em Público, escolha sts.amazonaws.com.

      4. Escolha Próximo.

  5. Na página Add permissions (Adicionar permissões), faça o seguinte:

    1. Na caixa Filtrar políticas insira AmazonS3FilesCSIDriverPolicy.

    2. Marque a caixa de seleção à esquerda da política retornada na pesquisa.

    3. Escolha Próximo.

  6. Na página Name, review, and create (Nomear, revisar e criar), faça o seguinte:

    1. Em Nome do perfil, insira um nome exclusivo para o perfil, como AmazonEKS_EFS_CSI_ControllerRole.

    2. Em Adicionar tags (Opcional), adicione metadados ao perfil anexando tags como pares chave-valor. Para obter mais informações sobre o uso de tags no IAM, consulte Marcar recursos do IAM no Guia do usuário do IAM.

    3. Selecione Criar perfil.

  7. Depois que o perfil for criado:

    1. Se estiver usando Identidade de Pods do EKS:

      1. Abra o console do Amazon EKS.

      2. No painel de navegação esquerdo, selecione Clusters e depois o nome do cluster para o qual você deseja configurar a associação a Identidade de Pods do EKS.

      3. Escolha a guia Acesso.

      4. Em Associações da Identidade de Pods, escolha Criar.

      5. Escolha o menu suspenso Perfil do IAM e selecione o perfil que acabou de criar.

      6. Escolha o campo Namespace Kubernetes e a entrada kube-system.

      7. Escolha o campo Conta de serviço do Kubernetes e a entrada efs-csi-controller-sa.

      8. Escolha Criar.

      9. Para obter mais informações sobre a criação de associações da Identidade de Pods, consulte Criar uma associação de identidade de pod (console do AWS ).

      10. Repita as etapas acima para criar uma segunda função para a conta de serviço do nó. Na página Adicionar permissões, anexe AmazonS3ReadOnlyAccess e AmazonElasticFileSystemsUtils em vez disso. Em seguida, crie uma associação da Identidade de Pods com o efs-csi-node-sa para o campo da conta de serviço do Kubernetes.

    2. Se estiver usando perfis do IAM para contas de serviço:

      1. Escolha o perfil para abri-lo para edição.

      2. Escolha a guia Relacionamentos de confiança e, em seguida, escolha Editar política de confiança.

      3. Encontre a linha semelhante à seguinte:

        "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"

        Adicione a seguinte linha acima da linha anterior. Substitua <region-code> pela região da AWS em que seu cluster está localizado. Substitua <EXAMPLED539D4633E53DE1B71EXAMPLE> pelo ID do provedor OIDC do cluster.

        "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa",
      4. Escolha Atualizar política para concluir.

      5. Repita as etapas acima para criar uma segunda função para a conta de serviço do nó. Na página Adicionar permissões, anexe AmazonS3ReadOnlyAccess e AmazonElasticFileSystemsUtils em vez disso. Na política de confiança, use efs-csi-node-sa para o valor da condição :sub.

AWS CLI

Execute os seguintes comandos para criar perfis do IAM com a AWS CLI.

Se estiver usando Identidades de Pods

  1. Crie o perfil do IAM que concede as ações AssumeRole e TagSession ao serviço pods.eks.amazonaws.com.

    1. Copie o conteúdo a seguir em um arquivo denominado aws-efs-csi-driver-trust-policy-pod-identity.json.

      { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
    2. Crie a função. Substitua my-cluster pelo nome do cluster.

      export cluster_name=my-cluster export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  2. Anexe a política gerenciada do AWS à função de controlador.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  3. Crie um perfil do IAM do nó usando a mesma política de confiança.

    export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  4. Anexe as políticas gerenciadas AWS necessárias ao perfil do nó.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
  5. Execute os comandos a seguir para criar as associações da Identidade de Pods. Substitua <111122223333> pelo ID da sua conta.

    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa
    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
  6. Para obter mais informações sobre a criação de associações da Identidade de Pods, consulte Criar uma associação de identidade de pod (console do AWS ).

Se estiver usando perfis do IAM para contas de serviço

  1. Exiba a URL do provedor OIDC do cluster. Substitua my-cluster pelo nome do cluster.

    export cluster_name=my-cluster aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text

    Veja abaixo um exemplo de saída.

    https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>

    Se o resultado do comando for None, revise os Pré-requisitos.

  2. Crie o perfil do IAM para a conta de serviço do controlador.

    1. Copie o conteúdo a seguir em um arquivo denominado controller-trust-policy.json. Substitua <111122223333> pelo ID da sua conta. Substitua <EXAMPLED539D4633E53DE1B71EXAMPLE> e <region-code> pelos valores retornados na etapa anterior.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] }
    2. Crie a função.

      export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"controller-trust-policy.json"
  3. Anexe a política gerenciada do AWS à função de controlador.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  4. Crie o perfil do IAM para a conta de serviço do nó.

    1. Copie o conteúdo a seguir em um arquivo denominado node-trust-policy.json. Substitua <111122223333> pelo ID da sua conta. Substitua <EXAMPLED539D4633E53DE1B71EXAMPLE> e <region-code> pelos valores retornados na etapa 1.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] }
    2. Crie a função.

      export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-trust-policy.json"
  5. Anexe as políticas gerenciadas AWS necessárias ao perfil do nó.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
nota

A política AmazonS3ReadOnlyAccess concede acesso de leitura a todos os buckets do S3. Para restringir o acesso a buckets específicos, você pode desanexá-los e substituí-los por uma política embutida baseada em tags. Consulte a documentação da política do IAM do driver EFS CSI da Amazon no GitHub para obter detalhes.

Etapa 2: obter o driver de CSI do Amazon EFS

Recomendamos que você instale o driver da CSI do Amazon EFS por meio do complemento Amazon EKS. Para adicionar um complemento do Amazon EKS ao cluster, consulte Criar um complemento do Amazon EKS. Para obter mais informações sobre complementos, consulte Complementos do Amazon EKS. Se você não conseguir usar o complemento do Amazon EKS, recomendamos que você envie um problema sobre o motivo pelo qual não pode usar o repositório GitHub para roteiro de contêineres.

Importante

Antes de adicionar o driver do Amazon EFS como um complemento do Amazon EKS, verifique se você não tem uma versão autogerenciada do driver instalada no seu cluster. Em caso afirmativo, consulte Uninstalling the Amazon EFS CSI Driver no GitHub.

Como alternativa, se quiser uma instalação autogerenciada do driver CSI do Amazon EFS, consulte Installation no GitHub.

Etapa 3: criar um sistema de arquivos do Amazon S3

Para criar um sistema de arquivos do Amazon S3, consulte Criar um sistema de arquivos do Amazon S3 para o Amazon EKS no GitHub.

Etapa 4: implantar uma aplicação de exemplo

Você pode implantar toda uma variedade de aplicações de exemplo e modificá-las conforme necessário. Para obter mais informações, consulte Exemplos no GitHub.