Amazon EKS on AWS Fargate

Supported OS Linux Mac OS Windows

インテグレーションバージョン3.2.0

概要

: このページでは、EKS Fargate インテグレーションについて説明します。ECS Fargate については、Datadog の ECS Fargate インテグレーションのドキュメントを参照してください。

AWS Fargate 上にデプロイされている Amazon EKS は、マネージド型の Kubernetes サービスで、標準の Kubernetes 環境で展開とメンテナンスの特定の側面を自動化します。Kubernetes ノードは AWS Fargate によって管理され、ユーザーから分離されるように抽象化されています。

セットアップ

以下の手順では、AWS Fargate 上にデプロイされている Amazon EKS 内にあるコンテナで Datadog Agent v7.17 以上をセットアップする方法を説明します。AWS Fargate を使用していない場合は、Datadog-Amazon EKS インテグレーションドキュメントを参照してください。

AWS Fargate ポッドは物理的なポッドではありません。つまり、CPU、メモリなどのホストベースのシステムチェックを除外します。AWS Fargate ポッドからデータを収集するには、次の機能を有効にするカスタム RBAC を使用して、Agent をアプリケーションポッドのサイドカーとして実行してください。

  • アプリケーションコンテナと Agent を実行しているポッドからの Kubernetes メトリクス収集
  • オートディスカバリー
  • 同じポッド内のコンテナをターゲットにするようにカスタム Agent チェックを構成
  • 同じポッド内のコンテナをターゲットにする APM と DogStatsD

EC2 ノード

AWS Fargate プロファイルでポッドを fargate 上で実行するように指定しない場合、ポッドは従来の EC2 マシンを使用できます。その場合は、Datadog-Amazon EKS インテグレーションセットアップを参照して、インテグレーションからデータを収集してください。これを機能させるには、Agent を EC2 型のワークロードとして実行します。Agent のセットアップは、Kubernetes エージェントのセットアップと同じで、すべてのオプションが利用可能です。EC2 ノード上に Agent をデプロイするには、Datadog Agent の DaemonSet セットアップを使用します。

インストール

AWS EKS Fargate で可観測性が最も高いカバレッジ監視ワークロードを実現するには、次の Datadog インテグレーションをインストールします。

また、EKS を使用して実行している他の AWS サービス(ELBなど)のインテグレーションをセットアップします。

手動インストール

インストールするには、カスタム Agent イメージ datadog/agent (バージョン 7.17 以降) をダウンロードします。

Agent がサイドカーとして実行されている場合、同じポッド上のコンテナとのみ通信できます。監視するすべてのポッドに対して Agent を実行します。

コンフィギュレーション

Fargate ノード上の AWS EKS Fargate で実行しているアプリケーションからデータを収集するには、次のセットアップ手順に従います。

Datadog Live Container View に EKS Fargate コンテナを表示するには、ポッド仕様で shareProcessNamespace を有効にします。プロセス収集を参照してください。

AWS EKS Fargate RBAC

AWS EKS Fargate で Agent をサイドカーとしてデプロイする場合は、次の Agent RBACを使用します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: datadog-agent
rules:
  - apiGroups:
    - ""
    resources:
    - nodes
    - namespaces
    - endpoints
    verbs:
    - get
    - list
  - apiGroups:
      - ""
    resources:
      - nodes/metrics
      - nodes/spec
      - nodes/stats
      - nodes/proxy
      - nodes/pods
      - nodes/healthz
    verbs:
      - get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: datadog-agent
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: datadog-agent
subjects:
  - kind: ServiceAccount
    name: datadog-agent
    namespace: default
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: datadog-agent
  namespace: default

Agent をサイドカーとして実行します

Fargate 型のポッドからデータの収集を開始するには、Datadog Agent v7.17 以上をアプリケーションのサイドカーとしてデプロイします。これは、ポッドで実行されているアプリケーションからマトリクスを収集するために必要な最小コンフィギュレーションです。Datadog Agent のサイドカーをデプロイするため、マニフェストに DD_EKS_FARGATE=true が追加されていることに注意してください。

apiVersion: apps/v1
kind: Deployment
metadata:
 name: "<APPLICATION_NAME>"
 namespace: default
