Ir para o conteúdo

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

7 minuto de leitura
0

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

Resolução

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

Antes de começar, certifique-se de atender aos pré-requisitos do Container Insights no CloudWatch. Em clusters do AWS Fargate, você deve definir um Perfil do Fargate para programar pods. Além disso, o perfil do Identity and Access Management (IAM) do Amazon EKS Pod deve permitir que componentes executados na infraestrutura do Fargate façam chamadas para as APIs da AWS. Por exemplo, o perfil do IAM deve ser capaz de extrair imagens de contêiner do Amazon ECR.

Use o agente do CloudWatch para configurar as métricas do Container Insights em seu cluster do EKS

O agente do CloudWatch cria um grupo de logs chamado aws/containerinsights/Cluster_Name/performance e, em seguida, envia os eventos de logs de desempenho para o grupo de logs. 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, você implanta a imagem do contêiner como um usuário anônimo.

Observação: o Docker pode limitar o número de imagens que é possível extrair.

Para usar o agente do CloudWatch para configurar o Container Insights, conclua as etapas a seguir:

  1. Execute o comando a seguir para criar um namespace amazon-cloudwatch:

    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. Execute o comando a seguir para criar 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. Execute o comando a seguir para criar um configmap como um 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 Etapa 3: Criar um ConfigMap para o atendente do CloudWatch.

  4. Execute o comando a seguir para implantar o DaemonSet 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-daemonset.yaml
  5. (Opcional) Execute o seguinte comando para aplicar patch no DaemonSet do cloudwatch-agent para que ele extraia o agente do CloudWatch do ECR:

    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 agente do CloudWatch no 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 cloudwatch-agent/cloudwatch-agent.

  6. Em perfis do IAM para contas de serviço, crie um provedor OIDC e um perfil e uma política do IAM. Em seguida, execute o comando a seguir para associar 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 pelo ID da sua conta e IAM_ROLE_NAME pelo perfil do IAM que você usa nas contas de serviço.

Solucione problemas com o agente do CloudWatch

Conclua as etapas a seguir:

  1. Execute o comando a seguir para recuperar a lista de pods:

    kubectl get pods -n amazon-cloudwatch
  2. Execute o comando a seguir para verificar os eventos na parte inferior da saída:

    kubectl describe pod pod-name -n amazon-cloudwatch
  3. Execute o comando a seguir para verificar os logs:

    kubectl logs pod-name -n amazon-cloudwatch
  4. Se você vir um erro CrashLoopBackOff no agente do CloudWatch, confirme se você configurou corretamente suas permissões do IAM.

Exclua o agente do CloudWatch

Execute o comando a seguir para excluir o agente do CloudWatch:

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: se você excluir o namespace, os recursos associados também serão excluídos.

Use o Distro para OpenTelemetry para configurar as métricas do Container Insights em seu cluster do EKS

O AWS Distro para OpenTelemetry cria um grupo de logs chamado aws/containerinsights/Cluster_Name/performance e, em seguida, envia os eventos de logs de desempenho para o grupo de logs.

Conclua as etapas a seguir:

  1. Execute o comando a seguir para implantar o AWS OpenTelemetry Collector como um DaemonSet:

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

    Observação: para obter mais informações, consulte Container Insights EKS infrastructure metrics (Métricas de infraestrutura do EKS do Container Insights).

  2. Execute o comando a seguir para confirmar se o coletor está em execução:

    kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks
  3. (Opcional) Execute o seguinte comando para aplicar patch no DaemonSet aws-otel-eks-ci para que ele extraia a imagem do Docker aws-otel-collector no ECR:

    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 agente do CloudWatch no 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.

  4. (Opcional) Em perfis do IAM para contas de serviço, crie um provedor OIDC e um perfil e uma política do IAM. Em seguida, execute o comando a seguir para associar 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 pelo ID da sua conta e IAM_ROLE_NAME pelo perfil do IAM que você usa nas contas de serviço.

Exclua o Distro para OpenTelemetry

Execute o seguinte comando para excluir o Distro para OpenTelemetry:

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

Use o Distro para OpenTelemetry para configurar as métricas do Container Insights em um cluster do EKS Fargate

Em aplicações executadas no EKS e no Fargate, é possível usar o Distro para OpenTelemetry para configurar o Container Insights.<br id=hardline_break/> O AWS OpenTelemetry Collector envia as seguintes métricas ao CloudWatch para cada workload executado 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

O AWS OpenTelemetry Collector coleta cada métrica sob o namespace CloudWatch chamado ContainerInsights. No console do CloudWatch, clique em Métricas e, em seguida, em Todas as métricas. É ir até ContainerInsights em Namespace personalizado.

Cada métrica está associada aos seguintes conjuntos de dimensões:

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

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

Para implantar o Distro para OpenTelemetry em seu EKS Fargate, conclua as etapas a seguir:

  1. Crie um namespace chamado fargate-container-insights.

  2. Use o seguinte script para criar 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 exige eksctl:

    #!/bin/bashCLUSTER_NAME=YOUR-EKS-CLUSTER-NAMEREGION=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
    kubectl create ns fargate-container-insights
    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.

  3. Execute o comando a seguir para implantar o AWS OpenTelemetry Collector como um StatefulSet do Kubernetes:

    ClusterName= your-cluster-name Region= your-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: substitua your-cluster-name pelo nome do seu cluster e your-cluster-region pela região em que seu cluster está localizado. Certifique-se de ter um perfil do Fargate correspondente para provisionar os pods StatefulSet no Fargate.

  4. Execute o comando a seguir para verificar se o pod do Distro para Open Telemetry Collector está em execução:

    kubectl get pods -n fargate-container-insights
  5. (Opcional) Execute o comando a seguir para aplicar patch no StatefulSet adot-collector para que ele extraia a imagem do Docker aws-otel-collector no ECR:

    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"}]}}}}'

Exclua o Distro para OpenTelemetry

Execute o seguinte comando para excluir o Distro para OpenTelemetry:

eksctl delete iamserviceaccount --cluster CLUSTER_NAME --name adot-collector
ClusterName= your-cluster-name Region= your-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 -

Observação: substitua your-cluster-name pelo nome do seu cluster e your-cluster-region pela região em que seu cluster está localizado.