Como soluciono problemas ao criar um perfil no AWS Fargate?

Data da última atualização: 04/11/2021

Tenho dúvidas sobre a criação de um perfil no AWS Fargate. Ou estou tendo problemas para criar um perfil no AWS Fargate. Como posso solucionar isso?

Breve descrição

Um perfil do Fargate é um mecanismo para especificar quais pods devem ser agendados em nós do Fargate em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS).

Um perfil do Fargate tem seletores que são combinados com todos os arquivos YAML de especificação de pod de entrada. Se a correspondência for bem-sucedida e as considerações do AWS Fargate forem atendidas, o pod será agendado nos nós do Fargate usando sub-redes e a função do AWS Identity and Access Management (IAM) especificada no perfil do Fargate.

Algumas das regras de posicionamento do pod são as seguintes:

  • Se você configurou o namespace e os rótulos de correspondência para os seletores de pod:
    O fluxo de trabalho do Fargate considera que seu pod corresponde a um perfil Fargate somente se as condições (namespace e rótulos) corresponderem à especificação do pod.
  • Se você especificou vários seletores de pod em um único perfil do Fargate:
    Quando um pod corresponde a um desses seletores, ele é agendado pelo agendador de fargate em um nó Fargate usando dados do perfil Fargate correspondente.
  • Se uma especificação de pod corresponder a vários perfis do Fargate:
    O pod é programado de acordo com um perfil Fargate aleatório, a menos que a seguinte anotação seja especificada na especificação do pod: eks.amazonaws.com/fargate-profile:<fp_name>.

Observe os seguintes limites ao criar um perfil no Fargate:

  • Você pode criar até dez perfis no Fargate por cluster.
  • Você pode ter até cinco seletores por perfil no Fargate.
  • Você pode ter até cinco pares de etiquetas por seletor.

Resolução

A seguir estão os cenários e problemas comuns encontrados ao criar um perfil no Fargate:

Como posso criar um perfil do Fargate para agendar pods nos nós do Fargate?

Você pode usar o console do Amazon EKS, a AWS Command Line Interface (AWS CLI), o SDK ou a API (Cloudformation/EKSCTL, etc.) para criar um perfil no Fargate.

Como posso criar um perfil no Fargate usando o AWS CloudFormation?

Você pode usar o tipo de recurso AWS::EKS::FargateProfile CloudFormation para criar um perfil no Fargate.

No entanto, se você não estiver criando grupos de nós do Amazon Elastic Compute Cloud (Amazon EC2) junto com os nós do Fargate, os complementos do coredns terão a seguinte anotação por padrão:

eks.amazonaws.com/compute-type : ec2

Para alterar as anotações do coredns, você deve corrigir sua implementação externamente. Você pode fazer isso no terminal onde gerencia o cluster do EKS. Ou você pode usar um recurso personalizado do CloudFormation para automatizar esse processo com base no seu caso de uso.

Observação: É uma prática recomendada usar o eksctl para criar/atualizar clusters do EKS porque simplifica a administração de recursos de cluster.

Qual é a função de execução do pod que deve ser incluída no perfil Fargate?

A função de execução do pod é uma função do IAM usada pelo nó do Fargate para fazer chamadas de API da AWS. Isso inclui chamadas feitas para buscar imagens do Amazon Elastic Container Registry (Amazon ECR), como VPC CNI, CoreDNS e assim por diante. A política gerenciada AmazonEKSFargatePodExecutionRolePolicy deve ser anexada a essa função.

O Kubelet no nó Fargate usa essa função do IAM para se comunicar com o servidor da API. Essa função deve ser incluída no configmap aws-auth para que o kubelet possa se autenticar com o servidor de API. Quando você cria um perfil no Fargate, o fluxo de trabalho do Fargate adiciona automaticamente essa função ao configmap aws-auth do cluster.

Se os nós do Fargate estiverem aparecendo como 'Não prontos', certifique-se de que a função de execução do pod esteja incluída no aws-auth.

