Como faço para ativar as métricas do Container Insights em um cluster do Amazon EKS?

8 minuto de leitura
0

Quero configurar o Amazon CloudWatch Container Insights para ver minhas métricas de cluster do Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Quando você usa o Container Insights com o Amazon EKS, o Container Insights usa uma versão em contêiner do agente do CloudWatch para encontrar todos os contêineres em execução em um cluster. O Container Insights também usa o Coletor do AWS Distro para OpenTelemetry (ADOT) para encontrar contêineres em um cluster. Em seguida, o Container Insights coleta dados de desempenho em cada camada da pilha de desempenho, como os eventos de registro de desempenho que usam um formato métrico incorporado. Depois, o Container Insights envia esses dados para o CloudWatch Logs no grupo de logs /aws/containerinsights/cluster-name/performance, onde o CloudWatch cria métricas agregadas nos níveis de cluster, nó e pod. O Container Insights também permite a coleta de métricas de clusters que são implantados no AWS Fargate para Amazon EKS. Para obter mais informações, consulte Usar o Container Insights.

Observação: o Container Insights é compatível somente com instâncias Linux. A Amazon fornece uma imagem de contêiner do agente CloudWatch no Amazon Elastic Container Registry (Amazon ECR). Para obter mais informações, consulte cloudwatch-agent/cloudwatch-agent no Amazon ECR.

Resolução

Pré-requisitos

  • Seu cluster do Amazon EKS está sendo executado com nós no estado Pronto e o comando kubectl está instalado e em execução.
  • O CloudWatchAgentServerPolicy gerenciado pelo AWS Identity and Access Management (IAM) ativa seus nós de processamento do Amazon EKS para enviar métricas e registros para o CloudWatch. Para ativar seus nós de processamento, anexe uma política ao perfil do IAM deles. Ou use um perfil do IAM para contas de serviço do cluster e anexe a política a essa função. Para obter mais informações, consulte Perfis do IAM para contas de serviço.
  • Você está executando um cluster compatível com a versão 1.18 ou superior do Kubernetes. Isso é um requisito do Container Insights para o EKS Fargate. Além disso, certifique-se de definir um perfil do Fargate para agendar pods no Fargate.
  • O perfil do IAM do pod do Amazon EKS deve permitir que os componentes executados na infraestrutura do Fargate façam chamadas para as APIs da AWS em seu nome. Por exemplo, o perfil do IAM deve ser capaz de extrair imagens de contêineres do Amazon ECR.

Usar o agente do CloudWatch para configurar as métricas do Container Insights em seu cluster do EC2

O agente do CloudWatch ou ADOT primeiro cria um grupo de registros chamado aws/containerinsights/Cluster_Name/performance e, em seguida, envia os eventos de logs de desempenho para esse grupo de registros. Ao configurar o Container Insights para coletar métricas, você deve implantar a imagem do contêiner do agente do CloudWatch como um DaemonSet do Docker Hub. Por padrão, isso é feito como usuário anônimo. Essa extração pode estar sujeita a um limite de taxa.

1.    Se você não tiver um namespace amazon-cloudwatch, crie um:

kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

2.    Crie uma conta de serviço para o agente do CloudWatch chamada cloudwatch-agent:

kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml

3.    Crie um configmap como arquivo de configuração para o agente do CloudWatch:

ClusterName=<my-cluster-name>curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml | sed 's/cluster_name/'${ClusterName}'/' | kubectl apply -f -

Observação: substitua my-cluster-name pelo nome do seu cluster do EKS. Para obter mais informações, consulte Criar um ConfigMap para o agente do CloudWatch.

4.    Implante o DaemonSet docloudwatch-agent:

kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml

(Opcional) Para retirar o agente do CloudWatch do Amazon Elastic Container Registry, corrija o DaemonSet do cloudwatch-agent:

kubectl patch ds cloudwatch-agent -n amazon-cloudwatch -p \ '{"spec":{"template":{"spec":{"containers":[{"name":"cloudwatch-agent","image":"public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest"}]}}}}'

