Configuration de lʼAPM avec le service Kubernetes
Présentation
Dans Kubernetes, les traceurs Datadog peuvent envoyer des données à lʼAgent Datadog de trois façons : Unix Domain Socket (UDS), lʼadresse IP du host ou le service Kubernetes. Chaque option garantit que lorsqu’un pod d’application envoie des données à lʼAPM, celles-ci sont acheminées vers un pod de lʼAgent Datadog sur le même nœud. Cette stratégie a pour but d’équilibrer le trafic et de garantir l’exactitude du tagging de vos données. Datadog vous recommande d’utiliser UDS pour envoyer des données.
Toutefois, si les volumes hostPath
requis pour UDS (et les ports hostPort
requis pour l’utilisation de lʼadresse IP du host) ne sont pas disponibles, vous pouvez utiliser le service Kubernetes comme alternative.
Ce guide décrit comment procéder à une configuration à lʼide dʼun service Kubernetes pour envoyer des données à lʼAgent Datadog.
Configuration de service
Dans Kubernetes 1.22, la fonction Internal Traffic Policy permet de définir la configuration internalTrafficPolicy: Local
sur un service. Lorsqu’elle est définie, le trafic d’un pod d’application est dirigé vers le pod en aval du service sur le même nœud.
Si vous avez installé lʼAgent Datadog en utilisant le chart Helm de Datadog ou lʼOperator Datadog sur des clusters avec Kubernetes v1.22.0+, un service pour lʼAgent avec internalTrafficPolicy: Local
est automatiquement créé pour vous. Vous devez également activer l’option du port APM pour votre Agent avec la configuration ci-dessous.
Configuration de l’Agent
Mettez à jour votre datadog-agent.yaml
pour que features.apm.enabled
devienne true
.
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
#(...)
features:
apm:
enabled: true
After making your changes, apply the new configuration by using the following command:
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
Mettez à jour votre datadog-values.yaml
pour que datadog.apm.portEnabled
devienne true
.
datadog:
apm:
portEnabled: true
After making your changes, upgrade your Datadog Helm chart using the following command:
helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog
Configuration de l’application
Vous pouvez configurer votre application pour qu’elle utilise le service Kubernetes en utilisant le contrôleur d’admission de lʼAgent de cluster ou en effectuant une configuration manuelle.
Contrôleur d’admission de lʼAgent de cluster
Le contrôleur d’admission de lʼAgent de cluster peut injecter la configuration de la connectivité de lʼAPM dans vos conteneurs. Les options sont hostip
, socket
ou service
. Choisissez le mode service
pour que le contrôleur d’admission ajoute la variable dʼenvironnement DD_AGENT_HOST
pour le nom DNS du service.
Modifiez votre fichier datadog-agent.yaml
comme suit :
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
#(...)
features:
apm:
enabled: true
admissionController:
enabled: true
agentCommunicationMode: service
After making your changes, apply the new configuration by using the following command:
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
Modifiez votre fichier datadog-values.yaml
comme suit :
clusterAgent:
admissionController:
enabled: true
configMode: service
After making your changes, upgrade your Datadog Helm chart using the following command:
helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog
Remarque : dans les environnements en nœuds mixtes (Linux/Windows), lʼAgent de cluster et son contrôleur d’admission sont relatifs au déploiement de Linux. Cela peut entraîner l’injection de mauvaises variables dʼenvironnement pour la connectivité du service dans les pods Windows.
Configuration manuelle
Pour une configuration manuelle, définissez la variable dʼenvironnement DD_AGENT_HOST
dans le manifeste de votre pod, avec une valeur de <SERVICE_NAME>.<SERVICE_NAMESPACE>.svc.cluster.local
.
#(...)
spec:
containers:
- name: "<CONTAINER_NAME>"
image: "<CONTAINER_IMAGE>"
env:
- name: DD_AGENT_HOST
value: <SERVICE_NAME>.<SERVICE_NAMESPACE>.svc.cluster.local
Remplacez <SERVICE_NAME>
par le nom du service et remplacez <SERVICE_NAMESPACE>
par lʼespace de nommage du service.
Par exemple, si votre définition de votre service ressemble à ce qui suit :
apiVersion: v1
kind: Service
metadata:
name: datadog
namespace: monitoring
labels:
#(...)
spec:
selector:
app: datadog
ports:
- protocol: UDP
port: 8125
targetPort: 8125
name: dogstatsdport
- protocol: TCP
port: 8126
targetPort: 8126
name: traceport
internalTrafficPolicy: Local
Alors, définissez la valeur de DD_AGENT_HOST
sur datadog.monitoring.svc.cluster.local
.
#(...)
spec:
containers:
- name: "<CONTAINER_NAME>"
image: "<CONTAINER_IMAGE>"
env:
- name: DD_AGENT_HOST
value: datadog.monitoring.svc.cluster.local
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: