Configuração do ajuste de escala automático orientado por eventos no Amazon EKS usando o Identidade de Pods do Amazon EKS e o KEDA
Dipen Desai, Abhay Diwan, Kamal Joshi e Mahendra Revanasiddappa, Amazon Web Services
Resumo
Plataformas de orquestração, como o Amazon Elastic Kubernetes Service (Amazon EKS), simplificaram o gerenciamento do ciclo de vida de aplicações baseadas em contêineres. Isso ajuda as organizações a se concentrarem na criação, proteção, operação e manutenção de aplicações baseadas em contêineres. À medida que as implantações orientadas por eventos se tornam mais comuns, as organizações estão escalando com mais frequência as implantações do Kubernetes com base em várias fontes de eventos. Esse método, combinado com o ajuste de escala automático, pode resultar em economias de custo significativas ao fornecer recursos computacionais sob demanda e escalabilidade eficiente, adaptada à lógica da aplicação.
O KEDA
A AWS fornece perfis do AWS Identity and Access Management (IAM) que oferecem suporte a diversas opções de implantação do Kubernetes, incluindo o Amazon EKS, o Amazon EKS Anywhere, o Serviço Red Hat OpenShift na AWS (ROSA) e clusters autogerenciados do Kubernetes no Amazon Elastic Compute Cloud (Amazon EC2). Esses perfis usam constructos do IAM, como provedores de identidade do OpenID Connect (OIDC) e políticas de confiança do IAM, para operar em diferentes ambientes sem depender diretamente dos serviços ou APIs do Amazon EKS. Para obter mais informações, consulte Perfis do IAM para contas de serviço na documentação do Amazon EKS.
A Identidade de Pods do Amazon EKS simplifica o processo para que as contas de serviço do Kubernetes assumam perfis do IAM sem exigir provedores de OIDC. Ela fornece a capacidade de gerenciar credenciais para suas aplicações. Em vez de criar e distribuir as credenciais da AWS para os contêineres ou usar o perfil da instância do Amazon EC2, você pode associar um perfil do IAM a uma conta de serviço do Kubernetes e configurar os pods para usar a conta de serviço. Isso ajuda você a usar um perfil do IAM em vários clusters e simplifica o gerenciamento de políticas ao permitir a reutilização de políticas de permissão em todos os perfis do IAM.
Ao implementar o KEDA com a Identidade de Pods do Amazon EKS, as empresas podem implantar o ajuste de escala automático eficiente orientado por eventos e o gerenciamento simplificado de credenciais. As aplicações são dimensionadas com base na demanda, o que otimiza a utilização dos recursos e reduz os custos.
Este padrão ajuda você a integrar a Identidade de Pods do Amazon EKS com o KEDA. Ele mostra como você pode usar a conta de serviço keda-operator e delegar a autenticação com TriggerAuthentication. Também descreve como configurar uma relação de confiança entre um perfil do IAM para o operador do KEDA e um perfil do IAM para a aplicação. Essa relação de confiança permite que o KEDA monitore mensagens nas filas de eventos e ajuste a escala para os objetos do Kubernetes de destino.
Pré-requisitos e limitações
Pré-requisitos
AWS Command Line Interface (AWS CLI) versão 2.13.17 ou posterior, instalado
Python versão 3.11.5 ou posterior, instalado
AWS SDK para Python (Boto3) versão 1.34.135 ou posterior, instalado
Helm versão 3.12.3 ou posterior, instalado
kubectl versão 1.25.1 ou posterior, instalado
Docker Engine versão 26.1.1 ou posterior, instalado
Um cluster do Amazon EKS versão 1.24 ou posterior, criado
Pré-requisitos para criar o agente da Identidade de Pods do Amazon EKS, atendidos
Limitações
É necessário que você estabeleça uma relação de confiança entre o perfil
keda-operatore o perfilkeda-identity. As instruções são fornecidas na seção Épicos deste padrão.
Arquitetura
Neste padrão, você criará os seguintes recursos AWS:
Repositório do Amazon Elastic Container Registry (Amazon ECR): neste padrão, esse repositório se chama
keda-pod-identity-registry. Esse repositório privado é usado para armazenar imagens do Docker da aplicação de exemplo.Fila do Amazon Simple Queue Service (Amazon SQS): neste padrão, essa fila se chama
event-messages-queue. A fila funciona como um buffer de mensagens que coleta e armazena as mensagens recebidas. O KEDA monitora as métricas da fila, como contagem de mensagens ou comprimento da fila, e escala automaticamente a aplicação com base nessas métricas.Perfil do IAM para a aplicação: neste padrão, esse perfil se chama
keda-identity. O perfilkeda-operatorassume esse perfil. Esse perfil permite o acesso à fila do Amazon SQS.Perfil do IAM para o operador do KEDA: neste padrão, esse perfil se chama
keda-operator. O operador do KEDA usa esse perfil para fazer as chamadas da API da AWS necessárias. Esse perfil tem permissões para assumir o perfilkeda-identity. Devido à relação de confiança entre okeda-operatore os perfiskeda-identity, o perfilkeda-operatortem permissões do Amazon SQS.
Por meio dos recursos personalizados TriggerAuthentication e ScaledObject do Kubernetes, o operador usa o perfil keda-identity para se conectar a uma fila do Amazon SQS. Com base no tamanho da fila, o KEDA escala automaticamente a implantação da aplicação. Ele adiciona um pod para cada cinco mensagens não lidas na fila. Na configuração padrão, se não houver mensagens não lidas na fila do Amazon SQS, a escala da aplicação é reduzida verticalmente para zero pods. O operador do KEDA monitora a fila em um intervalo especificado.
A imagem a seguir mostra como você usa a Identidade de Pods do Amazon EKS para fornecer ao perfil keda-operator acesso seguro à fila do Amazon SQS.