Observação: a imagem do Docker do Cloudwatch-agent no Amazon ECR é compatível com as arquiteturas ARM e AMD64. Substitua a tag de imagem mais recente com base na versão e na arquitetura da imagem. Para obter mais informações, consulte as tags de imagens cloudwatch-agent no Amazon ECR.

5.    Para Perfis do IAM para contas de serviço, crie um provedor do OIDC e um perfil e uma política do IAM. Em seguida, associe o perfil do IAM à conta de serviço cloudwatch-agent:

kubectl annotate serviceaccounts cloudwatch-agent -n amazon-cloudwatch "eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME"

Observação: substitua ACCOUNT_ID pela ID da sua conta e IAM_ROLE_NAME pelo perfil do IAM que você usa para as contas de serviço.

Solucionar problemas com o agente do CloudWatch

1.    Para recuperar a lista de pods, execute este comando:

kubectl get pods -n amazon-cloudwatch

2.    Para verificar os eventos na parte inferior da saída, execute este comando:

kubectl describe pod pod-name -n amazon-cloudwatch

3.    Verifique os logs:

kubectl logs pod-name -n amazon-cloudwatch

4.    Se aparecer um erro CrashLoopBackOff no agente do CloudWatch, certifique-se de que suas permissões do IAM estejam definidas corretamente. Para obter mais informações, consulte Verificar pré-requisitos.

Excluir o agente do CloudWatch

Para excluir o agente do CloudWatch, execute este comando:

kubectl delete -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

Observação: a exclusão do namespace também exclui os recursos associados.

Use o ADOT para configurar as métricas do Container Insights em seu cluster do EC2

1.    Para implantar o ADOT Collector como DaemonSet, execute o seguinte comando:

curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml | kubectl apply -f -

Para obter mais informações, consulte Métricas de infraestrutura do EKS do Container Insights.

2.    Para confirmar se o coletor está em execução, execute este comando:

kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks

3.    (Opcional) Por padrão, a imagem aws-otel-collector é extraída do Docker Hub como usuário anônimo. Essa extração pode estar sujeita a um limite de taxa. Para extrair a imagem do Docker aws-otel-collector no Amazon ECR, corrija o DaemonSet aws-otel-eks-ci:

kubectl patch ds aws-otel-eks-ci -n aws-otel-eks -p \'{"spec":{"template":{"spec":{"containers":[{"name":"aws-otel-collector","image":"public.ecr.aws/aws-observability/aws-otel-collector:latest"}]}}}}'

Observação: a imagem do Docker do Cloudwatch-agent no Amazon ECR é compatível com as arquiteturas ARM e AMD64. Substitua a tag de imagem mais recente com base na versão e na arquitetura da imagem. Para obter mais informações, consulte as tags de imagens cloudwatch-agent no Amazon ECR.

4.    (Opcional) Para Perfis do IAM para contas de serviço, crie um provedor do OIDC e um perfil e uma política do IAM. Em seguida, associe o perfil do IAM à conta de serviço aws-otel-sa.

kubectl annotate serviceaccounts aws-otel-sa -n aws-otel-eks "eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME"

Observação: substitua ACCOUNT_ID pela ID da sua conta e IAM_ROLE_NAME pelo perfil do IAM que você usa para as contas de serviço.

Excluir ADOT

Para excluir o ADOT, execute este comando:

curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml |kubectl delete -f -

Use o ADOT para configurar métricas do Container Insights em um cluster do EKS Fargate

Para aplicativos executados no Amazon EKS e no AWS Fargate, você pode usar o ADOT para configurar o Container Insights. A arquitetura de rede do EKS Fargate não permite que os pods cheguem diretamente ao kubelet do trabalhador para recuperar métricas de recursos. O ADOT Collector chama primeiro o servidor da API do Kubernetes para fazer proxy da conexão com o kubelet em um nó de processamento. Em seguida, ele coleta as métricas do kubelet Advisor para workloads desse nó.

