概要
Fargate上でEKSのPodを動かしている場合に、Datadog Cluster Agentのマニフェストはどう定義すればいいか分かりづらかったのでメモとして残しておきます。
設定例
Datadog Cluster Agentをhelmでインストールします。 valuesファイルは以下のようにする。
# see: https://github.com/DataDog/helm-charts/tree/main/charts/datadog#values datadog: apiKeyExistingSecret: datadog agents: enabled: false clusterAgent: enabled: true replicas: 2 shareProcessNamespace: true tokenExistingSecret: datadog-cluster-agent env: - name: DD_EKS_FARGATE value: "true" - name: DD_KUBERNETES_KUBELET_NODENAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: DD_CLUSTER_NAME valueFrom: configMapKeyRef: key: DD_CLUSTER_NAME name: datadog resources: requests: cpu: 200m memory: 256M limits: cpu: 200m memory: 256M
datadog
ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: datadog data: DD_CLUSTER_NAME: my-cluster-name
datadog
Secret
apiVersion: v1 kind: Secret metadata: name: datadog data: api-key: my-api-key
datadog-cluster-agent
Secret
apiVersion: v1 kind: Secret metadata: name: datadog-cluster-agent data: token: my-datadog-cluster-agent-token # 32文字以上にすること。じゃないとエラーになる
Fargate上でPodを動かす場合、Datadog AgentコンテナはSidecarとして動かすことになります。
そのDatadog AgentコンテナにDatadog Cluster Agentコンテナと通信するための環境変数を渡してあげます。
必要な環境変数はDD_CLUSTER_AGENT_ENABLED
、DD_CLUSTER_AGENT_URL
、DD_CLUSTER_AGENT_AUTH_TOKEN
、DD_ORCHESTRATOR_EXPLORER_ENABLED
です。
Sidecarの定義
spec: containers: - image: public.ecr.aws/datadog/agent:7.49.1 name: datadog-agent env: - name: DD_API_KEY valueFrom: secretKeyRef: key: api-key name: datadog - name: DD_SITE value: datadoghq.com - name: DD_EKS_FARGATE value: "true" - name: DD_PROCESS_AGENT_ENABLED value: "true" - name: DD_KUBERNETES_KUBELET_NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: DD_CLUSTER_NAME valueFrom: configMapKeyRef: key: DD_CLUSTER_NAME name: datadog - name: DD_CLUSTER_AGENT_ENABLED value: "true" - name: DD_CLUSTER_AGENT_URL value: https://<CLUSTER_AGENT_SERVICE_NAME>.<CLUSTER_AGENT_SERVICE_NAMESPACE>.svc.cluster.local:5005 - name: DD_CLUSTER_AGENT_AUTH_TOKEN valueFrom: secretKeyRef: key: token name: datadog-cluster-agent - name: DD_ORCHESTRATOR_EXPLORER_ENABLED # Kubernetes リソースビューを取得するために必要です value: "true"
うまくいかない場合
1, ログを確認
Datadog Cluster Agentコンテナのログ、Sidecarとして動かしているDatadog Agentコンテナのログを確認します。 INFOレベルログでうまくいかない原因が出力されていることもあります…。(DD_CLUSTER_AGENT_AUTH_TOKENの長さは32文字以上じゃないといけないとか)
2, agent status
で確認
Sidecarとして動かしているDatadog Agentコンテナにはいり、agent status
を実行し、 Datadog Cluster Agent
欄を確認する。
Successfully Connected to the Datadog Cluster Agent.
と出ていれば正常に設定がされています。
3, Sidecarとして動かしているDatadog AgentコンテナのPodのdnsPolicy
がDefault
になっていないか確認
DD_CLUSTER_AGENT_URLにDatadog Cluster Agent ServiceへURLを設定していますが、dnsPolicy
がDefault
では名前解決できずエラーになります。
CoreDNSなどはdnsPolicy
がDefault
なのでそういったPodはDD_CLUSTER_AGENT_ENABLEDをfalseにするとよいでしょう。(他に良い解決方法があれば教えてください)