Información general

El objetivo de esta sección es documentar aspectos específicos y proporcionar una buena base para la configuración de las principales distribuciones Kubernetes. Estas configuraciones se pueden personalizar para añadir cualquier función de Datadog.

AWS Elastic Kubernetes Service (EKS)

No es necesaria ninguna configuración específica.

En un clúster de EKS, puedes instalar el Operator utilizando Helm o como un complemento EKS.

La siguiente configuración está pensada para funcionar con cualquiera de las dos configuraciones (Helm o complemento EKS) cuando el Agent está instalado en el mismo espacio de nombres que el Datadog Operator.

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    clusterName: <CLUSTER_NAME>
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>

Azure Kubernetes Service (AKS)

Admission Controller

La función opcional Admission Controller requiere una configuración específica para evitar un error al conciliar el webhook.

Recurso Kubernetes del Datadog Agent:

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    clusterName: <CLUSTER_NAME>
    site: <DATADOG_SITE>
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
  override:
    clusterAgent:
      containers:
        cluster-agent:
          env:
            - name: DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS
              value: "true"

Sustituye <DATADOG_SITE> por tu sitio Datadog. Tu sitio es . (Asegúrate de seleccionar el SITIO correcto para tu cuenta a la derecha de esta página.

datadog-values.yaml personalizado:

datadog:
  clusterName: <CLUSTER_NAME>
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>

providers:
  aks:
    enabled: true

La opción providers.aks.enabled establece la variable de entorno necesaria DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS="true".

Rotación de certificados de servicio de Kubelet

Si tu clúster no tiene habilitada la rotación de certificados de servicio de Kubelet, deberás proporcionar una configuración adicional para permitir que el Datadog Agent se conecte al Kubelet. La rotación de certificados de servicio de Kubelet está habilitada en los clústeres Kubernetes v1.27 y posteriores, en grupos de nodos actualizados después de julio de 2025.

Tus nodos tienen esta función activada si tienen la etiqueta (label) kubernetes.azure.com/kubelet-serving-ca=cluster. Comprueba si todos tus nodos tienen esta etiqueta, ejecutando:

kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca

Asegúrate de que todos tus nodos muestran cluster.

Sin la rotación de certificados de servicio de Kubelet

Si la rotación de certificados de servicio de Kubelet no está habilitada, proporciona la siguiente configuración adicional de Kubelet:

Recurso Kubernetes del Datadog Agent:

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    clusterName: <CLUSTER_NAME>
    site: <DATADOG_SITE>
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
    kubelet:
      host:
        fieldRef:
          fieldPath: spec.nodeName
      hostCAPath: /etc/kubernetes/certs/kubeletserver.crt
  override:
    clusterAgent:
      containers:
        cluster-agent:
          env:
            - name: DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS
              value: "true"

datadog-values.yaml personalizado:

datadog:
  clusterName: <CLUSTER_NAME>
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>
  kubelet:
    host:
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
    hostCAPath: /etc/kubernetes/certs/kubeletserver.crt

providers:
  aks:
    enabled: true

En estas versiones del nodo AKS, el certificado Kubelet AKS requiere cambiar el host Kubelet al spec.nodeName y la ubicación hostCAPath del certificado, como se ve en los fragmentos anteriores. Esto permite la verificación TLS. Sin estos cambios, el Agent no puede conectarse al Kubelet.

Una vez habilitada la rotación de certificados de servicio de Kubelet en tu clúster, elimina esta configuración.

Cuando actualices tu clúster AKS, es posible que la función de rotación de certificados de servicio de Kubelet se active automáticamente, lo que puede afectar negativamente a tu Datadog Agent si utilizas la configuración especial anterior para hacer referencia al certificado /etc/kubernetes/certs/kubeletserver.crt. Cuando se activa la rotación de certificados de servicio de Kubelet, este certificado se elimina, lo que causa:

  • En Datadog Operator: El contenedor del Agent se apaga en Error, ya que no puede conectarse al Kubelet, y genera Error while getting hostname, exiting: unable to reliably determine the host name
  • En Helm: El pod del Agent falla al arrancar con el evento de advertencia MountVolume.SetUp failed for volume "kubelet-ca" : hostPath type check failed: /etc/kubernetes/certs/kubeletserver.crt is not a file

En estos casos, elimina las configuraciones adicionales de Kubelet.

Como alternativa, también puedes conectarte al Kubelet sin verificación TLS.

Sin verificación TLS

En algunos clústeres, la resolución DNS de spec.nodeName en pods no funciona en AKS. Esto afecta a:

  • Nodos Windows
  • Nodos Linux, cuando el clúster está configurado en una red virtual que utiliza DNS personalizados

En este caso, utiliza la configuración AKS proporcionada a continuación para definir tlsVerify: false y eliminar cualquier configuración para la ruta del host Kubelet (que por defecto es status.hostIP). No definas la ruta del host Kubelet y tlsVerify: false en la misma configuración.

Recurso Kubernetes del Datadog Agent:

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    clusterName: <CLUSTER_NAME>
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
    kubelet:
      tlsVerify: false
  override:
    clusterAgent:
      containers:
        cluster-agent:
          env:
            - name: DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS
              value: "true"

datadog-values.yaml personalizado:

datadog:
  clusterName: <CLUSTER_NAME>
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>
  kubelet:
    tlsVerify: false

providers:
  aks:
    enabled: true

Google Kubernetes Engine (GKE)

GKE se puede configurar con dos modos de funcionamiento diferentes:

  • Standard (Estándar): tú gestionas la infraestructura subyacente del clúster, proporcionándole flexibilidad a la configuración de tu nodo.
  • Autopilot (Piloto automático): GKE suministra y gestiona la infraestructura subyacente del clúster, incluidos los nodos y los grupos de nodos, lo que te ofrece un clúster optimizado que no necesita de tu intervención.

En función del modo de funcionamiento de tu clúster, el Datadog Agent se debe configurar de diferentes formas.

Standard (Estándar)

A partir del Agent v7.26, no se requiere ninguna configuración específica para GKE (tanto si ejecutas Docker, como si ejecutas containerd).

Nota: Cuando se utiliza COS (Container-Optimized OS), OOM Killbasado en eBPF y los checks TCP Queue Length son compatibles a partir de la versión 3.0.1 de los charts de Helm. Para habilitar estos checks, configura los siguientes parámetros:

  • datadog.systemProbe.enableDefaultKernelHeadersPaths en false.

Autopilot

Autopilot de GKE requiere algunas configuraciones que se muestran a continuación.

Datadog recomienda especificar límites de recursos para el contenedor del Agent. Autopilot establece un límite por defecto relativamente bajo (50m CPU, 100Mi memoria) que puede llevar al contenedor del Agent a un cierre forzoso por error de memoria (OOMKill) rápidamente dependiendo de tu entorno. Si corresponde, también especifica límites de recursos para contenedores de Trace Agent, Process Agent y System-Probe. Además, es posible que quieras crear una clase de prioridad para el Agent para asegurarte de que sea programado.

A partir del Agent 7.65.0+ y la versión 3.113.0+ del Helm chart, Datadog recomienda utilizar datadog.kubelet.useApiServer para que el Agent consulte la lista de pods desde el servidor de API. Evita utilizar el puerto Kubelet de solo lectura obsoleto.

datadog-values.yaml personalizado:

datadog:
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>
  clusterName: <CLUSTER_NAME>

  # The site of the Datadog intake to send Agent data to (example: `us3.datadoghq.com`)
  # Default value is `datadoghq.com' (the US1 site)
  # Documentation: https://docs.datadoghq.com/getting_started/site/
  site: <DATADOG_SITE>

  # This option uses the API server to retrieve the node-level pod list from the API server.
  # This setting is necessary to migrate away from the deprecated read-only kubelet port.
  # Requires Agent 7.65.0+ and Datadog Helm chart version 3.113.0+.
  kubelet:
    useApiServer: true

agents:
  containers:
    agent:
      # resources for the Agent container
      resources:
        requests:
          cpu: 200m
          memory: 256Mi

    traceAgent:
      # resources for the Trace Agent container
      resources:
        requests:
          cpu: 100m
          memory: 200Mi

    processAgent:
      # resources for the Process Agent container
      resources:
        requests:
          cpu: 100m
          memory: 200Mi

    systemProbe:
      # resources for the System Probe container
      resources:
        requests:
          cpu: 100m
          memory: 400Mi

  priorityClassCreate: true

providers:
  gke:
    autopilot: true

Spot Pods y clases de computación

El uso de Spot Pods en clústeres GKE Autopilot introduce contaminaciones en los nodos Spot GKE correspondientes. Cuando se utilizan Spot Pods, se requiere una configuración adicional para proporcionar al Agent DaemonSet una tolerancia coincidente.

agents:
  #(...)
  # agents.tolerations -- Permitir al DaemonSet programar en nodos contaminados (requiere  Kubernetes v1.6 o anteriores)
  tolerations:
  - effect: NoSchedule
    key: cloud.google.com/gke-spot
    operator: Equal
    value: "true"

Del mismo modo, cuando utilices clases de computación GKE Autopilot para ejecutar cargas de trabajo que tengan requisitos de hardware específicos, toma nota de las contaminaciones que GKE Autopilot está aplicando a estos nodos específicos y añade tolerancias coincidentes al Agent DaemonSet. Puedes hacer coincidir las tolerancias en tus pods correspondientes. Por ejemplo, para la clase de computación Scale-Out utiliza una tolerancia como:

agents:
  #(...)
  # agents.tolerations -- Allow the DaemonSet to schedule on tainted nodes (requires Kubernetes >= 1.6)
  tolerations:
  - effect: NoSchedule
    key: cloud.google.com/compute-class
    operator: Equal
    value: Scale-Out

Red Hat OpenShift

OpenShift viene con seguridad reforzada por defecto con SELinux y SecurityContextConstraints (SCC). Como resultado de esto, requiere algunas configuraciones específicas:

  • Acceso SCC elevado para el Node Agent y el Cluster Agent
  • Es posible que los certificados de la API de Kubelet no siempre estén firmados por la CA para clústeres
  • Se requieren tolerancias para programar el Node Agent en los nodos master y infra
  • Se debe establecer el nombre del clúster, ya que no puede recuperarse automáticamente del proveedor de nube
  • (Opcional) Define hostNetwork: true en el Node Agent para permitir que el Agent realice solicitudes a los servicios de metadatos del proveedor de la nube (IMDS).

Esta configuración central es compatible con OpenShift v3.11 y OpenShift v4, pero funciona mejor con OpenShift v4.

Además, la recopilación de logs y APM también tienen requisitos ligeramente diferentes.

El uso de Unix Domain Socket (UDS) para APM y DogStatsD puede funcionar en OpenShift. Sin embargo, Datadog no lo recomienda, ya que requiere permisos privilegiados adicionales y acceso SCC a ambos: tu Datadog Agent y tuu pod de aplicación. Datadog recomienda desactivar la opción UDS para evitarlo, permitiendo que el Admission Controller inyecte la configuración TCP/IP o configuración de servicio adecuada para la conectividad de APM.

Cuando utilices Datadog Operator en OpenShift, Datadog recomienda utilizar el Operator Lifecycle Manager para implementar Datadog Operator desde OperatorHub en tu consola web de clúster de OpenShift. Consulta los pasos de instalación de Operator. La configuración siguiente funciona con esa instalación, que crea el acceso a SCC basado en ClusterRole y ClusterRoleBinding para el datadog-agent-scc de ServiceAccount especificado. Esta configuración del DatadogAgent debe desplegarse en el mismo espacio de nombres que el Datadog Operator.

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
  namespace: openshift-operators # set as the same namespace where the Datadog Operator was deployed
spec:
  features:
    logCollection:
      enabled: true
      containerCollectAll: true
    apm:
      enabled: true
      hostPortConfig:
        enabled: true
      unixDomainSocketConfig:
        enabled: false
    dogstatsd:
      unixDomainSocketConfig:
        enabled: false
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
    clusterName: <CLUSTER_NAME>
    kubelet:
      tlsVerify: false
  override:
    clusterAgent:
      serviceAccountName: datadog-agent-scc
    nodeAgent:
      serviceAccountName: datadog-agent-scc
      hostNetwork: true
      securityContext:
        runAsUser: 0
        seLinuxOptions:
          level: s0
          role: system_r
          type: spc_t
          user: system_u
      tolerations:
        - key: node-role.kubernetes.io/master
          operator: Exists
          effect: NoSchedule
        - key: node-role.kubernetes.io/infra
          operator: Exists
          effect: NoSchedule

Nota: La anulación de nodeAgent.securityContext.seLinuxOptions es necesaria para la recopilación de logs cuando se despliega con el Operator. Si la recopilación de logs no está activada, puedes omitir esta anulación.

La siguiente configuración crea SCC personalizados para las cuentas de servicio del Agent y del Cluster Agent.

datadog-values.yaml personalizado:

datadog:
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>
  clusterName: <CLUSTER_NAME>
  kubelet:
    tlsVerify: false
  apm:
    portEnabled: true
    socketEnabled: false
agents:
  podSecurity:
    securityContextConstraints:
      create: true
  useHostNetwork: true
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/master
      operator: Exists
    - effect: NoSchedule
      key: node-role.kubernetes.io/infra
      operator: Exists
clusterAgent:
  podSecurity:
    securityContextConstraints:
      create: true

Rancher

Las instalaciones de Rancher son similares a las instalaciones Kubernetes estándar, por lo que solo requieren una configuración menor:

  • Las tolerancias son necesarias para programar el Node Agent en los nodos controlplane y etcd.
  • Se debe definir el nombre del clúster, ya que no se puede recuperar automáticamente del proveedor de la nube.

Recurso Kubernetes del Datadog Agent:

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  features:
    logCollection:
      enabled: false
    liveProcessCollection:
      enabled: false
    liveContainerCollection:
      enabled: true
    apm:
      enabled: false
    cspm:
      enabled: false
    cws:
      enabled: false
    npm:
      enabled: false
    admissionController:
      enabled: false
    externalMetricsServer:
      enabled: false
      useDatadogMetrics: false
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
      appKey: <DATADOG_APP_KEY>
    clusterName: <CLUSTER_NAME>
    kubelet:
      tlsVerify: false
  override:
    clusterAgent:
      image:
        name: gcr.io/datadoghq/cluster-agent:latest
    nodeAgent:
      image:
        name: gcr.io/datadoghq/agent:latest
      tolerations:
        - key: node-role.kubernetes.io/controlplane
          operator: Exists
          effect: NoSchedule
        - key: node-role.kubernetes.io/etcd
          operator: Exists
          effect: NoExecute

datadog-values.yaml personalizado:

datadog:
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>
  clusterName: <CLUSTER_NAME>
  kubelet:
    tlsVerify: false
agents:
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/controlplane
      operator: Exists
    - effect: NoExecute
      key: node-role.kubernetes.io/etcd
      operator: Exists

Oracle Container Engine para Kubernetes (OKE)

No es necesaria ninguna configuración específica.

vSphere Tanzu Kubernetes Grid (TKG)

TKG requiere algunos pequeños cambios en su configuración que se muestran a continuación. Por ejemplo, se requiere establecer una tolerancia para que el controlador programe el Node Agent en los nodos master.

Recurso Kubernetes del Datadog Agent:

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  features:
    eventCollection:
      collectKubernetesEvents: true
    kubeStateMetricsCore:
      enabled: true
  global:
    clusterName: <CLUSTER_NAME>
    credentials:
      apiSecret:
        secretName: datadog-secret
        keyName: api-key
      appSecret:
        secretName: datadog-secret
        keyName: app-key
    kubelet:
      tlsVerify: false
  override:
    nodeAgent:
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule

datadog-values.yaml personalizado:

datadog:
  clusterName: <CLUSTER_NAME>
  apiKey: <DATADOG_API_KEY>
  appKey: <DATADOG_APP_KEY>
  kubelet:
    # Set tlsVerify to false since the Kubelet certificates are self-signed
    tlsVerify: false
  # Disable the `kube-state-metrics` dependency chart installation.
  kubeStateMetricsEnabled: false
  # Enable the new `kubernetes_state_core` check.
  kubeStateMetricsCore:
    enabled: true
# Add a toleration so that the agent can be scheduled on the control plane nodes.
agents:
  tolerations:
    - key: node-role.kubernetes.io/master
      effect: NoSchedule