spec:
 selector:
   matchLabels:
     app: "<APPLICATION_NAME>"
 replicas: 1
 template:
   metadata:
     labels:
       app: "<APPLICATION_NAME>"
     name: "<POD_NAME>"
   spec:
     serviceAccountName: datadog-agent
     containers:
     - name: "<APPLICATION_NAME>"
       image: "<APPLICATION_IMAGE>"
     ## Agent をサイドカーとして実行
     - image: datadog/agent
       name: datadog-agent
       env:
       - name: DD_API_KEY
         value: "<YOUR_DATADOG_API_KEY>"
         ## DD_SITE を "datadoghq.eu" に設定して
         ## Agent データを Datadog EU サイトに送信
       - name: DD_SITE
         value: "datadoghq.com"
       - name: DD_EKS_FARGATE
         value: "true"
       - name: DD_CLUSTER_NAME
         value: "<CLUSTER_NAME>"
       - name: DD_KUBERNETES_KUBELET_NODENAME
         valueFrom:
           fieldRef:
             apiVersion: v1
             fieldPath: spec.nodeName
      resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "256Mi"
            cpu: "200m"

: <YOUR_DATADOG_API_KEY>組織の Datadog API キーに置き換えることを忘れないでください。

: メトリクスが目的のクラスターでタグ付けされるように、DD_TAGS のリストに希望の kube_cluster_name:<CLUSTER_NAME> を追加してください。ここで、スペースで区切られた <KEY>:<VALUE> タグを追加することができます。Agent が 7.34+6.34+ の場合は、これは必要ありません。代わりに、DD_CLUSTER_NAME 環境変数を設定します。

Cluster Agent または Cluster Checks Runner の実行

Datadog では、イベント収集Kubernetes リソースビュークラスターチェックなどの機能を利用するために、Cluster Agent を実行することを推奨しています。

EKS Fargate を使用する場合、EKS クラスターが混合ワークロード (Fargate/非 Fargate) を実行しているかどうかによって、2 つのシナリオが考えられます。

EKS クラスターが Fargate と非 Fargate のワークロードを実行し、Node Agent DaemonSet を介して非 Fargate ワークロードを監視する場合は、このデプロイに Cluster Agent/Cluster Checks Runner を追加します。詳細については、Cluster Agent の設定を参照してください。

Cluster Agent トークンは、監視したい Fargate タスクから到達可能でなければなりません。Helm Chart や Datadog Operator を使用している場合、対象のネームスペースにシークレットが作成されるため、デフォルトでは到達不可能です。

これを正しく動作させるためには、2 つの選択肢があります。

  • ハードコードされたトークン値 (Helm では clusterAgent.token、Datadog Operator では credentials.token) を使用する。便利だが、安全性は低い。
  • 手動で作成したシークレット (Helm では clusterAgent.tokenExistingSecret、Datadog Operator では利用不可) を使用し、Fargate タスクを監視する必要があるすべてのネームスペースに複製する。

EKS クラスターが Fargate ワークロードのみを実行する場合、スタンドアロンの Cluster Agent のデプロイが必要です。そして、上記のように、トークンを到達可能にするための 2 つのオプションのうち 1 つを選択します。

以下の Helm の values.yaml を使用します。

datadog:
  apiKey: <YOUR_DATADOG_API_KEY>
  clusterName: <CLUSTER_NAME>
agents:
  enabled: false
clusterAgent:
  enabled: true
  replicas: 2

どちらの場合も、Cluster Agent との通信を可能にするために、Datadog Agent のサイドカーマニフェストを変更する必要があります。

       env:
        - name: DD_CLUSTER_AGENT_ENABLED
          value: "true"
        - name: DD_CLUSTER_AGENT_AUTH_TOKEN
          value: <hardcoded token value> # シークレットを使用する場合は、valueFrom: を使用します
        - name: DD_CLUSTER_AGENT_URL
          value: https://<CLUSTER_AGENT_SERVICE_NAME>.<CLUSTER_AGENT_SERVICE_NAMESPACE>.svc.cluster.local:5005
        - name: DD_ORCHESTRATOR_EXPLORER_ENABLED # Kubernetes リソースビューを取得するために必要です
          value: "true"
        - name: DD_CLUSTER_NAME
          value: <CLUSTER_NAME>

クラスターのパフォーマンス

EKS クラスターのパフォーマンスを把握するには、Cluster Check Runner を有効にして kube-state-metrics サービスからメトリクスを収集します。

メトリクスの収集

インテグレーションのメトリクス

アプリケーションコンテナでオートディスカバリーラベルを使用して、サポートされている Agent インテグレーションのメトリクス収集を開始します。

apiVersion: apps/v1
kind: Deployment
metadata:
 name: "<APPLICATION_NAME>"
 namespace: default
spec:
 replicas: 1
 selector:
   matchLabels:
     app: "<APPLICATION_NAME>"
 template:
   metadata:
     labels:
       app: "<APPLICATION_NAME>"
     name: "<POD_NAME>"
     annotations:
      ad.datadoghq.com/<CONTAINER_NAME>.check_names: '[<CHECK_NAME>]'
      ad.datadoghq.com/<CONTAINER_IDENTIFIER>.init_configs: '[<INIT_CONFIG>]'
      ad.datadoghq.com/<CONTAINER_IDENTIFIER>.instances: '[<INSTANCE_CONFIG>]'
   spec:
     serviceAccountName: datadog-agent
     containers:
     - name: "<APPLICATION_NAME>"
       image: "<APPLICATION_IMAGE>"
     ## Agent をサイドカーとして実行
     - image: datadog/agent
       name: datadog-agent
       env:
       - name: DD_API_KEY
         value: "<YOUR_DATADOG_API_KEY>"
         ## DD_SITE を "datadoghq.eu" に設定して
         ## Agent データを Datadog EU サイトに送信
       - name: DD_SITE
         value: "datadoghq.com"
       - name: DD_EKS_FARGATE
         value: "true"
       - name: DD_KUBERNETES_KUBELET_NODENAME
         valueFrom:
           fieldRef:
             apiVersion: v1
             fieldPath: spec.nodeName
      resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "256Mi"
            cpu: "200m"

:

  • <YOUR_DATADOG_API_KEY>組織の Datadog API キーに置き換えることを忘れないでください。
  • ホストからの cgroups ボリュームを Agent にマウントできないため、Fargate ではコンテナメトリクスを使用できません。Live Containers ビューは、CPU およびメモリに 0 を報告します。

DogStatsD

アプリケーションコンテナから DogStatsD メトリクスを Datadog に転送するように、Agent コンテナのコンテナポート 8125 を設定します。

apiVersion: apps/v1
kind: Deployment
metadata:
 name: "<APPLICATION_NAME>"
 namespace: default
spec:
 replicas: 1
 selector:
   matchLabels:
     app: "<APPLICATION_NAME>"
 template:
   metadata:
     labels:
       app: "<APPLICATION_NAME>"
     name: "<POD_NAME>"
   spec:
     serviceAccountName: datadog-agent
     containers:
     - name: "<APPLICATION_NAME>"
       image: "<APPLICATION_IMAGE>"
     ## Agent をサイドカーとして実行
     - image: datadog/agent
       name: datadog-agent
       ## DogStatsD メトリクスの収集にポート 8125 を有効化
       ports:
        - containerPort: 8125
          name: dogstatsdport
          protocol: UDP
       env:
       - name: DD_API_KEY
         value: "<YOUR_DATADOG_API_KEY>"
         ## DD_SITE を "datadoghq.eu" に設定して
         ## Agent データを Datadog EU サイトに送信
       - name: DD_SITE
         value: "datadoghq.com"
       - name: DD_EKS_FARGATE
         value: "true"
       - name: DD_KUBERNETES_KUBELET_NODENAME
         valueFrom:
           fieldRef:
             apiVersion: v1
             fieldPath: spec.nodeName
      resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "256Mi"
            cpu: "200m"

: <YOUR_DATADOG_API_KEY>組織の Datadog API キーに置き換えることを忘れないでください。

ライブコンテナ

Datadog Agent v6.19+ は、EKS Fargate インテグレーションのライブコンテナをサポートします。ライブコンテナは、Containers ページに表示されます。

ライブプロセス

Datadog Agent v6.19+ は、EKS Fargate インテグレーションのライブプロセスをサポートします。ライブプロセスは、Processes ページに表示されます。ライブプロセスを有効にするには、ポッドの仕様で shareProcessNamespace を有効にします