O diagrama mostra o seguinte fluxo de trabalho:
Você instala o agente da Identidade de Pods do Amazon EKS no cluster do Amazon EKS.
Você implanta o operador do KEDA no namespace do cluster do Amazon EKS.
Você cria os perfis do IAM
keda-operatorekeda-identityna conta de destino Conta da AWS.Você estabelece uma relação de confiança entre os perfis do IAM.
Você implanta a aplicação no namespace
security.O operador do KEDA enfileira as mensagens em uma fila do Amazon SQS.
O KEDA inicia o HPA, que escala automaticamente a aplicação com base no tamanho da fila.
Ferramentas
Serviços da AWS
O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o Kubernetes na AWSsem precisar instalar e manter seus próprios nós ou painel de controle do Kubernetes.
OAWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos AWS controlando quem está autenticado e autorizado a usá-los.
O Amazon Simple Queue Service (Amazon SQS) fornece uma fila hospedada segura, durável e disponível que ajuda a integrar e desacoplar sistemas e componentes de software distribuídos.
Outras ferramentas
O KEDA
é um autoescalador baseado no Kubernetes orientado por eventos.
Repositório de código
O código para este padrão está disponível no repositório Event-driven auto scaling using EKS Pod Identity and KEDA
Práticas recomendadas
Convém seguir estas práticas recomendadas:
Épicos
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Crie o perfil do IAM para o operador do KEDA. |
| Administrador da AWS |
Crie um perfil do IAM para a aplicação de exemplo. |
| Administrador da AWS |
Crie uma fila do Amazon SQS. |
| AWS geral |
Crie um repositório do Amazon ECR. |
| AWS geral |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Implante o agente da Identidade de Pods do Amazon EKS. | Para o cluster de destino do Amazon EKS, configure o agente da Identidade de Pods do Amazon EKS. Siga as instruções em Configurar o atendente da Identidade de Pods do Amazon EKS na documentação do Amazon EKS. | AWS DevOps |
Implante o KEDA. |
| Engenheiro de DevOps |
Atribua o perfil do IAM à conta de serviço do Kubernetes. | Siga as instruções em Atribuir um perfil do IAM a uma conta de serviço do Kubernetes na documentação do Amazon EKS. Use os seguintes valores:
| AWS DevOps |
Crie o namespace. | Insira o seguinte comando para criar um namespace
| Engenheiro de DevOps |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Clone os arquivos da aplicação. | Insira o seguinte comando para clonar o repositório Event-driven auto scaling using EKS Pod Identity and KEDA repository
| Engenheiro de DevOps |
Crie a imagem do Docker. |
| Engenheiro de DevOps |
Envie a imagem do Docker para o Amazon ECR. |
notaVocê pode encontrar comandos push navegando até a página do repositório do Amazon ECR e, em seguida, escolhendo Visualizar comandos push. | Engenheiro de DevOps |
Implante a aplicação de exemplo. |
| Engenheiro de DevOps |
Atribua o perfil do IAM à conta de serviço da aplicação. | Siga uma destas etapas para associar o perfil
| Engenheiro de DevOps |
Implante |
| Engenheiro de DevOps |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Envie mensagens para a fila do Amazon SQS. |
| Engenheiro de DevOps |
Monitore os pods de aplicação. |
| Engenheiro de DevOps |
Solução de problemas
| Problema | Solução |
|---|---|
O operador do KEDA não pode escalar a aplicação. | Insira o seguinte comando para verificar os logs do perfil do IAM
Se houver um código de resposta
Se houver um erro
|
Recursos relacionados
Configurar o atendente da Identidade de Pods do Amazon EKS na documentação do Amazon EKS.
Deploying KEDA
(documentação do KEDA) ScaledObject specification
(documentação do KEDA) Authentication with TriggerAuthentication
(documentação do KEDA)