Cette section propose des configurations de base efficaces pour la surveillance du plan de contrôle Kubernetes et décrit les spécificités associées. Vous pouvez personnaliser ces configurations afin d’ajouter les fonctionnalités Datadog de votre choix.
Grâce aux intégrations Datadog pour le serveur d’API, Etcd, Controller Manager et Scheduler, vous pouvez recueillir des métriques clés depuis les quatre composants du plan de contrôle Kubernetes.
Les configurations suivantes ont été testées pour Kubernetes v1.18+.
Serveur d’API
L’intégration du serveur d’API est automatiquement configurée. L’Agent Datadog la découvre automatiquement.
Etcd
Attribuez un accès en lecture aux certificats Etcd situés sur le host pour que le check de l’Agent Datadog puisse communiquer avec Etcd et commencer à recueillir des métriques Etcd.
Si les ports non sécurisés de vos instances Controller Manager et Scheduler sont activés, l’Agent Datadog découvre les intégrations et commence à collecter les métriques sans configuration supplémentaire.
Ports sécurisés
Les ports sécurisés activent des processus d’authentification et d’autorisation afin de protéger les composants de votre plan de contrôle. L’Agent Datadog peut recueillir des métriques à partir de Controller Manager et Scheduler en ciblant leurs ports sécurisés.
Si vous utilisez des certificats autosignés, le champ ssl_verify des configurations kube_controller_manager et kube_scheduler doit être défini sur false.
Lors du ciblage de ports sécurisés, l’Agent Datadog doit pouvoir atteindre l’option bind-address de vos configurations Controller Manager et Scheduler. Exemple :
Amazon expose les métriques kube_controller_manager et kube_scheduler sous le groupe d’API metrics.eks.amazonaws.com.
L’ajout de "extra_headers":{"accept":"*/*"} empêche les erreurs HTTP 406 lors de l’interrogation de l’API de métriques EKS.
Kubernetes sur OpenShift 4
Cette fonctionnalité est en version Preview.
Datadog prend en charge la surveillance des composants du plan de contrôle Kubernetes, notamment l’API Server, etcd, le Controller Manager et le Scheduler.
Prérequis
Opérateur Datadog >= v1.18.0
Agent Datadog >= v7.69
Remarque : etcd n’est pas pris en charge sur les versions 4.0-4.13.
Configuration générale
La surveillance du plan de contrôle est activée par défaut, mais nécessite l’activation de l’introspection.
Ou, pour les utilisateurs d’OpenShift qui ont installé l’opérateur via OperatorHub/Marketplace (la méthode recommandée), en patchant la version de service de cluster de l’opérateur :
Étant donné que cette fonctionnalité est activée par défaut, vous pouvez déployer une spec DatadogAgent minimale.
Activer features.clusterChecks.useClusterChecksRunners pour planifier les checks ici ; sinon, les checks du plan de contrôle s’exécutent sur l’Agent de nœud.
Pour OpenShift 4.14 et versions ultérieures, la surveillance etcd nécessite de copier les certificats etcd. Vérifiez les logs de l’opérateur pour obtenir la commande exacte. Consultez l’exemple suivant (ajustez l’espace de nommage si nécessaire) :
oc get secret etcd-metric-client -n openshift-etcd-operator -o yaml |\
sed 's/namespace: openshift-etcd-operator/namespace: datadog/'|\
oc apply -f -
Prérequis
Version du chart Helm >= 3.150.0
Agent Datadog >= v7.69
Remarque : etcd n’est pas pris en charge sur les versions 4.0-4.13.
Configuration générale
Activez la surveillance du plan de contrôle en utilisant l’option providers.openshift.controlPlaneMonitoring :
Pour OpenShift 4.14 et versions ultérieures, la surveillance etcd nécessite de copier les certificats etcd. Pour les copier dans le même espace de nommage que l’Agent Datadog :
oc get secret etcd-metric-client -n openshift-etcd-operator -o yaml | sed 's/namespace: openshift-etcd-operator/namespace: <datadog agent namespace>/'| oc create -f -
Validation
Vérifiez que les checks sont en cours d’exécution :
Vérifiez que votre compte dispose de suffisamment d’autorisations pour pouvoir modifier des services et créer des secrets.
Serveur d’API
Le serveur d’API s’exécute derrière le service kubernetes dans l’espace de nommage default. Annotez ce service avec la configuration kube_apiserver_metrics :
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.check_names=["kube_apiserver_metrics"]'oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true"}]'oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.resolve=ip'
La dernière annotation ad.datadoghq.com/endpoints.resolve est requise, car le service est exécuté devant les pods statiques. L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de checks de cluster. Pour identifier les nœuds sur lesquels ils s’exécutent, utilisez la commande suivante :
Des certificats sont nécessaires pour communiquer avec le service Etcd, qui peuvent être trouvés dans le secret kube-etcd-client-certs dans l’espace de nommage openshift-monitoring. Pour donner à l’Agent Datadog l’accès à ces certificats, copiez-les d’abord dans le même espace de nommage dans lequel l’Agent Datadog est exécuté :
oc get secret kube-etcd-client-certs -n openshift-monitoring -o yaml | sed 's/namespace: openshift-monitoring/namespace: <datadog agent namespace>/'| oc create -f -
Ces certificats doivent être montés sur les pods des exécuteurs de checks de cluster, en ajoutant les volumes et volumeMounts tel que décrit ci-dessous.
Remarque : des montages sont également inclus pour désactiver le fichier d’autoconfiguration du check Etcd fourni avec l’Agent.
Annotez ensuite le service s’exécutant devant Etcd :
oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.check_names=["etcd"]'oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "tls_ca_cert": "/etc/etcd-certs/etcd-client-ca.crt", "tls_cert": "/etc/etcd-certs/etcd-client.crt",
"tls_private_key": "/etc/etcd-certs/etcd-client.key"}]'oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.resolve=ip'
L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de check de cluster.
Etcd OpenShift 4.14 et versions ultérieures
Des certificats sont nécessaires pour communiquer avec le service Etcd, qui peuvent être trouvés dans le secret etcd-metric-client dans l’espace de nommage openshift-etcd-operator. Pour donner à l’Agent Datadog l’accès à ces certificats, copiez-les dans le même espace de nommage que l’Agent Datadog :
oc get secret etcd-metric-client -n openshift-etcd-operator -o yaml | sed 's/namespace: openshift-etcd-operator/namespace: <datadog agent namespace>/'| oc create -f -
Ces certificats doivent être montés sur les pods des exécuteurs de checks de cluster, en ajoutant les volumes et volumeMounts tel que décrit ci-dessous.
Remarque : des montages sont également inclus pour désactiver le fichier d’autoconfiguration du check Etcd fourni avec l’Agent.
Annotez ensuite le service s’exécutant devant Etcd :
oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.check_names=["etcd"]'oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "tls_ca_cert": "/etc/etcd-certs/etcd-client-ca.crt", "tls_cert": "/etc/etcd-certs/etcd-client.crt",
"tls_private_key": "/etc/etcd-certs/etcd-client.key"}]'oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.resolve=ip'
L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de check de cluster.
Controller Manager
Le Controller Manager s’exécute derrière le service kube-controller-manager dans l’espace de nommage openshift-kube-controller-manager. Annotez ce service avec la configuration de check :
oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.check_names=["kube_controller_manager"]'oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "ssl_verify": "false", "bearer_token_auth": "true"}]'oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.resolve=ip'
L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de check de cluster.
Scheduler
Le Scheduler s’exécute derrière le service scheduler dans l’espace de nommage openshift-kube-scheduler. Annotez ce service avec la configuration de check :
oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.check_names=["kube_scheduler"]'oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "ssl_verify": "false", "bearer_token_auth": "true"}]'oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.resolve=ip'
L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de check de cluster.
Kubernetes sur OpenShift 3
Sur OpenShift 3, tous les composants du plan de contrôle peuvent être surveillés à l’aide de checks d’endpoint.
Vérifiez que votre compte dispose de suffisamment d’autorisations pour pouvoir créer et modifier des services.
Serveur d’API
Le serveur d’API s’exécute derrière le service kubernetes dans l’espace de nommage default. Annotez ce service avec la configuration kube_apiserver_metrics :
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.check_names=["kube_apiserver_metrics"]'oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true"}]'oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.resolve=ip'
La dernière annotation ad.datadoghq.com/endpoints.resolve est requise, car le service est exécuté devant les pods statiques. L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de checks de cluster. Pour identifier les nœuds sur lesquels ils s’exécutent, utilisez la commande suivante :
Pour communiquer avec le service Etcd, vous devez utiliser des certificats. Vous trouverez les certificats requis sur le host. Ces certificats doivent être montés sur les pods des exécuteurs de checks de cluster, en ajoutant les volumes et volumeMounts tel que décrit ci-dessous.
Remarque : des montages sont également inclus pour désactiver le fichier d’autoconfiguration du check Etcd fourni avec l’Agent.
Les modifications directes apportées à ce service ne sont pas persistantes. Veillez donc à dupliquer le service Etcd.
oc get service etcd -n kube-system -o yaml | sed 's/name: etcd/name: etcd-copy/'| oc create -f -
Annotez le service dupliqué avec la configuration de check :
oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.check_names=["etcd"]'oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.init_configs=[{}]'oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "tls_ca_cert": "/host/etc/etcd/ca/ca.crt", "tls_cert": "/host/etc/etcd/server.crt",
"tls_private_key": "/host/etc/etcd/server.key"}]'oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.resolve=ip'
L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de check de cluster.
Controller Manager et Scheduler
Le Controller Manager et le Scheduler sont exécutés derrière le même service, à savoir kube-controllers, dans l’espace de nommage kube-system. Les modifications directes apportées au service ne sont pas persistantes. Veillez donc à dupliquer le service :
oc get service kube-controllers -n kube-system -o yaml | sed 's/name: kube-controllers/name: kube-controllers-copy/'| oc create -f -
Annotez le service dupliqué avec les configurations de check :
L’Agent de cluster Datadog planifie les checks en tant que checks d’endpoint et les distribue aux exécuteurs de check de cluster.
Kubernetes sur Talos Linux
Helm est la méthode d’installation recommandée pour Talos Linux. Utiliser Helm en définissant le flag providers.talos.enabled sur true.
Serveur d’API
L’intégration du serveur d’API est automatiquement configurée. L’Agent Datadog la découvre automatiquement.
Etcd
En fournissant un accès en lecture aux certificats etcd situés sur l’hôte, le check de l’Agent Datadog peut communiquer avec etcd et commencer à collecter les métriques etcd.
datadog-values.yaml
datadog:apiKey:<DATADOG_API_KEY>appKey:<DATADOG_APP_KEY>clusterName:<CLUSTER_NAME>kubelet:tlsVerify:falseignoreAutoConfig:- etcdconfd:etcd.yaml:|- # Vous pouvez configurer l'Agent pour exécuter ce check uniquement sur l'hôte où etcd est en cours d'exécution
# en utilisant `ad_identifiers` pour un pod qui ne serait en cours d'exécution que sur un nœud control plane.
# Cela permet d'éviter les erreurs lorsque l'Agent est exécuté sur des nœuds worker.
# Une autre approche consiste à exécuter un pod minimal sur le nœud control plane et à l'utiliser pour `ad_identifiers`.
ad_identifiers:
- kube-scheduler
instances:
# Il s'agit de l'adresse IP du nœud où les métriques sont exposées car kube-scheduler s'exécute en mode réseau host.
# Sinon, l'adresse IP peut être codée en dur sur l'adresse IP du nœud master (également dans la variable d'environnement `DD_KUBERNETES_KUBELET_HOST`).
- prometheus_url : https://%%host%%:2379/metrics
tls_ca_cert : /host/etc/kubernetes/pki/etcd/ca.crt
tls_cert : /host/etc/kubernetes/pki/etcd/server.crt
tls_private_key : /host/etc/kubernetes/pki/etcd/server.keyagents:# Des tolérances sont nécessaires pour être planifié sur les nœuds de plan de contrôle exécutant etcdtolerations:- key:node-role.kubernetes.io/control-planeoperator:Existseffect:NoSchedulevolumes:# Sur Talos, les certificats etcd sont stockés dans /system/secrets/etcd- hostPath:path:/system/secrets/etcdname:etcd-certsvolumeMounts:- name:etcd-certsmountPath:/host/etc/kubernetes/pki/etcdreadOnly:trueproviders:talos:enabled:true
Controller Manager et Scheduler
Ports sécurisés
Les ports sécurisés activent des processus d’authentification et d’autorisation afin de protéger les composants de votre plan de contrôle. L’Agent Datadog peut recueillir des métriques à partir de Controller Manager et Scheduler en ciblant leurs ports sécurisés.
Si vous utilisez des certificats autosignés, le champ ssl_verify des configurations kube_controller_manager et kube_scheduler doit être défini sur false.
Lors du ciblage de ports sécurisés, l’option bind-address dans votre configuration Controller Manager et Scheduler doit être accessible par l’Agent Datadog. Appliquez le patch ci-dessous aux nœuds control-plane lors de la génération du cluster ; ou, pour les nœuds Talos en cours d’exécution, exécutez talosctl patch mc -n <control-plane-node1,control-plane-node2> --patch @controlplane-datadog-monitoring-patch.yaml.
Kubernetes sur Rancher Kubernetes Engine (version 2.5+)
La version 2.5 de Rancher se base sur PushProx pour exposer les endpoints de métriques du plan de contrôle. L’Agent Datadog peut ainsi exécuter des checks de plan de contrôle et recueillir des métriques.
Ajouter des services Kubernetes pour configurer les checks Autodiscovery
Si vous ajoutez des services Kubernetes headless pour définir des configuration de check, l’Agent Datadog pourra cibler les pods pushprox et recueillir des métriques.
Les composants du plan de contrôle s’exécutent sur Docker en dehors de Kubernetes. Dans Kubernetes, le service kubernetes dans l’espace de nommage default cible la ou les IP du nœud du plan de contrôle. Pour vérifier que c’est bien le cas, exécutez la commande $ kubectl describe endpoints kubernetes.
Vous pouvez annoter ce service avec des checks d’endpoint (gérés par l’Agent de cluster) Datadog pour surveiller les composants API Server, Controller Manager et Scheduler :
Etcd s’exécute dans Docker en dehors de Kubernetes. Des certificats sont requis pour communiquer avec le service Etcd. Pour configurer la surveillance d’Etcd en suivant la procédure recommandée, vous avez besoin d’un accès SSH au nœud du plan de contrôle exécutant Etcd.
Commencez par SSH le nœud du plan de contrôle en suivant la documentation Rancher (en anglais). Vérifiez qu’Etcd s’exécute dans un conteneur Docker avec $ docker ps, puis utilisez la commande $ docker inspect etcd pour rechercher l’emplacement des certificats utilisés dans la commande d’exécution ("Cmd"), ainsi que le chemin hôte des montages.
Recherchez les trois flags suivants dans la commande :
--trusted-ca-file
--cert-file
--key-file
À l’aide des informations de montage fournies dans la sortie de $ docker inspect etcd, définissez volumes et volumeMounts dans la configuration de l’Agent Datadog. Ajoutez également des tolérances, afin que l’Agent Datadog puisse s’exécuter sur les nœuds du plan de contrôle.
Vous trouverez ci-dessous des exemples de configuration de l’Agent Datadog avec Helm et l’Operator Datadog :
Configurez un DaemonSet avec un conteneur de pause afin d’exécuter le check Etcd sur les nœuds exécutant Etcd. Ce DamonSet s’exécute sur le réseau hôte pour pouvoir accéder au service Etcd. Il dispose également de la configuration de check et des tolérances nécessaires pour s’exécuter sur les nœuds du plan de contrôle. Veillez à ce que les chemins des fichiers de certificat montés correspondent aux emplacements sur votre instance, et remplacez la partie <...> par l’emplacement pertinent.
Pour déployer le DaemonSet et la configuration de check, exécutez la commande suivante :
kubectl apply -f <filename>
Kubernetes sur des services gérés (AKS, GKE)
Sur d’autres services gérés, comme Azure Kubernetes Service (AKS) et Google Kubernetes Engine (GKE), l’utilisateur ne peut pas accéder aux composants du plan de contrôle. Il n’est donc pas possible d’exécuter les checks kube_apiserver, kube_controller_manager, kube_scheduler et etcd dans ces environnements.