Veja a seguir um exemplo de snippet do aws-auth mapRoles após a criação de um perfil Fargate com uma função de execução de pod:

mapRoles: |   
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:node-proxier
      rolearn: <Pod_execution_role_ARN>
      username: system:node:{{SessionName}}

Se o aws-auth configmap for alterado após a criação do perfil Fargate, você poderá receber o seguinte aviso ao agendar pods nos nós do Fargate:

Pod provisioning timed out (will retry) for pod: <pod_nginx>

Estou planejando migrar workloads para o EKS Fargate. Como crio sub-redes e grupos de segurança para uso?

Atualmente, o EKS Fargate oferece suporte apenas a sub-redes privadas. Isso significa que não há uma rota padrão para o gateway da Internet nas tabelas de rotas anexadas às sub-redes especificadas no seu perfil do Fargate. Portanto, você pode ter um gateway NAT ou endpoints da VPC configurados para as sub-redes que pretende usar para o perfil do Fargate.

O grupo de segurança do cluster é, por padrão, anexado aos nós do Fargate. Você não precisa provisionar um grupo de segurança especificamente para essa finalidade. Além disso, se estiver usando endpoints da VPC para suas sub-redes, certifique-se de que o cluster esteja com o acesso privado ao endpoint ativado.

Certifique-se de que o gruop de segurança anexado aos endpoints da VPC tenha uma regra de entrada que permite o tráfego da porta HTTPS 443 do CIDR da VPC do cluster.

Estou criando perfis do Fargate usando um provisionador baseado em API, como o Terraform ou o AWS CloudFormation. Por que meus perfis do Fargate estão entrando em estado CREATE_FAILED.

Somente um perfil do Fargate pode ser criado ou excluído por vez. Portanto, se você estiver excluindo um perfil do Fargate, nenhum outro perfil do Fargate poderá ser criado ou excluído ao mesmo tempo.

Ao usar um provisionador baseado em API, como o CloudFormation, certifique-se de que a criação de um perfil do Fargate comece depois que todos os outros perfis do Fargate forem criados com êxito. Você pode criar uma hierarquia semelhante a uma cadeia entre os perfis do Fargate usando o atributo DependsOn para que a criação e a exclusão sejam sequenciais. Se as solicitações não forem sequenciais, você poderá receber um erro semelhante ao seguinte:

Cannot create Fargate Profile <fp_name1> because cluster <cluster_name> currently has Fargate profile <fp_name2> in status CREATING

Posso especificar os recursos (CPU, memória) a serem provisionados para nós Fargate dentro do perfil no Fargate?

Você não pode especificar diretamente a quantidade de recursos a serem provisionados no perfil no Fargate. É uma prática recomendada especificar solicitações de recursos no arquivo YAML de especificação do pod do Fargate. Isso ajuda o fluxo de trabalho do Fargate a atribuir pelo menos essa quantidade de recursos para o pod.

A quantidade de vCPU ou memória que você vê depois de executar o comando kubectl describe node <node_name> pode não ser a mesma que a quantidade de CPU ou memória solicitada para o pod. A quantidade de memória e CPU que o nó tem depende da capacidade disponível no pool de alocação de recursos do Fargate. Você é cobrado de acordo com o valor solicitado dentro das especificações do seu pod. Você não é cobrado pela quantidade de recursos visíveis com o kubectl.

A CPU e a memória são sempre provisionadas e cobradas pelo AWS Fargate como combinações discretas. O valor faturável inclui a utilização por componentes diferentes do pod em execução no nó, como kubelet, kube-proxy e assim por diante. Por exemplo, se você solicitar uma vCPU e oito GB de memória para o pod, será cobrado pela próxima combinação maior de duas vCPUs e nove GB de memória. Isso explica os recursos usados pelo kubelet e outros componentes do Kubernetes no nó. Para obter mais informações, consulte CPU e memória do pod.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?