Kubernetes リソースビュー

Kubernetes のリソースビューを収集するには、Cluster Agent の設定が必要です。

ログの収集

Fluent Bit で EKS on Fargate からログを収集。

EKS のログを CloudWatch Logs にルーティングする Fluent Bit と Datadog にログをルーティングする Datadog Forwarder で EKS Fargate ログを監視することができます。

  1. CloudWatch へログを送信するよう Fluent Bit を構成するには、 CloudWatch Logs を出力先として指定する Kubernetes ConfigMap を作成します。ConfigMap は、ロググループ、リージョン、プレフィックス、文字列、そしてロググループの自動作成の有無を指定します。

     kind: ConfigMap
     apiVersion: v1
     metadata:
       name: aws-logging
       namespace: aws-observability
     data:
       output.conf: |
         [OUTPUT]
             Name cloudwatch_logs
             Match   *
             region us-east-1
             log_group_name awslogs-https
             log_stream_prefix awslogs-firelens-example
             auto_create_group true     
    
  2. Datadog Forwarder を使用して、Cloudwatch からログを収集し、Datadog に送信します。

トレースの収集

Agent コンテナにコンテナポート 8126 をセットアップして、アプリケーションコンテナからトレースを収集します。トレーシングのセットアップ方法について、ご確認ください

apiVersion: apps/v1
kind: Deployment
metadata:
 name: "<APPLICATION_NAME>"
 namespace: default
spec:
 replicas: 1
 selector:
   matchLabels:
     app: "<APPLICATION_NAME>"
 template:
   metadata:
     labels:
       app: "<APPLICATION_NAME>"
     name: "<POD_NAME>"
   spec:
     serviceAccountName: datadog-agent
     ## cgroup v2 による発信点検出のため、Agent をアプリケーションと同じネームスペースに配置する
     shareProcessNamespace: true
     containers:
     - name: "<APPLICATION_NAME>"
       image: "<APPLICATION_IMAGE>"
     ## Agent をサイドカーとして実行
     - image: datadog/agent
       name: datadog-agent
       ## トレースの収集にポート 8126 を有効化
       ports:
        - containerPort: 8126
          name: traceport
          protocol: TCP
       env:
       - name: DD_API_KEY
         value: "<YOUR_DATADOG_API_KEY>"
         ## DD_SITE を "datadoghq.eu" に設定して
         ## Agent データを Datadog EU サイトに送信
       - name: DD_SITE
         value: "datadoghq.com"
       - name: DD_EKS_FARGATE
         value: "true"
       - name: DD_APM_ENABLED
         value: "true"
       - name: DD_KUBERNETES_KUBELET_NODENAME
         valueFrom:
           fieldRef:
             apiVersion: v1
             fieldPath: spec.nodeName
      resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "256Mi"
            cpu: "200m"

: <YOUR_DATADOG_API_KEY>組織の Datadog API キーに置き換えることを忘れないでください。

イベント収集

AWS EKS Fargate API サーバーからイベントを収集するには、EKS クラスター内の Datadog Cluster Agent を実行し、Cluster Agent のイベント収集を有効にします

または、Datadog Cluster Agent をセットアップしてクラスターチェックを有効にするだけでなく、クラスターチェックランナーをデプロイすることもできます。

: Fargate のポッドで Datadog Cluster Agent を実行する場合も、イベントを収集することができます。

プロセスの収集

Agent 6.19+/7.19+ の場合、プロセス収集を使用できます。ポッド仕様で shareProcessNamespace を有効にして、Fargate ポッドで実行されているすべてのプロセスを収集します。例:

apiVersion: v1
kind: Pod
metadata:
  name: <名前>
spec:
  shareProcessNamespace: true
...

: CPU とメモリのメトリクスは使用できません。

収集データ

メトリクス

eks_fargate チェックは、pod_namevirtual_node でタグ付けされたハートビートメトリクス eks.fargate.pods.running を提出するために、ユーザーは実行中のポッドの数を追跡できます。

サービスのチェック

eks_fargate にはサービスチェックが含まれていません。

イベント

eks_fargate にはイベントが含まれていません。

トラブルシューティング

ご不明な点は、Datadog のサポートチームまでお問い合わせください。

その他の参考資料

お役に立つドキュメント、リンクや記事: