Kubernetes Service を使用した APM のセットアップ
概要
Kubernetes では、Datadog のトレーサーは Unix Domain Socket (UDS)、ホスト IP、または Kubernetes Service の 3 つの方法で Datadog Agent にデータを送信できます。いずれのオプションでも、アプリケーション Pod が APM データを送信した場合、そのデータは同じノード上にある Datadog Agent Pod に到達します。この戦略により、トラフィックが適切に分散され、データに正しいタグが付与されるようにすることが目的です。Datadog では、UDS を使用してデータを送信することを推奨しています。
しかし、UDS に必要な hostPath
ボリュームや、ホスト IP を使用するために必要な hostPort
が利用できない場合は、代替オプションとして Kubernetes Service を使用できます。
このガイドでは、Kubernetes Service を使用して Datadog Agent にデータを送信する方法を設定する手順を説明します。
Service の設定
Kubernetes 1.22 では、Internal Traffic Policy 機能により、Service に internalTrafficPolicy: Local
を設定するオプションが追加されました。これを有効化すると、アプリケーション Pod からのトラフィックは、同じノード上にある Service のダウンストリーム Pod にルーティングされるようになります。
Datadog Helm チャートまたは Datadog Operator を使用して Kubernetes バージョン v1.22.0+ のクラスターに Datadog Agent をインストールした場合、internalTrafficPolicy: Local
が設定された Agent 用の Service は自動的に作成されます。追加で、以下の設定を行い、Agent の APM ポートオプションを有効にする必要があります。
Agent の構成
datadog-agent.yaml
を更新して、features.apm.enabled
を true
に設定します。
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
#(...)
features:
apm:
enabled: true
変更後、以下のコマンドを使用して新しい構成を適用します。
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
datadog-values.yaml
を更新して、datadog.apm.portEnabled
を 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
アプリケーションの設定
アプリケーションを Kubernetes Service 経由で Datadog Agent に接続させるには、Cluster Agent Admission Controller を使用する方法と、手動で設定を行う方法の 2 つがあります。
Cluster Agent Admission Controller
Cluster Agent の Admission Controller を使用すると、APM 接続用の設定をコンテナにインジェクトすることができます。オプションとして hostip
、socket
、service
のいずれかを指定します。service
モードを選択すると、Admission Controller によって DD_AGENT_HOST
環境変数が Service の DNS 名に設定されます。
datadog-agent.yaml
を以下のように更新します。
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
#(...)
features:
apm:
enabled: true
admissionController:
enabled: true
agentCommunicationMode: service
変更後、以下のコマンドを使用して新しい構成を適用します。
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
datadog-values.yaml
を以下のように更新します。
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
注: Linux と Windows の混在ノード環境では、Cluster Agent とその Admission Controller は Linux のデプロイに依存します。その結果、Windows の Pod には Service 接続用の環境変数が正しくない形でインジェクトされる場合があります。
手動設定
手動で設定する場合は、Pod マニフェストの環境変数 DD_AGENT_HOST
を <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
<SERVICE_NAME>
には Service の名前を、<SERVICE_NAMESPACE>
には Service の Namespace を置き換えてください。
例えば、以下のような Service 定義がある場合:
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
DD_AGENT_HOST
の値は datadog.monitoring.svc.cluster.local
に設定します。
#(...)
spec:
containers:
- name: "<CONTAINER_NAME>"
image: "<CONTAINER_IMAGE>"
env:
- name: DD_AGENT_HOST
value: datadog.monitoring.svc.cluster.local
参考資料