View a markdown version of this page

Implementación de Información de contenedores de OTel con Helm - Amazon CloudWatch

Implementación de Información de contenedores de OTel con Helm

El gráfico de Helm de Observabilidad de Amazon CloudWatch ofrece una opción de implementación flexible para Información de contenedores de OTel. Instala el agente de CloudWatch (basado en OTel) con el receptor de registro de archivos de OpenTelemetry para la recopilación de registros. El gráfico de Helm se encuentra en https://github.com/aws-observability/helm-charts.

Utilice el gráfico de Helm cuando necesite una o más de las siguientes capacidades:

  • Control preciso sobre la configuración de los agentes

  • Recopilación de registros nativa de OTel mediante el receptor de registros de archivos (sin dependencia de Fluent Bit)

  • Administración personalizada de certificados TLS a través de cert-manager

  • Clústeres de Kubernetes que no pertenecen a EKS (ROSA, Kubernetes autoadministrado)

  • Flujos de trabajo de GitOps con ArgoCD o Flux

Requisitos previos

Antes de implementar Información de contenedores de OTel con Helm, asegúrese de satisfacer los siguientes requisitos.

  • Un clúster de Amazon EKS existente que ejecuta la versión 1.28 de Kubernetes o una posterior

  • Helm versión 3.9 o posterior

  • kubectl configurado para comunicarse con el clúster de destino

  • Permisos de IAM: política administrada CloudWatchAgentServerPolicy adjunta al rol de agente

  • Un proveedor de OpenID Connect (OIDC) configurado para roles de IAM para cuentas de servicio (IRSA)

  • Acceso de salida a Internet desde el clúster a los puntos de conexión de CloudWatch

Instalar gráfico de Helm

Complete los siguientes pasos para implementar Información de contenedores de OTel mediante el gráfico de Helm.

Paso 1: adición del repositorio de Helm

Agregue el repositorio de gráficos de Helm de Observabilidad de AWS a su configuración local de Helm.

Adición del repositorio de Helm
  1. Ejecute el siguiente comando para agregar el repositorio.

    helm repo add aws-observability \ https://aws-observability.github.io/helm-charts
  2. Actualice el repositorio para obtener las últimas versiones de los gráficos.

    helm repo update

Paso 2: Crear el rol de IAM

Cree un rol de IAM que permita que el agente de CloudWatch envíe datos a CloudWatch. Este rol usa IRSA para asociar los permisos de IAM a una cuenta de servicio de Kubernetes.

Creación del rol de IAM para el agente de CloudWatch
  1. Recupere la URL del emisor de OIDC para su clúster. Reemplace cluster-name por el nombre del clúster de Amazon EKS.

    aws eks describe-cluster \ --name cluster-name \ --query "cluster.identity.oidc.issuer" \ --output text
  2. Cree el rol de IAM con una política de confianza para IRSA. Sustituya account-id por su ID de cuenta de AWS y oidc-id por el ID de proveedor del OIDC del paso anterior (la parte que viene después de https://oidc.eks.region.amazonaws.com/id/).

    aws iam create-role \ --role-name EKS-CW-Observability-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/oidc-id:sub": "system:serviceaccount:amazon-cloudwatch:cloudwatch-agent" } } }] }'
  3. Asocie la política administrada por CloudWatchAgentServerPolicy al rol.

    aws iam attach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

Paso 3: instalación del gráfico

Instale el gráfico de Helm de Observabilidad de Amazon CloudWatch con Información de contenedores de OTel activado.

Instalación del gráfico de Helm
  • Ejecute el siguiente comando. Sustituya cluster-name por el nombre del clúster de Amazon EKS, region por la región de AWS y account-id por el ID de cuenta de AWS.

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
    importante

    El parámetro otelContainerInsights.enabled es obligatorio. Información de contenedores de OTel no está activado de forma predeterminada.

Paso 4: verificar las instalaciones

Confirme que la versión de Helm y los pods de agente se hayan implementado correctamente.

Verificación de la instalación de Helm
  1. Compruebe que el estado de lanzamiento de Helm sea deployed.

    helm list -n amazon-cloudwatch
  2. Confirme que el pod del operador se esté ejecutando.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability
  3. Confirme que los pods de agentes de CloudWatch estén en ejecución en todos los nodos.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    Todos los pods de agentes deben mostrar el estado Running.

Opciones de configuración clave

En las siguientes tablas se describen los valores clave del gráfico de Helm que se pueden configurar. Transfiera estos valores mediante la marca --set o un archivo values.yaml personalizado.

Configuración del clúster

Parámetro Predeterminado Descripción
clusterName Nombre del clúster de Amazon EKS. Obligatorio.
region La región de AWS donde se ejecuta el clúster. Obligatorio.
otelContainerInsights.enabled false Activa Información de contenedores de OTel con el receptor de registro de archivos.

Registros de contenedores (receptor de registros de archivos de OTel)

Parámetro Predeterminado Descripción
containerLogs.enabled true Permite la recopilación de registros de contenedores mediante el receptor de registros de archivos de OTel.
containerLogs.logGroupName /aws/containerinsights/cluster-name/application El nombre del grupo de registro de Registros de CloudWatch para los registros de contenedores.
containerLogs.logRetentionDays 7 El número de días que se retienen los registros de contenedores en Registros de CloudWatch.

Agente (métricas)

Parámetro Predeterminado Descripción
agent.enabled true Active el DaemonSet del agente de CloudWatch para la recopilación de métricas.
agent.serviceAccount.name cloudwatch-agent El nombre de la cuenta de servicio de Kubernetes para el agente.
agent.resources.requests.cpu 100m La solicitud de CPU para el contenedor de agentes.
agent.resources.requests.memory 128Mi La solicitud de memoria para el contenedor de agentes.
agent.resources.limits.cpu 200m El límite de CPU para el contenedor de agentes.
agent.resources.limits.memory 256Mi El límite de memoria para el contenedor de agentes.

Supervisión de la GPU

Parámetro Predeterminado Descripción
agent.config.logs.metrics_collected.kubernetes.enhanced_container_insights true Activa las métricas de Información de contenedores mejorada, incluidas las métricas de la GPU.
dcgmExporter.enabled false Activa el exportador de DCGM para las métricas de GPU NVIDIA. Requiere nodos de GPU NVIDIA.
neuronMonitor.enabled false Activa el supervisor de Neuron para las métricas de AWS Inferentia y Trainium.

Administración de certificados TLS

El operador de Observabilidad de CloudWatch requiere certificados TLS para la comunicación mediante webhooks. De forma predeterminada, el gráfico genera certificados autofirmados. Puede usar cert-manager para administrar certificados automáticamente.

Certificados autofirmados (valor predeterminado)

De forma predeterminada, el gráfico de Helm genera una CA autofirmada y emite certificados desde esa CA. No se necesita configuración adicional. El gráfico rota automáticamente estos certificados durante las actualizaciones.

Integración de cert-manager

Puede usar cert-manager para automatizar la emisión y renovación de certificados. Este enfoque resulta útil cuando su organización requiere certificados firmados externamente o una administración centralizada de certificados.

Configuración de la integración de cert-manager
  1. Compruebe que cert-manager esté instalado en el clúster.

    kubectl get pods -n cert-manager
  2. Instale el gráfico de Helm con cert-manager activado. Sustituya cluster-name por el nombre del clúster de Amazon EKS, region por la región de AWS y account-id por el ID de cuenta de AWS.

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true \ --set admissionWebhooks.certManager.enabled=true

Cuando cert-manager está activado, el gráfico crea un recurso Certificate que cert-manager utiliza para emitir y administrar automáticamente el certificado TLS del webhook.

nota

También puede usar cert-manager con emisores externos como HashiCorp Vault. Para configurar un emisor externo, configure admissionWebhooks.certManager.issuerRef.name y admissionWebhooks.certManager.issuerRef.kind para que coincidan con el emisor de cert-manager.

Actualización del gráfico

Actualice el gráfico de Helm para aplicar nuevos valores de configuración o para actualizarlo a una versión más reciente del gráfico.

Actualización del gráfico de Helm
  1. Actualice el repositorio de Helm para obtener las últimas versiones de los gráficos.

    helm repo update
  2. Ejecute el comando de actualización con los valores que desee. Sustituya cluster-name por el nombre del clúster de Amazon EKS, region por la región de AWS y account-id por el ID de cuenta de AWS.

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
  3. Compruebe que la actualización se haya completado correctamente.

    helm list -n amazon-cloudwatch

    El número de revisión debe incrementarse y el estado debe ser deployed.

sugerencia

Para evitar perder los valores de configuración durante las actualizaciones, almacene los valores personalizados en un archivo values.yaml y páselo con la marca -f values.yaml.

Desinstalación del gráfico

Para eliminar Información de contenedores de OTel del clúster, desinstale la versión de Helm.

Desinstalación del gráfico de Helm
  1. Ejecute el siguiente comando para desinstalar el lanzamiento.

    helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch
  2. Si lo desea, elimine el espacio de nombres si ya no lo necesita.

    kubectl delete namespace amazon-cloudwatch

Tras desinstalar el gráfico de Helm, la configuración del rol de IAM y del proveedor de OIDC permanecerán en su cuenta de AWS. Elimine estos recursos por separado si ya no los necesita.

aws iam detach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws iam delete-role \ --role-name EKS-CW-Observability-Role

Verificación de datos en CloudWatch

Tras instalar el gráfico de Helm, los datos de Información de contenedores aparecen en CloudWatch en un plazo de 3 a 5 minutos.

Comprobación de métricas

Comprobación de métricas en CloudWatch
  1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

  2. En el panel de navegación, elija Información de contenedores.

  3. Compruebe que el clúster aparezca en la lista de clústeres y que las métricas de infraestructura se estén rellenando.

Comprobar los registros de

Para comprobar que los grupos de registro existan en el clúster, ejecute el siguiente comando. Reemplace cluster-name por el nombre del clúster de Amazon EKS.

aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].logGroupName" \ --output table

