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
-
kubectlconfigurado para comunicarse con el clúster de destino -
Permisos de IAM: política administrada
CloudWatchAgentServerPolicyadjunta 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
-
Ejecute el siguiente comando para agregar el repositorio.
helm repo add aws-observability \ https://aws-observability.github.io/helm-charts -
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
-
Recupere la URL del emisor de OIDC para su clúster. Reemplace
cluster-namepor el nombre del clúster de Amazon EKS.aws eks describe-cluster \ --namecluster-name\ --query "cluster.identity.oidc.issuer" \ --output text -
Cree el rol de IAM con una política de confianza para IRSA. Sustituya
account-idpor su ID de cuenta de AWS yoidc-idpor el ID de proveedor del OIDC del paso anterior (la parte que viene después dehttps://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" } } }] }' -
Asocie la política administrada por
CloudWatchAgentServerPolicyal 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-namepor el nombre del clúster de Amazon EKS,regionpor la región de AWS yaccount-idpor 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=trueimportante
El parámetro
otelContainerInsights.enabledes 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
-
Compruebe que el estado de lanzamiento de Helm sea
deployed.helm list -n amazon-cloudwatch -
Confirme que el pod del operador se esté ejecutando.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability -
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-agentTodos 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/ |
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
-
Compruebe que cert-manager esté instalado en el clúster.
kubectl get pods -n cert-manager -
Instale el gráfico de Helm con cert-manager activado. Sustituya
cluster-namepor el nombre del clúster de Amazon EKS,regionpor la región de AWS yaccount-idpor 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
-
Actualice el repositorio de Helm para obtener las últimas versiones de los gráficos.
helm repo update -
Ejecute el comando de actualización con los valores que desee. Sustituya
cluster-namepor el nombre del clúster de Amazon EKS,regionpor la región de AWS yaccount-idpor 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 -
Compruebe que la actualización se haya completado correctamente.
helm list -n amazon-cloudwatchEl 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
-
Ejecute el siguiente comando para desinstalar el lanzamiento.
helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch -
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
-
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. -
En el panel de navegación, elija Información de contenedores.
-
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.
-
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 -
Compruebe que el secreto TLS del webhook exista en el espacio de nombres.
kubectl get secrets -n amazon-cloudwatch | grep webhook -
Si utiliza cert-manager, compruebe que el recurso
Certificatetenga el estadoReady.kubectl get certificate -n amazon-cloudwatch -
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.
-
Compruebe el estado de DaemonSet para ver si hay problemas de programación.
kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent -
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 -
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" -
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