こんにちは、SWX3人目の熊谷(悠)です。
セルフマネージド型ノード(EC2)のKubernetesをDatadogで監視する際に必要なAgentのインストール手順を記します。
kubectlの概要と使い方、Kubernetesのコンポーネントが各々どんな役割を持つかざっくり理解できている程度の人向けです。
インストールするサービス
- Datadog Agent(Datadog Node Agent)
- 必須です。DaemonSetとして全てのノードで稼働し、各ノードでメトリクスを収集します。
- Datadog Cluster Agent
- 下構成図のような形で負荷の軽減と権限の最小化が可能です。
- kube-state-metrics
- Datadog Agentでは取得できないクラスター状態メトリクスを生成します。
インストール方法について
DaemonSet
kubectlを用いて必要なリソース一つ一つのマニフェストを適用します。
RBAC, シークレット, 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
参考
Kubernetes クラスターで Datadog Agent を実行する
helm/helm: The Kubernetes Package Manager
helm-charts/charts/datadog at master · DataDog/helm-charts
kubernetes/kube-state-metrics: Add-on agent to generate and expose cluster-level metrics.