Solución de problemas

Utilice la siguiente guía para resolver problemas comunes al implementar Información de contenedores de OTel con Helm.

Pod de operador en CrashLoopBackOff

Síntoma: cuando ejecuta kubectl get pods -n amazon-cloudwatch, el pod del operador muestra el estado CrashLoopBackOff.

Causa: el pod del operador no se puede iniciar debido a problemas con el certificado TLS o a permisos insuficientes.

Solución: siga estos pasos para resolver este problema.

  1. Compruebe los registros de los pods del operador para ver si hay errores relacionados con los certificados.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50
  2. Compruebe que el secreto TLS del webhook exista en el espacio de nombres.

    kubectl get secrets -n amazon-cloudwatch | grep webhook
  3. Si utiliza cert-manager, compruebe que el recurso Certificate tenga el estado Ready.

    kubectl get certificate -n amazon-cloudwatch
  4. Si falta el certificado o no es válido, desinstale y vuelva a instalar el gráfico para volver a generar los certificados.

    helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch

Los pods de agentes no están programados en todos los nodos

Síntoma: el DaemonSet del agente muestra menos pods que el número de nodos del clúster.

Causa: los taints de nodos, las restricciones de recursos o los selectores de nodos impiden que los pods de agentes se programen en determinados nodos.

Solución: siga estos pasos para resolver este problema.

  1. Compruebe el estado de DaemonSet para ver si hay problemas de programación.

    kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent
  2. Compruebe si hay pods no programables y consulte sus eventos.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running
  3. Si los nodos tienen taints, agregue tolerancias a los valores del gráfico de Helm. Por ejemplo, para tolerar todos los taints, actualice el gráfico con la siguiente marca.

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists"
  4. Compruebe que los pods de agentes se ejecuten ahora en todos los nodos.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide