- 重要な情報
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
このセクションの目的は、すべての主要な Kubernetes ディストリビューションに向けた特定の事項を文書化し、適切な基本コンフィギュレーションを提供することです。 これらのコンフィギュレーションをカスタマイズして、Datadog 機能を追加できます。
特殊なコンフィギュレーションは必要ありません。
ノードで AWS Bottlerocket OS を使用している場合、コンテナモニタリング (containerd
チェック) を有効化するために以下を追加してください:
カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
criSocketPath: /run/dockershim.sock
env:
- name: DD_AUTOCONFIG_INCLUDE_FEATURES
value: "containerd"
DatadogAgent Kubernetes Resource:
apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
agent:
config:
criSocket:
criSocketPath: /run/dockershim.sock
clusterAgent:
image:
name: "gcr.io/datadoghq/cluster-agent:latest"
config:
externalMetrics:
enabled: false
admissionController:
enabled: false
AKS では、AKS 証明書の設定のため、Kubelet
インテグレーション向けの特殊なコンフィギュレーションが必要となります。
カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
kubelet:
tlsVerify: false # Agent 7.35 で必須になりました。注意事項をご覧ください。
DatadogAgent Kubernetes Resource:
apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
agent:
config:
kubelet:
tlsVerify: false # Agent 7.35 で必須になりました。注意事項をご覧ください。
clusterAgent:
image:
name: "gcr.io/datadoghq/cluster-agent:latest"
config:
externalMetrics:
enabled: false
admissionController:
enabled: false
注:
Agent 7.35 では、AKS の Kubelet 証明書には SAN (Subject Alternative Name) が設定されていないため、tlsVerify: false
が必須となります。
一部の設定では、ポッド内における spec.nodeName
のDNS 解決が AKS で動作しない場合があります。これはすべての AKS Windows ノード、および Linux ノードでカスタム DNS を使用してクラスターを Virtual Network で設定した場合に報告されています。この場合、agent.config.kubelet.host
フィールド (デフォルトで status.hostIP
) を削除し、tlsVerify: false
を使用することが必要です。DD_KUBELET_TLS_VERIFY=false
の環境変数を使用することでも、この問題を解決できます。これらのオプションは両方とも、サーバー証明書の検証を無効にします。
env:
- name: DD_KUBELET_TLS_VERIFY
value: "false"
AKS 上の Admission Controller の関数では、Webhook の照合時にエラーが発生しないように、セレクターの追加を構成する必要があります。
clusterAgent:
env:
- name: "DD_ADMISSION_CONTROLLER_ADD_AKS_SELECTORS"
value: "true"
GKE は 2 つの異なる運用モードで構成することができます:
お使いのクラスターの運用モードに応じて、Datadog Agent で異なる設定を行う必要があります。
Agent 7.26 以降では、GKE 向けの特殊なコンフィギュレーションは不要です (Docker
または containerd
をお使いの場合)。
注: COS (Container Optimized OS) を使用する場合、eBPF ベースの OOM Kill
と TCP Queue Length
チェックが Helm チャートのバージョン 3.0.1 以降でサポートされるようになりました。これらのチェックを有効にするには、以下の設定を行います。
datadog.systemProbe.enableDefaultKernelHeadersPaths
を false
にします。datadog.systemProbe.enableKernelHeaderDownload
を true
にします。GKE Autopilot にはコンフィギュレーションが必要です(以下を参照)。
Datadog では、Agent コンテナにリソースの上限を指定することをおすすめします。Autopilot は、比較的低いデフォルトの上限 (50m CPU、100Mi メモリ) を設定するため、ご使用の環境によってはすぐに Agent コンテナが OOMKill に達する可能性があります。該当する場合は、トレースエージェントおよびプロセスエージェントのコンテナにもリソース上限を指定することをおすすめします。
カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
# 新しい `kubernetes_state_core` チェックを有効化。
kubeStateMetricsCore:
enabled: true
# kube-state-metrics チャートのデプロイを回避。
# 新しい `kubernetes_state_core` における kube-state-metrics のデプロイは不要。
kubeStateMetricsEnabled: false
agents:
containers:
agent:
# Agent コンテナのリソース
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 200m
memory: 256Mi
traceAgent:
# トレースエージェントコンテナのリソースcontainer
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 100m
memory: 200Mi
processAgent:
# プロセスエージェントコンテナのリソース
resources:
requests:
cpu: 100m
memory: 200Mi
limits:
cpu: 100m
memory: 200Mi
providers:
gke:
autopilot: true
OpenShift にはデフォルトで強化されたセキュリティ (SELinux、SecurityContextConstraints) が搭載されているため、特定のコンフィギュレーションが必要になります:
master
および infra
ノード上にスケジュールするための許容範囲が必要このコンフィギュレーションは OpenShift 3.11 および OpenShift 4をサポートしていますが、OpenShift 4 で最も良い状態で動作します。
カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
criSocketPath: /var/run/crio/crio.sock
# DNS/SSL の設定によっては、Kubelet 証明書を正しく検証できない場合も
# 適切なCA があれば true に切り替え
kubelet:
tlsVerify: false
agents:
podSecurity:
securityContextConstraints:
create: true
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
- effect: NoSchedule
key: node-role.kubernetes.io/infra
operator: Exists
clusterAgent:
podSecurity:
securityContextConstraints:
create: true
kube-state-metrics:
securityContext:
enabled: false
OpenShift で Datadog Operator を使用する場合、OperatorHub または RedHat Marketplace からインストールすることが推奨されています。 以下のコンフィギュレーションは、(SCC/ServiceAccountの設定のため)、この設定と合わせて、Agent が Datadog Operator と同じネームスペースにインストールされている場合を前提として動作します。
apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
agent:
image:
name: "gcr.io/datadoghq/agent:latest"
apm:
enabled: false
process:
enabled: true
processCollectionEnabled: false
log:
enabled: false
systemProbe:
enabled: false
security:
compliance:
enabled: false
runtime:
enabled: false
rbac:
serviceAccountName: datadog-agent-scc
config:
kubelet:
tlsVerify: false
criSocket:
criSocketPath: /var/run/crio/crio.sock
useCriSocketVolume: true
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
- effect: NoSchedule
key: node-role.kubernetes.io/infra
operator: Exists
clusterAgent:
image:
name: "gcr.io/datadoghq/cluster-agent:latest"
config:
externalMetrics:
enabled: false
port: 8443
admissionController:
enabled: false
Rancher のインストールは vanilla Kubernetes に近く、わずかなコンフィギュレーションのみで準備が完了します。
controlplane
および etcd
ノード上にスケジュールするための許容範囲が必要カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
agents:
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
operator: Exists
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
DatadogAgent Kubernetes Resource:
apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
agent:
image:
name: "gcr.io/datadoghq/agent:latest"
apm:
enabled: false
process:
enabled: true
processCollectionEnabled: false
log:
enabled: false
systemProbe:
enabled: false
security:
compliance:
enabled: false
runtime:
enabled: false
config:
kubelet:
tlsVerify: false
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
operator: Exists
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
clusterAgent:
image:
name: "gcr.io/datadoghq/cluster-agent:latest"
config:
externalMetrics:
enabled: false
admissionController:
enabled: false
特殊なコンフィギュレーションは必要ありません。
コンテナのモニタリングを有効にするには、以下を追加します (containerd
check):
カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
criSocketPath: /run/dockershim.sock
env:
- name: DD_AUTOCONFIG_INCLUDE_FEATURES
value: "containerd"
DatadogAgent Kubernetes Resource:
apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
agent:
config:
criSocket:
criSocketPath: /run/dockershim.sock
clusterAgent:
image:
name: "gcr.io/datadoghq/cluster-agent:latest"
config:
externalMetrics:
enabled: false
admissionController:
enabled: false
その他の values.yaml
のサンプルは Helm チャートリポジトリを、
その他の DatadogAgent
サンプルは Datadog Operator リポジトリをご覧ください。
TKG では、以下に示すような小さな構成変更が必要です。例えば、コントローラが master
ノード上の Node Agent をスケジュールするために、許容量を設定することが必要です。
カスタム values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
kubelet:
# Kubelet の証明書は自己署名なので、tlsVerify を false に設定します
tlsVerify: false
# `kube-state-metrics` 依存性チャートのインストールを無効化します。
kubeStateMetricsEnabled: false
# 新しい `kubernetes_state_core` のチェックを有効にします。
kubeStateMetricsCore:
enabled: true
# コントロールプレーンノードで Agent をスケジュールできるように許容範囲を追加します。
agents:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
DatadogAgent Kubernetes Resource:
apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
credentials:
apiSecret:
secretName: datadog-secret
keyName: api-key
appSecret:
secretName: datadog-secret
keyName: app-key
features:
# 新しい `kubernetes_state_core` のチェックを有効にします。
kubeStateMetricsCore:
enabled: true
agent:
config:
kubelet:
# Kubelet の証明書は自己署名なので、tlsVerify を false に設定します
tlsVerify: false
# コントロールプレーンノードで Agent をスケジュールできるように許容範囲を追加します。
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
clusterAgent:
config:
collectEvents: true