As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Executar workloads monitoradas com armazenamento de dados persistente usando o Amazon EFS no Amazon EKS com o AWS Fargate
Criado por Ricardo Morais (AWS), Rodrigo Bersa (AWS) e Lucio Pereira (AWS)
Resumo
Esse padrão fornece orientação para habilitar o Amazon Elastic File System (Amazon EFS) como um dispositivo de armazenamento para contêineres que estão sendo executados no Amazon Elastic Kubernetes Service (Amazon EKS) usando o AWS Fargate para provisionar seus recursos computacionais.
A configuração descrita nesse padrão segue as práticas recomendadas de segurança e fornece segurança em repouso e segurança em trânsito por padrão. Para criptografar seu sistema de arquivos Amazon EFS, ele usa uma chave do AWS Key Management Service (AWS KMS), mas você também pode especificar um alias de chave que despacha o processo de criação de uma chave KMS.
Você pode seguir as etapas desse padrão para criar um namespace e um perfil Fargate para um aplicativo proof-of-concept (PoC), instalar o driver Amazon EFS Container Storage Interface (CSI) usado para integrar o cluster Kubernetes ao Amazon EFS, configurar a classe de armazenamento e implantar o aplicativo PoC. Essas etapas resultam em um sistema de arquivos Amazon EFS que é compartilhado entre várias workloads do Kubernetes, executado no Fargate. O padrão é acompanhado por scripts que automatizam essas etapas.
Você pode usar esse padrão se quiser a persistência de dados em seus aplicativos em contêineres e evitar a perda de dados durante as operações de escalabilidade. Por exemplo:
DevOps ferramentas — Um cenário comum é desenvolver uma ferramenta de integração e entrega contínuas (CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CDferramenta).
Servidores Web — Um cenário comum é usar o Apache como um servidor Web HTTP. Você pode usar o Amazon EFS como um sistema de arquivos compartilhado para armazenar arquivos estáticos que são compartilhados entre diferentes instâncias do servidor web. Neste cenário de exemplo, as modificações são aplicadas diretamente ao sistema de arquivos em vez de arquivos estáticos serem incorporados a uma imagem do Docker.
Pré-requisitos e limitações
Pré-requisitos
Uma conta AWS ativa
Um cluster Amazon EKS existente com Kubernetes versão 1.17 ou posterior (testado até a versão 1.27)
Um sistema de arquivos Amazon EFS existente para vincular um Kubernetes StorageClass e provisionar sistemas de arquivos dinamicamente
Permissões de administração do cluster
Contexto configurado para apontar para o cluster Amazon EKS desejado
Limitações
Há algumas limitações a serem consideradas ao usar o Amazon EKS com o Fargate. Por exemplo, o uso de algumas construções do Kubernetes, como DaemonSets contêineres privilegiados, não é suportado. Para obter mais informações sobre as limitações do Fargate, consulte as considerações sobre o AWS Fargate na documentação do Amazon EKS.
O código fornecido com esse padrão é compatível com estações de trabalho que executam Linux ou macOS.
Versões do produto
AWS Command Line Interface (AWS CLI) versão 2 ou superior
Driver Amazon EFS CSI versão 1.0 ou posterior (testado até a versão 2.4.8)
eksctl versão 0.24.0 ou posterior (testado até a versão 0.158.0)
jq versão 1.6 ou posterior
kubectl versão 1.17 ou posterior (testado até a versão 1.27)
Kubernetes versão 1.17 ou posterior (testado até a versão 1.27)
Arquitetura

A arquitetura de destino é composta pela seguinte infraestrutura:
Uma nuvem privada virtual (VPC).
Duas zonas de disponibilidade
Uma sub-rede pública com um gateway NAT que fornece acesso à Internet
Uma sub-rede privada com um cluster Amazon EKS e destinos de montagem do Amazon EFS (também conhecidos como pontos de montagem)
Amazon EFS no nível da VPC
A seguir está a infraestrutura do ambiente para o cluster Amazon EKS:
Perfis do AWS Fargate que acomodam as construções do Kubernetes no nível do namespace
Um namespace Kubernetes com:
Dois pods de aplicativos distribuídos em zonas de disponibilidade
Uma declaração de volume persistente (PVC) vinculada a um volume persistente (PV) no nível do cluster
Um PV em todo o cluster que está vinculado ao PVC no namespace e que aponta para os destinos de montagem do Amazon EFS na sub-rede privada, fora do cluster
Ferramentas
Serviços da AWS
A AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que você pode usar para interagir com os serviços da AWS a partir da linha de comando.
Amazon Elastic File System (Amazon EFS) ajuda você a criar e configurar sistemas de arquivos compartilhados na Nuvem AWS. Nesse padrão, ele fornece um sistema de arquivos simples, escalável, totalmente gerenciado e compartilhado para uso com o Amazon EKS.
O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o Kubernetes na AWS sem precisar instalar ou operar seus próprios clusters.
O AWS Fargate é um mecanismo de computação sem servidor para o Amazon EKS. Ele cria e gerencia recursos computacionais para seus aplicativos Kubernetes.
O AWS Key Management Service (AWS KMS) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
Outras ferramentas
O Docker
é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres. O eksctl é utilitário de linha de comando para criar e gerenciar clusters do Kubernetes no Amazon EKS.
kubectl é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.
jq
é uma ferramenta de linha de comando para analisar JSON.
Código
O código desse padrão é fornecido na Configuração de GitHub persistência com o Amazon EFS no Amazon EKS usando o repositório AWS Fargateepic01
meioepic06
, correspondendo à ordem na seção Epics nesse padrão.
Práticas recomendadas
A arquitetura de destino inclui os seguintes serviços e componentes e segue as melhores práticas do AWS Well-Architected
Amazon EFS, que fornece um sistema de arquivos NFS elástico simples, escalável e totalmente gerenciado. Isso é usado como um sistema de arquivos compartilhado entre todas as replicações do aplicativo PoC que estão sendo executadas em pods, que são distribuídos nas sub-redes privadas do cluster Amazon EKS escolhido.
Um destino de montagem do Amazon EFS para cada sub-rede privada. Isso fornece redundância por zona de disponibilidade na nuvem privada virtual (VPC) do cluster.
Amazon EKS, que executa as workloads do Kubernetes. Você deve provisionar um cluster do Amazon EKS antes de usar esse padrão, conforme descrito na seção Pré-requisitos.
AWS KMS, que fornece criptografia em repouso para o conteúdo armazenado no sistema de arquivos Amazon EFS.
Fargate, que gerencia os recursos computacionais dos contêineres para que você possa se concentrar nos requisitos de negócios em vez da carga de infraestrutura. O perfil Fargate é criado para todas as sub-redes privadas. Ele fornece redundância por zona de disponibilidade na nuvem privada virtual (VPC) do cluster.
Kubernetes Pods, para validar se o conteúdo pode ser compartilhado, consumido e gravado por diferentes instâncias de um aplicativo.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie um cluster do Amazon EKS. | notaSe você já tem um cluster implantado, pule para o próximo épico. Crie um cluster Amazon EKS em sua conta existente da AWS. No GitHub diretório | Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes |
Exporte variáveis de ambiente. | Execute o script env.sh. Isso fornece as informações necessárias nas próximas etapas.
Se ainda não foi mencionado, você pode obter todas as informações solicitadas acima com os seguintes comandos da CLI.
| Administrador de sistemas AWS |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie um namespace Kubernetes e um perfil Fargate para cargas de trabalho de aplicativos. | Crie um namespace para receber as workloads do aplicativo que interagem com o Amazon EFS. Execute o script Com um nome de namespace de aplicativo personalizado:
Sem um nome de namespace de aplicativo personalizado:
onde | Usuário do Kubernetes com permissões concedidas |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Gere um token exclusivo. | O Amazon EFS requer um token de criação para garantir uma operação idempotente (chamar a operação com o mesmo token de criação não tem efeito). Para atender a esse requisito, você deve gerar um token exclusivo por meio de uma técnica disponível. Por exemplo, você pode gerar um identificador universal exclusivo (UUID) para usar como um token de criação. | Administrador de sistemas AWS |
Criar um sistema de arquivos do Amazon EFS. | Crie o sistema de arquivos para receber os arquivos de dados que são lidos e gravados pelas workloads do aplicativo. Você pode criar um sistema de arquivos criptografado ou não criptografado. (Como prática recomendada, o código deste padrão cria um sistema criptografado para habilitar a criptografia em repouso por padrão.) Você pode usar uma chave exclusiva e simétrica do AWS KMS para criptografar seu sistema de arquivos. Se uma chave personalizada não for especificada, uma chave gerenciada pela AWS será usada. Use o script create-efs.sh para criar um sistema de arquivos Amazon EFS criptografado ou não criptografado, depois de gerar um token exclusivo para o Amazon EFS. Com a criptografia em repouso, sem uma chave KMS:
onde Com a criptografia em repouso, com uma chave KMS:
onde Sem criptografia:
onde | Administrador de sistemas AWS |
Crie um grupo de segurança. | Crie um grupo de segurança para permitir que o cluster do Amazon EKS acesse o sistema de arquivos do Amazon EFS. | Administrador de sistemas AWS |
Atualize a regra de entrada para o grupo de segurança. | Atualize as regras de entrada do grupo de segurança para permitir o tráfego de entrada nas seguintes configurações:
| Administrador de sistemas AWS |
Adicione um destino de montagem para cada sub-rede privada. | Para cada sub-rede privada do cluster Kubernetes, crie um destino de montagem para o sistema de arquivos e o grupo de segurança. | Administrador de sistemas AWS |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Implemente o driver da CSI do Amazon EFS. | Implemente o driver da CSI do Amazon EFS no cluster. O driver provisiona o armazenamento de acordo com as declarações de volume persistentes criadas pelos aplicativos. Execute o
Esse script usa o | Usuário do Kubernetes com permissões concedidas |
Implante a classe de armazenamento. | Implante a classe de armazenamento no cluster do provisionador Amazon EFS (efs.csi.aws.com). | Usuário do Kubernetes com permissões concedidas |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Implante o volume persistente. | Implante o volume persistente e vincule-o à classe de armazenamento criada e ao ID do sistema de arquivos Amazon EFS. O aplicativo usa o volume persistente para ler e gravar conteúdo. Você pode especificar qualquer tamanho para o volume persistente no campo de armazenamento. O Kubernetes requer esse campo, mas como o Amazon EFS é um sistema de arquivos elástico, ele não impõe nenhuma capacidade de sistema de arquivos. Você pode implantar o volume persistente com ou sem criptografia. (O driver CSI do Amazon EFS habilita a criptografia por padrão, como uma prática recomendada.) Execute o Com criptografia em trânsito:
onde Sem criptografia em trânsito:
onde | Usuário do Kubernetes com permissões concedidas |
Implante a declaração de volume persistente solicitada pelo aplicativo. | Implante a declaração de volume persistente solicitada pelo aplicativo e vincule-a à classe de armazenamento. Use o mesmo modo de acesso do volume persistente que você criou anteriormente. Você pode especificar qualquer tamanho para a reivindicação de volume persistente no campo de armazenamento. O Kubernetes requer esse campo, mas como o Amazon EFS é um sistema de arquivos elástico, ele não impõe nenhuma capacidade de sistema de arquivos. | Usuário do Kubernetes com permissões concedidas |
Implante a workload 1. | Implante o pod que representa a workload 1 do aplicativo. Essa carga de trabalho grava conteúdo no arquivo | Usuário do Kubernetes com permissões concedidas |
Implante a workload 2. | Implante o pod que representa a workload 2 do aplicativo. Essa carga de trabalho grava conteúdo no arquivo | Usuário do Kubernetes com permissões concedidas |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Verifique o status do | Digite o comando a seguir para verificar o status do
Para obter um exemplo de saída, consulte a seção Informações adicionais. | Usuário do Kubernetes com permissões concedidas |
Verifique o status do | Digite o comando a seguir para verificar o status do
Para obter um exemplo de saída, consulte a seção Informações adicionais. | Usuário do Kubernetes com permissões concedidas |
Validar se a workload 1 pode gravar no sistema de arquivos. | Digite o comando a seguir para validar se a carga de trabalho 1 está sendo gravada.
Os resultados são semelhantes aos seguintes:
| Usuário do Kubernetes com permissões concedidas |
Validar se a workload 2 pode gravar no sistema de arquivos. | Digite o comando a seguir para validar se a carga de trabalho 2 está sendo gravada.
Os resultados são semelhantes aos seguintes:
| Usuário do Kubernetes com permissões concedidas |
Validar se a workload 1 pode ler o arquivo gravado pela workload 2. | Insira o comando a seguir para validar se a carga de trabalho 1 pode ler o
Os resultados são semelhantes aos seguintes:
| Usuário do Kubernetes com permissões concedidas |
Validar se a workload 2 pode ler o arquivo gravado pela workload 1. | Insira o comando a seguir para validar se a carga de trabalho 2 pode ler o
Os resultados são semelhantes aos seguintes:
| Usuário do Kubernetes com permissões concedidas |
Valide se os arquivos são retidos após a remoção dos componentes do aplicativo. | Em seguida, você usa um script para remover os componentes do aplicativo (volume persistente, declaração de volume persistente e pods) e validar se os arquivos
onde Os resultados são semelhantes aos seguintes:
| Usuário do Kubernetes com permissões concedidas, administrador do sistema |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Monitore os registros do aplicativo. | Como parte de uma operação do segundo dia, envie os registros do aplicativo para a Amazon CloudWatch para monitoramento. | Administrador de sistemas da AWS, usuário do Kubernetes com permissões concedidas |
Monitore os contêineres do Amazon EKS e do Kubernetes com o Container Insights. | Como parte de uma operação do segundo dia, monitore os sistemas Amazon EKS e Kubernetes usando o Amazon Container Insights. CloudWatch Essa ferramenta coleta, agrega e resume métricas de aplicações em contêineres em diferentes níveis e dimensões. Para obter mais informações, consulte a seção Recursos relacionados. | Administrador de sistemas da AWS, usuário do Kubernetes com permissões concedidas |
Monitore o Amazon EFS com CloudWatch. | Como parte de uma operação do segundo dia, monitore os sistemas de arquivos usando a Amazon CloudWatch, que coleta e processa dados brutos do Amazon EFS em métricas legíveis e quase em tempo real. Para obter mais informações, consulte a seção Recursos relacionados. | Administrador de sistemas AWS |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Limpe todos os recursos criados para o padrão. | Depois de concluir esse padrão, limpe todos os recursos para evitar incorrer em cobranças da AWS. Execute o Com a criptografia em repouso, com uma chave KMS:
onde Sem criptografia em repouso:
onde | Usuário do Kubernetes com permissões concedidas, administrador do sistema |
Recursos relacionados
Referências
O AWS Fargate para Amazon EKS agora oferece suporte ao Amazon EFS (anúncio
) How to capture application logs when using Amazon EKS on AWS Fargate (Como capturar registros de aplicativos ao usar o Amazon EKS no AWS Fargate)
(publicação do blog) Usando o Container Insights ( CloudWatch documentação da Amazon)
Configuração do Container Insights no Amazon EKS e no Kubernetes (documentação da Amazon) CloudWatch
Métricas do Amazon EKS e do Kubernetes Container Insights (documentação da Amazon) CloudWatch
Monitoramento do Amazon EFS com a Amazon CloudWatch (documentação do Amazon EFS)
GitHub tutoriais e exemplos
Ferramentas necessárias
Mais informações
Veja a seguir um exemplo de saída do kubectl get pv
comando.
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE poc-app-pv 1Mi RWX Retain Bound poc-efs-eks-fargate/poc-app-pvc efs-sc 3m56s
Veja a seguir um exemplo de saída do kubectl -n poc-efs-eks-fargate get pvc
comando.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE poc-app-pvc Bound poc-app-pv 1Mi RWX efs-sc 4m34s