O ADOT Collector envia as seguintes métricas ao CloudWatch para cada workload executada no EKS Fargate:

  • pod_cpu_utilization_over_pod_limit
  • pod_cpu_usage_total
  • pod_cpu_limit
  • pod_memory_utilization_over_pod_limit
  • pod_memory_working_set
  • pod_memory_limit
  • pod_network_rx_bytes
  • pod_network_tx_bytes

Cada métrica está associada a esses conjuntos de dimensões e é coletada no namespace do CloudWatch chamado ContainerInsights:

  • ClusterName, LaunchType
  • ClusterName, Namespace, LaunchType
  • ClusterName, Namespace, PodName, LaunchType

Para obter mais informações, consulte Container Insights EKS Fargate.

Para implantar o ADOT em seu EKS Fargate, conclua estas etapas:

1.    Associe uma conta de serviço do Kubernetes a um perfil do IAM. Crie um perfil do IAM chamado EKS-ADOT-ServiceAccount-Role associado a uma conta de serviço do Kubernetes chamada adot-collector. O script auxiliar a seguir requer eksctl:

#!/bin/bashCLUSTER_NAME=YOUR-EKS-CLUSTER-NAME
REGION=YOUR-EKS-CLUSTER-REGION
SERVICE_ACCOUNT_NAMESPACE=fargate-container-insights
SERVICE_ACCOUNT_NAME=adot-collector
SERVICE_ACCOUNT_IAM_ROLE=EKS-Fargate-ADOT-ServiceAccount-Role
SERVICE_ACCOUNT_IAM_POLICY=arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

eksctl utils associate-iam-oidc-provider \
--cluster=$CLUSTER_NAME \
--approve

eksctl create iamserviceaccount \
--cluster=$CLUSTER_NAME \
--region=$REGION \
--name=$SERVICE_ACCOUNT_NAME \
--namespace=$SERVICE_ACCOUNT_NAMESPACE \
--role-name=$SERVICE_ACCOUNT_IAM_ROLE \
--attach-policy-arn=$SERVICE_ACCOUNT_IAM_POLICY \
--approve

Observação: substitua CLUSTER_NAME pelo nome do seu cluster e REGION pela sua região da AWS.

2.    Para implantar o ADOT Collector como um Kubernetes StatefulSet, execute o seguinte comando:

ClusterName=<my-cluster-name>Region=<my-cluster-region>
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-fargate-container-insights.yaml | sed 's/YOUR-EKS-CLUSTER-NAME/'${ClusterName}'/;s/us-east-1/'${Region}'/' | kubectl apply -f -

Observação: certifique-se de ter um perfil Fargate correspondente para provisionar os pods StatefulSet no AWS Fargate. Substitua my-cluster-name pelo nome do seu cluster e my-cluster-region pela região da AWS em que seu cluster está localizado.

3.    Para verificar se o pod ADOT Collector está em execução, execute o seguinte comando:

kubectl get pods -n fargate-container-insights

4.    (Opcional) Por padrão, a imagem aws-otel-collector é extraída do Docker Hub como usuário anônimo. Essa extração pode estar sujeita a um limite de taxa. Para extrair a imagem do Docker aws-otel-collector no Amazon ECR, corrija o StatefulSet adot-collector:

kubectl patch sts adot-collector -n fargate-container-insights -p \'{"spec":{"template":{"spec":{"containers":[{"name":"adot-collector","image":"public.ecr.aws/aws-observability/aws-otel-collector:latest"}]}}}}'

Excluir ADOT

Para excluir o ADOT, execute este comando:

eksctl delete iamserviceaccount --cluster CLUSTER_NAME --name adot-collector

ClusterName=<my-cluster-name>Region=<my-cluster-region>
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-fargate-container-insights.yaml | sed 's/YOUR-EKS-CLUSTER-NAME/'${ClusterName}'/;s/us-east-1/'${Region}'/' | kubectl delete -f -
AWS OFICIAL
AWS OFICIALAtualizada há 8 meses