EKSにDatadog Agentインストール


セルフマネージド型ノード(EC2)のKubernetesをDatadogで監視する際に必要なAgentのインストール手順を記します。
Kubernetesあんまり分からない人向けです。
kubectlの概要と使い方、Kubernetesのコンポーネントが各々どんな役割を持つかざっくり理解できている程度

インストールするサービス

  • Datadog Agent(Datadog Node Agent)
    • 必須です。DaemonSetとして全てのノードで稼働し、各ノードでメトリクスを収集します。
  • Datadog Cluster Agent
    • 下構成図のような形で負荷の軽減と権限の最小化が可能です。
  • kube-state-metrics
    • Datadog Agentでは取得できないクラスター状態メトリクスを生成します。

Datadog Cluster Agent のご紹介 | Datadogより引用

インストール方法について

DaemonSet

kubectlを用いて必要なリソース一つ一つのマニフェストを適用します。
RBACのRole, シークレット, Datadog Node Agent, Datadog Cluster Agent, kube-state-metricsを個別に直接デプロイします。

Helm

KubernetesパッケージマネージャーのHelmを用います。
デフォルトのチャート設定で必要なリソースが一括デプロイされます。
こちらの方が非常に簡単にインストールできます。Datadog サイトに記載されているKubernetes へのインストール手順もこちらです。
本稿でもHelmを用います。

環境

操作端末とセルフマネージド型ワーカーノードのOSはAmazonLinux2です。
EKSのクラスター等はeksctlで作成したリソースを使用しました。
kubectlで必要な操作の為にkubeconfig設定やRBAC認可を受けた状態にしてください。(eksctlでクラスターを作成した端末と同じなら考慮不要)

操作端末環境
$ uname -a
Linux ip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.internal 4.14.231-173.361.amzn2.x86_64 #1 SMP Mon Apr 26 20:57:08 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ kubectl version --short --client
Client Version: v1.19.6-eks-49a6c0

手順

Helmをインストール

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.6.0-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

$ helm version
version.BuildInfo{Version:"v3.6.0", GitCommit:"7f2df6467771a75f5646b7f12afb408590ed1755", GitTreeState:"clean", GoVersion:"go1.16.3"}

設定ファイル作成

Datadogが公開しているデフォルト設定が記載されたHelmのチャートファイルをダウンロードします。

$ curl -O https://raw.githubusercontent.com/DataDog/helm-charts/master/charts/datadog/values.yaml

Helmリポジトリ追加

Helm Datadog リポジトリおよび Helm 安定版リポジトリ (Kube State Metrics チャート用) を追加します。

$ helm repo add datadog https://helm.datadoghq.com
"datadog" has been added to your repositories
$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "datadog" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈

インストール実行

Datadog サイトでAPIキーを取得します。
(Datadog サイトのIntegrasions>Agent>kubernetesにもコピペできるインストールコマンドの記載があります。)

以下インストールコマンド内の

  • RELEASE_NAMEを適当な名前で置き換えます。(例えばdatadogへ)
  • DATADOG_API_KEYを先程取得したAPIキーで置き換えます。
  • TARGET_SYSTEMをワーカーノードのOSプラットフォーム名(linuxまたはwindows)で置き換えます。※デフォルトlinuxなので、linuxなら指定自体不要
インストールコマンド
helm install <RELEASE_NAME> -f values.yaml --set datadog.apiKey=<DATADOG_API_KEY> datadog/datadog --set targetSystem=<TARGET_SYSTEM>

インストールします。

$ helm install datadog -f values.yaml --set datadog.apiKey=abcdefghijklmnopqrstuvwxyz1234567890 datadog/datadog
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/ec2-user/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/ec2-user/.kube/config
NAME: datadog
LAST DEPLOYED: Thu Jun  3 03:08:46 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Datadog agents are spinning up on each node in your cluster. After a few
minutes, you should see your agents starting in your event stream:
    https://app.datadoghq.com/event/stream

確認

Datadog Cluster Agentとkube-state-metricsのPodが一つと、各ワーカーノード上でDatadog AgentのPodがDaemonSetとして1つづつ起動できていればOKです。

$ kubectl get all
NAME                                              READY   STATUS    RESTARTS   AGE
pod/datadog-cluster-agent-7cf7c4c9db-tcd4r        1/1     Running   0          75s
pod/datadog-fkmmn                                 2/2     Running   0          75s
pod/datadog-j259t                                 2/2     Running   0          75s
pod/datadog-kube-state-metrics-699964c777-g8ktf   1/1     Running   0          75s

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/datadog-cluster-agent        ClusterIP   10.100.215.13   <none>        5005/TCP   75s
service/datadog-kube-state-metrics   ClusterIP   10.100.99.35    <none>        8080/TCP   75s
service/kubernetes                   ClusterIP   10.100.0.1      <none>        443/TCP    100m

NAME                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/datadog   2         2         2       2            2           kubernetes.io/os=linux   76s

NAME                                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/datadog-cluster-agent        1/1     1            1           76s
deployment.apps/datadog-kube-state-metrics   1/1     1            1           76s

NAME                                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/datadog-cluster-agent-7cf7c4c9db        1         1         1       76s
replicaset.apps/datadog-kube-state-metrics-699964c777   1         1         1       76s

Eventsから

  1. Datadog サイトへログイン
  2. 画面左ナビバーの「Events」をクリック
  3. 各ワーカーノードインスタンス分のDatadog Agent has startedイベントとDatadog Cluster Agentイベントが一つあればOK

Infrastructure Listから

  1. Datadog サイトへログイン
  2. 画面左ナビバーの「Infrastructure」>「Infrastructure List」をクリック
  3. ワーカーノードインスタンスのStatus列左部にDatadog Agentの骨のようなアイコンが表示されていればOK

アンインストール

インストールしたDatadog Agentをアンインストールしたい場合はRELEASE_NAMEを指定してhelm uninstallコマンドを実行してください。

$ helm uninstall datadog

参考

Kubernetes クラスターで Datadog Agent を実行する