Problèmes avec les conteneurs Windows

Cette page décrit les problèmes connus et non résolus pouvant affecter la surveillance d’applications Windows conteneurisées.

Problèmes courants

La surveillance d’applications Windows conteneurisées nécessite l’Agent Datadog 7.19+.

Voici la liste des versions des systèmes d’exploitation prises en charge :

  • Windows Server 2019 (LTSC/1809)
  • Windows Server 2019 1909 (jusqu’à la version 7.39 de l’Agent ; les dernières versions ne sont plus prises en charge par Microsoft)
  • Windows Server 2019 2004 ou 20H1 (jusqu’à la version 7.39 de l’Agent ; les dernières versions ne sont plus prises en charge par Microsoft)
  • Windows Server 2019 20H2 (de la version 7.33 à 7.39 de l’Agent ; les dernières versions ne sont plus prises en charge par Microsoft)
  • Windows Server 2022 LTSC (Agent 7.34+)

Le mode d’isolation Hyper-V n’est pas pris en charge.

Les métriques de host relatives au disque, aux E/S et au réseau sont désactivées. Elles ne sont pas prises en charge par Windows Server, et les checks de l’Agent sont désactivés par défaut.

Problèmes avec Docker

Les live processes ne s’affichent pas dans les conteneurs (sauf pour l’Agent Datadog).

Problèmes avec Kubernetes

Les live processes ne s’affichent pas dans les conteneurs (sauf pour l’Agent Datadog).

Clusters mixte (Linux + Windows)

Pour déployer l’Agent Datadog sur un cluster mixte, il est conseillé d’effectuer deux installations du chart Helm avec des targetSystem différents.

L’Agent Datadog utilise un nodeSelector pour sélectionner automatiquement les nœuds Linux ou Windows en fonction du targetSystem.

Ce n’est toutefois pas le cas pour Kube State Metrics (qui est installé par défaut), ce qui peut empêcher la planification de Kube State Metrics sur les nœuds Windows.

Trois solutions sont possibles pour éviter ce problème :

  • Utilisez la fonctionnalité taint sur vos nœuds Windows. Sous Windows, l’Agent autorise toujours le taint node.kubernetes.io/os=windows:NoSchedule.
  • Définissez le sélecteur de nœud Kube State Metrics via le chart Helm Datadog values.yaml :
kube-state-metrics:
  nodeSelector:
    beta.kubernetes.io/os: linux // Kubernetes < 1.14
    kubernetes.io/os: linux // Kubernetes >= 1.14
  • Déployez Kube State Metrics vous-même séparément en définissant datadog.kubeStateMetricsEnabled sur false.

Remarque : lorsque vous utilisez deux installations de Datadog (une avec targetSystem: linux et une autre avec targetSystem: windows), assurez-vous que le paramètre datadog.kubeStateMetricsEnabled est défini sur false pour la deuxième installation afin d’empêcher le déploiement de deux instances de Kube State Metrics.

Clusters mixtes avec l’Agent de cluster Datadog

Depuis la version 1.18 de l’Agent de cluster, les configurations reposant sur des clusters mixtes sont prises en charge.

Utilisez le fichier values.yaml suivant pour configurer les communications entre les Agents déployés sur les nœuds Windows et l’Agent de cluster.

targetSystem: windows
existingClusterAgent:
  join: true
  serviceName: "<NOM_SERVICE_EXISTANT_AGENT_CLUSTER_DATADOG>" # provenant du premier chart Helm Datadog
  tokenSecretName: "<NOM_SECRET_EXISTANT_AGENT_CLUSTER_DATADOG>" # provenant du premier chart Helm Datadog

# Désactiver le déploiement de datadogMetrics, car il est déjà réalisé par le premier chart
datadog-crds:
  crds:
    datadogMetrics: false
# Désactiver le déploiement de kube-state-metrics 
datadog:
  kubeStateMetricsEnabled: false

Options de configuration limitées pour les déploiements Windows

La liste suivante répertorie les options de configuration qui ne sont pas disponibles sous Windows :

ParamètreRaison
datadog.dogstatsd.useHostPIDPID de host incompatible avec les conteneurs Windows
datadog.dogstatsd.useSocketVolumeSockets Unix incompatibles avec Windows
datadog.dogstatsd.socketPathSockets Unix incompatibles avec Windows
datadog.processAgent.processCollectionImpossible d’accéder aux processus des hosts et des autres conteneurs
datadog.systemProbe.seccompSystem probe indisponible sous Windows
datadog.systemProbe.seccompRootSystem probe indisponible sous Windows
datadog.systemProbe.debugPortSystem probe indisponible sous Windows
datadog.systemProbe.enableConntrackSystem probe indisponible sous Windows
datadog.systemProbe.bpfDebugSystem probe indisponible sous Windows
datadog.systemProbe.apparmorSystem probe indisponible sous Windows
agents.useHostNetworkRéseau host incompatible avec les conteneurs Windows

HostPort pour l’APM ou DogStatsD

HostPort est partiellement pris en charge sur Kubernetes, en fonction de la version du système d’exploitation sous-jacent et du plug-in CNI. Pour que HostPort fonctionne, les exigences suivantes doivent être satisfaites :

  • La version de Windows Server doit être >= 1909
  • Le plug-in CNI doit prendre en charge la fonctionnalité portMappings

Actuellement, au moins deux plug-ins CNI prennent en charge cette fonctionnalité :

  • Plug-in win-bridge officiel (version >= 0.8.6) - Utilisé par GKE
  • Plug-in CNI Azure - Utilisé par AKS

Si votre configuration ne répond pas à ces exigences, l’APM et DogStatsD fonctionneront uniquement lorsqu’une mise en réseau pod à pod est configurée entre le traceur et l’Agent.

Check Kubelet

Selon votre version de Kubernetes, il est possible que certaines métriques Kubelet ne soient pas disponibles (ou que le délai d’attente du check Kubelet expire). Pour une expérience optimale, utilisez l’une des versions suivantes :

  • Kubelet >= 1.16.13 (1.16.11 sous GKE)
  • Kubelet >= 1.17.9 (1.17.6 sous GKE)
  • Kubelet >= 1.18.6
  • Kubelet >= 1.19

Avec l’Agent version >= 7.19.2

Notez que toutes les métriques kubernetes.* ne sont pas disponibles sous Windows. Les métriques disponibles sont énumérées ci-dessous :

  • kubernetes.cpu.usage.total
  • kubernetes.containers.restarts
  • kubernetes.containers.running
  • kubernetes.cpu.capacity
  • kubernetes.ephemeral_storage.usage
  • kubernetes.kubelet.container.log_filesystem.used_bytes
  • kubernetes.kubelet.network_plugin.latency.count
  • kubernetes.kubelet.network_plugin.latency.quantile
  • kubernetes.kubelet.network_plugin.latency.sum
  • kubernetes.kubelet.runtime.errors
  • kubernetes.kubelet.runtime.operations
  • kubernetes.memory.capacity
  • kubernetes.pods.running
  • kubernetes.rest.client.latency.count
  • kubernetes.rest.client.latency.sum
  • kubernetes.rest.client.requests
  • kubernetes.network.tx_bytes
  • kubernetes.network.rx_bytes
  • kubernetes.cpu.usage.total
  • kubernetes.memory.working_set
  • kubernetes.filesystem.usage
  • kubernetes.filesystem.usage_pct