👞

Datadog AgentをGKE autopilot環境に導入する際のtips

2024/06/28に公開

梅雨の季節に"歩き方"を忘れてしまったので初投稿です。

弊社では監視サービスの1つとしてDatadogを利用しています。そのagentをGKE/autopilot環境に導入する際いくつかハマりどころがあったため、同じ轍を踏む人が出ないようここに書き記しておきます。

autopilot用の設定

弊社では一部k8s clusterでGKE autopilotを利用しています。

Helmを通してagentをインストールする際、autopilot用のフラグを立てる必要があります

たとえば values.yaml から書き換える際は以下のとおりです:

providers:
  gke:
    autopilot: true

注意点として、現状autopilot環境ではいくつかの機能が利用できないようです(helm install時に制約のある機能についてのメッセージが表示されるはずです)。

詳細は公式のドキュメントを参照してください。

spot instanceを利用している際の注意点

また、spot instanceを利用していると、デフォルトではDatadog Agentがうまく配置されず、ロギングなどの機能が利用できないことも留意しておく必要があります。ドキュメントにもこの点について記載があります:

Using Spot Pods in GKE Autopilot clusters introduces taints to these GKE nodes. To use Spot Pods, additional configuration is required to provide the Datadog Agent with tolerations.

(参考)https://docs.datadoghq.com/containers/kubernetes/distributions/?tab=helm#spot-pods-and-instances, 2024年6月28日 参照

上記ドキュメントに記載がされているとおり、以下のような設定を入れることでspot instanceを利用しているnodeについてもagentの監視対象にできます:

agents:
  tolerations:
  - effect: NoSchedule
    key: cloud.google.com/gke-spot
    operator: Equal
    value: "true"

弊社では開発環境にてspot instanceを利用しているのですが、agentのインストール自体はうまくいっているものの、特定のdeploymentについてロギングが利用できず四苦八苦しました。この制約を知ってないとはまりやすい罠です。

autodiscovery設定の上書き

Datadog AgentはApacheやRedisなどのよく知られているリソースについて、事前定義されているコンフィグを元にautodiscoveryを実行します。対象となるリソースはこちらに記載があります。

たとえば、agent側で事前定義されているURLやport番号と実際にデプロイされているそれらとで差異がある場合はうまく監視ができないため、こちら側でautodiscoveryの設定を上書きする必要があります。

GKEでは(正確にはそのコンポーネントの1つであるDataplaneでは)ciliumを内部で利用しているのですが、弊社環境ではこのport番号が事前定義されているそれと違ったため、agentインストール時にエラーが出てしまっていました。

この問題を解決するためには、以下のような設定を入れる必要があります:

datadog:
  confd:
    cilium.yaml: |-
      ad_identifiers:
        - cilium
      init_config:
      instances:
        - agent_endpoint: http://%%host%%:[actual port number]/metrics
          use_openmetrics: true
  # 事前定義されているコンフィグを見ないようにする
  ignoreAutoConfig:
  - cilium

他にもベンダーによってカスタマイズされているリソースでは、port番号やURLが異なっている場合があると思います。その際はそれぞれのリソースについて設定の上書きが必要となるでしょう。

agentへのリソース割り当て

弊社環境ではagentインストール時にagentの再起動が多発する事象が発生しました。これはagentへのリソース割り当てが不足していることが原因で、CPU/memへの割り当てをそれぞれ増やすことで解決しました。

autopilot環境では往々にしてリソース不足になりがちなようです。ドキュメントにもその旨の記載があります。

Autopilot sets a relatively low default limit (50m CPU, 100Mi memory) that may lead the Agent container to quickly OOMKill depending on your environment.

(参考)https://docs.datadoghq.com/containers/kubernetes/distributions/?tab=helm#autopilot, 2024年6月28日 参照

監視するサービス・コンテナの量や流れてくるログやトレースの量によって適切なリソース割り当ては変わってくるため、導入時にはこれらの最適な(あるいは、少なくとも再起動が発生しない)値を探す必要があります。

まとめ

以上、弊社でのDatadog Agent導入時に気を付ける必要があったポイントをまとめました。これらの情報が少しでも参考になっていたら幸いです。

また、利用しているサービスの組み合わせ次第では上記以外の問題も発生する余地があります。弊社ではそのような際にDatadog Agent repoのissue trackerやDatadogサポートチームによるサポートに大いに助けられました。困ったらとりあえず類似の事例がないかissue trackerを参照してみると良さそうです。

Canary Tech Blog

Discussion