OpenShift

Supported OS Linux

Información general

Red Hat OpenShift es una plataforma de aplicaciones en contenedores de código abierto basada en el orquestador de contenedores de Kubernetes para el desarrollo y despliegue de aplicaciones empresariales.

Este README describe la configuración necesaria para permitir la recopilación de métricas específicas de OpenShift en el Agent. Los datos aquí descritos son recopilados por el check de kubernetes_apiserver. Debes configurar el check para recopilar las métricas openshift.*.

Configuración

Instalación

Esta configuración central es compatible con OpenShift 3.11 y OpenShift 4, pero funciona mejor con OpenShift 4.

Para instalar el Agent, consulta las instrucciones de instalación del Agent para obtener instrucciones generales de Kubernetes y la página de distribuciones de Kubernetes para obtener ejemplos de la configuración de OpenShift.

Como alternativa, puede utilizarse Datadog Operator para instalar y gestionar el Datadog Agent. El Datadog Operator puede instalarse mediante el OperatorHub de OpenShift.

Configuración de las restricciones del contexto de seguridad

Si estás desplegando el Datadog Agent utilizando cualquiera de los métodos vinculados en las instrucciones de instalación anteriores, debes incluir restricciones de contexto de seguridad (SCC) para el Agent y el Cluster Agent para recopilar datos. Sigue las instrucciones que se indican a continuación en relación con tu despliegue.

Para obtener instrucciones sobre cómo instalar el Datadog Operator y el recurso DatadogAgent en OpenShift, consulta la Guía de instalación de OpenShift.

Si despliegas el Operator con Operator Lifecycle Manager (OLM), los SCC predeterminados necesarios de OpenShift se asocian automáticamente a la cuenta de servicio datadog-agent-scc. A continuación, puedes desplegar los componentes de Datadog con la CustomResourceDefinition DatadogAgent, haciendo referencia a esta cuenta de servicio en los pods del Node Agent y Cluster Agent.

Consulta la página Distribuciones y el repositorio del Operator para ver más ejemplos.

Puedes crear el SCC directamente dentro de tu values.yaml del Datadog Agent. Añade los siguientes parámetros de bloque en la sección agents y clusterAgent para crear sus respectivos SCC.

datadog:
  #(...)

agents:
  podSecurity:
    securityContextConstraints:
      create: true

clusterAgent:
  podSecurity:
    securityContextConstraints:
      create: true

Puedes aplicar esto cuando despliegues inicialmente el Agent, o puedes ejecutar un helm upgrade después de hacer este cambio para aplicar el SCC.

Consulta la página Distribuciones y el repositorio de Helm para más ejemplos.

Según tus necesidades y las restricciones de seguridad de tu clúster, se admiten tres escenarios de despliegue:

Restricciones del contexto de seguridadRestringidoRed de hostPersonalizado
Monitorización de la capa de KubernetesCompatibleCompatibleCompatible
Autodiscovery basado en KubernetesCompatibleCompatibleCompatible
Entrada de DogStatsDNo compatibleCompatibleCompatible
Entrada de trazas de APMNo compatibleCompatibleCompatible
Entrada de red de logsNo compatibleCompatibleCompatible
Métricas de red de hostNo compatibleCompatibleCompatible
Monitorización de la capa de DockerNo compatibleNo compatibleCompatible
Recopilación de logs de contenedorNo compatibleNo compatibleCompatible
Monitorización de contenedores en directoNo compatibleNo compatibleCompatible
Monitorización de Live ProcessNo compatibleNo compatibleCompatible

Operaciones restringidas de SCC

Este modo no requiere conceder permisos especiales al DaemonSet del datadog-agent, aparte de los permisos RBAC necesarios para acceder al kubelet y al APIserver. Puedes empezar con esta plantilla kubelet-only.

El método de ingesta recomendado para DogStatsD, APM y logs consiste en vincular el Datadog Agent a un puerto de host. De esta forma, la IP de destino es constante y fácilmente detectable por tus aplicaciones. La SCC por defecto de OpenShift no permite la vinculación al puerto de host. Puedes configurar el Agent para que escuche en su propia IP, pero tendrás que gestionar la detección de esa IP desde tu aplicación.

El Agent permite trabajar en un modo de ejecución de sidecar, para habilitar la ejecución del Agent en el pod de tu aplicación para facilitar la detección.

Host

Añade el permiso allowHostPorts al pod con el SCC estándar hostnetwork o hostaccess, o creando uno propio. En este caso, puedes añadir los enlaces de puerto relevantes en las especificaciones de tu pod:

ports:
  - containerPort: 8125
    name: dogstatsdport
    protocol: UDP
  - containerPort: 8126
    name: traceport
    protocol: TCP

SCC personalizado de Datadog para todas las funciones

El Helm Chart y Datadog Operator gestionan el SCC por ti de forma predeterminada. Para gestionarlo tú mismo en su lugar, asegúrate de incluir las configuraciones correctas en función de las características que hayas habilitado.

Si SELinux está en modo permisivo o deshabilitado, habilita el SCC hostaccess para beneficiarte de todas las características. Si SELinux está en modo obligatorio, es recomendado conceder el tipo spc_t al pod datadog-agent. Para desplegar el Agent, puedes utilizar el siguiente SCC datadog-agent que se puede aplicar después de crear la cuenta de servicio datadog-agent. Concede los siguientes permisos:

  • allowHostPorts: true: vincula las entradas de DogStatsD/APM/logs a la IP del nodo.
  • allowHostPID: true: activa la Detección de origen para las métricas de DogStatsD enviadas por Unix Socket.
  • volumes: hostPath: accede al socker de Docker y a las carpetas proc y cgroup de host, para la recopilación de métricas.
  • SELinux type: spc_t: accede al socket de Docker y a las carpetas proc y cgroup de todos los procesos, para la recopilación de métricas. Consulta Introducción al concepto de Contenedor con súper privilegios para más detalles.
No olvides añadir una cuenta de servicio datadog-agent a un SCC datadog-agent recientemente creado al añadir system:serviceaccount:: a la sección usuarios.
OpenShift 4.0+: Si has utilizado el instalador de OpenShift en un proveedor de nube compatible, debes desplegar el SCC con allowHostNetwork: true en el manifiesto scc.yaml, así como hostNetwork: true en la configuración del Agent para obtener etiquetas (tags) de host y alias. Por lo demás, el acceso a los servidores de metadatos desde la red de pod está restringido.

Nota: El socket de Docker es propiedad del grupo raíz, por lo que es posible que tengas que elevar los privilegios del Agent para obtener métricas de Docker. Para ejecutar el proceso del Agent como usuario raíz, puedes configurar tu SCC con lo siguiente:

runAsUser:
  type: RunAsAny

Recopilación de logs

La recopilación de logs del Datadog Agent se configura en OpenShift en gran medida igual que otros clústeres de Kubernetes. El Datadog Operator y Helm Chart se montan en el directorio /var/log/pods, que el pod de Datadog Agent utiliza para monitorizar los logs de los pods y contenedores en sus respectivos hosts. Sin embargo, con el Datadog Operator, es necesario aplicar opciones de SELinux adicionales para dar al Agent permisos para leer estos archivos de log.

Consulta Recopilación de logs de Kubernetes para obtener más información general y la página Distribuciones para ver ejemplos de configuración.

APM

En Kubernetes, hay tres opciones principales para enrutar los datos desde el pod de aplicación al pod del Datadog Agent: el Unix Domain Socket (UDS), la opción HostIP:HostPort (TCP/IP) y el servicio de Kubernetes. El Datadog Operator y Helm Chart utilizan por defecto la opción de UDS por ser la más eficiente en cuanto a recursos. Sin embargo, esta opción no funciona bien en OpenShift, ya que requiere opciones elevadas de SCC y SELinux, tanto en el pod del Agent como en el pod de aplicaciones.

Datadog recomienda deshabilitar la opción de UDS explícitamente para evitar esto y para evitar que el Admission Controller (Controlador de admisión) inyecte esta configuración.

Consulta Recopilación de trazas, APM de Kubernetes para más información general y la página Distribuciones para ver ejemplos de configuración.

Validación

Ver kubernetes_apiserver

Datos recopilados

Métricas

openshift.appliedclusterquota.cpu.limit
(gauge)
Hard limit for cpu by cluster resource quota and namespace
Shown as cpu
openshift.appliedclusterquota.cpu.remaining
(gauge)
Remaining available cpu by cluster resource quota and namespace
Shown as cpu
openshift.appliedclusterquota.cpu.used
(gauge)
Observed cpu usage by cluster resource quota and namespace
Shown as cpu
openshift.appliedclusterquota.memory.limit
(gauge)
Hard limit for memory by cluster resource quota and namespace
Shown as byte
openshift.appliedclusterquota.memory.remaining
(gauge)
Remaining available memory by cluster resource quota and namespace
Shown as byte
openshift.appliedclusterquota.memory.used
(gauge)
Observed memory usage by cluster resource quota and namespace
Shown as byte
openshift.appliedclusterquota.persistentvolumeclaims.limit
(gauge)
Hard limit for persistent volume claims by cluster resource quota and namespace
openshift.appliedclusterquota.persistentvolumeclaims.remaining
(gauge)
Remaining available persistent volume claims by cluster resource quota and namespace
openshift.appliedclusterquota.persistentvolumeclaims.used
(gauge)
Observed persistent volume claims usage by cluster resource quota and namespace
openshift.appliedclusterquota.pods.limit
(gauge)
Hard limit for pods by cluster resource quota and namespace
openshift.appliedclusterquota.pods.remaining
(gauge)
Remaining available pods by cluster resource quota and namespace
openshift.appliedclusterquota.pods.used
(gauge)
Observed pods usage by cluster resource quota and namespace
openshift.appliedclusterquota.services.limit
(gauge)
Hard limit for services by cluster resource quota and namespace
openshift.appliedclusterquota.services.loadbalancers.limit
(gauge)
Hard limit for service load balancers by cluster resource quota and namespace
openshift.appliedclusterquota.services.loadbalancers.remaining
(gauge)
Remaining available service load balancers by cluster resource quota and namespace
openshift.appliedclusterquota.services.loadbalancers.used
(gauge)
Observed service load balancers usage by cluster resource quota and namespace
openshift.appliedclusterquota.services.nodeports.limit
(gauge)
Hard limit for service node ports by cluster resource quota and namespace
openshift.appliedclusterquota.services.nodeports.remaining
(gauge)
Remaining available service node ports by cluster resource quota and namespace
openshift.appliedclusterquota.services.nodeports.used
(gauge)
Observed service node ports usage by cluster resource quota and namespace
openshift.appliedclusterquota.services.remaining
(gauge)
Remaining available services by cluster resource quota and namespace
openshift.appliedclusterquota.services.used
(gauge)
Observed services usage by cluster resource quota and namespace
openshift.clusterquota.cpu.limit
(gauge)
Hard limit for cpu by cluster resource quota for all namespaces
Shown as cpu
openshift.clusterquota.cpu.remaining
(gauge)
Remaining available cpu by cluster resource quota for all namespaces
Shown as cpu
openshift.clusterquota.cpu.requests.used
(gauge)
Observed cpu usage by cluster resource for request
openshift.clusterquota.cpu.used
(gauge)
Observed cpu usage by cluster resource quota for all namespaces
Shown as cpu
openshift.clusterquota.memory.limit
(gauge)
Hard limit for memory by cluster resource quota for all namespaces
Shown as byte
openshift.clusterquota.memory.remaining
(gauge)
Remaining available memory by cluster resource quota for all namespaces
Shown as byte
openshift.clusterquota.memory.used
(gauge)
Observed memory usage by cluster resource quota for all namespaces
Shown as byte
openshift.clusterquota.persistentvolumeclaims.limit
(gauge)
Hard limit for persistent volume claims by cluster resource quota for all namespaces
openshift.clusterquota.persistentvolumeclaims.remaining
(gauge)
Remaining available persistent volume claims by cluster resource quota for all namespaces
openshift.clusterquota.persistentvolumeclaims.used
(gauge)
Observed persistent volume claims usage by cluster resource quota for all namespaces
openshift.clusterquota.pods.limit
(gauge)
Hard limit for pods by cluster resource quota for all namespaces
openshift.clusterquota.pods.remaining
(gauge)
Remaining available pods by cluster resource quota for all namespaces
openshift.clusterquota.pods.used
(gauge)
Observed pods usage by cluster resource quota for all namespaces
openshift.clusterquota.services.limit
(gauge)
Hard limit for services by cluster resource quota for all namespaces
openshift.clusterquota.services.loadbalancers.limit
(gauge)
Hard limit for service load balancers by cluster resource quota for all namespaces
openshift.clusterquota.services.loadbalancers.remaining
(gauge)
Remaining available service load balancers by cluster resource quota for all namespaces
openshift.clusterquota.services.loadbalancers.used
(gauge)
Observed service load balancers usage by cluster resource quota for all namespaces
openshift.clusterquota.services.nodeports.limit
(gauge)
Hard limit for service node ports by cluster resource quota for all namespaces
openshift.clusterquota.services.nodeports.remaining
(gauge)
Remaining available service node ports by cluster resource quota for all namespaces
openshift.clusterquota.services.nodeports.used
(gauge)
Observed service node ports usage by cluster resource quota for all namespaces
openshift.clusterquota.services.remaining
(gauge)
Remaining available services by cluster resource quota for all namespaces
openshift.clusterquota.services.used
(gauge)
Observed services usage by cluster resource quota for all namespaces

Eventos

El check de OpenShift no incluye ningún evento.

Checks de servicio

El check de OpenShift no incluye ningún check de servicio.

Solucionar problemas

¿Necesitas ayuda? Contacta con el equipo de asistencia de Datadog.