AWS Fargate は、ユーザーが基盤となるインフラストラクチャーを考慮することなくコンテナ化されたアプリケーションを実行できるため、Amazon Elastic Contaier Service(ECS) において着実にその利用を伸ばしています。本日、AWS は AWS Fargate における Amazon Elastic Kubernetes Service (EKS) のサポートを一般に開始したことを発表しました。これで、Amazon EKS のユーザーは EC2のワーカーノードを手動でプロビジョニングしなくても、AWS Fargate でインフラストラクチャーをシームレスに管理することが可能になります。
Datadog では、AWS との連携によりこの AWS Fargate における Amazon EKS のローンチに対応し、自動的にメトリクスを収集し、環境のより詳細な可視化を実現しています。このインテグレーションには、オートディスカバリー のサポートも含まれるため、Datadog Agent は即座にクラスターでアプリケーションの実行を検出し、モニタリングデータを収集します。また Datadog APM を構成し、Amazon EKS で実行中のアプリケーションから分散トレースを収集して、リアルタイムでパフォーマンスをモニタリングすることもできます。
この記事では、AWS Fargate を使用した Amazon EKS で実行中のアプリケーションを可視化するために Datadog Agent をデプロイする方法を、例を使用しながらご紹介します。
AWS Fargate の Amazon EKS で Datadog をデプロイ
AWS Fargate は Amazon EKS の基盤となるインフラストラクチャーを分離し、コンテナにオンデマンドの計算能力を提供します。全てのポッドが確実にモニタリングされるよう、通常の Kubernetes クラスターで行うようにノードに Datadog Agent をデプロイするのではなく、カスタムイメージと 各ポッドでサイドカーコンテナとしての Datadog Agent を実行する必要があります。AWS Fargate と Amazon EC2 インスタンスのそれぞれで実行中のポッドがあるなど、Amazon EKS クラスターを混合して実行している場合も、EC2 インスタンスに Agent を DaemonSet としてデプロイ する必要があります。
また、Datadog Agent が Kubernetes API にモニタリングデータを照会できるよう、Amazon EKS でロールベースのアクセスコントロール (RBAC) を設定する必要があります。Datadog サービスアカウント、ClusterRole、ClusterRoleBinding の設定に関する詳細については ドキュメント をご覧ください。アプリケーションが RBAC も利用する場合は、Agent コンテナおよびアプリケーションコンテナに必要な承認がすべてあることを確認してください。例えば、アプリケーションのサービスアカウントを Agent のクラスターロールにリンクする ClusterRoleBinding を作成したり、アプリケーションのサービスアカウントに関連付けられた ClusterRole に Datadog Agent の承認を追加したりする必要があります。
AWS Fargate の Amazon EKS で Datadog をデプロイするには、デプロイマニフェストで 3 つの環境変数を定義します。
DD_API_KEY
: お客様の Datadog APIキーDD_EKS_FARGATE
:true
に設定DD_KUBERNETES_KUBELET_NODENAME
: 以下の例で指定されているように設定
以下の例では、Redis コンテナと同じポッドのサイドカーとして、コンテナ化された Datadog Agent がデプロイされます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: redis
name: redis
annotations:
ad.datadoghq.com/redis.check_names: '["redisdb"]'
ad.datadoghq.com/redis.init_configs: '[{}]'
ad.datadoghq.com/redis.instances: |
[
{
"host": "%%host%%",
"port": "6379"
}
]
spec:
serviceAccountName: datadog-agent
containers:
- name: redis
image: redis:latest
args:
- "redis-server"
ports:
- containerPort: 6379
- image: datadog/agent
name: datadog-agent
env:
- name: DD_API_KEY
value: "<YOUR_DATADOG_API_KEY>"
- name: DD_TAGS
value: "[clustername:my-eks-fargate-cluster]"
- name: DD_EKS_FARGATE
value: "true"
- name: DD_KUBERNETES_KUBELET_NODENAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
この例では、ポッドアノテーション を追加し、オートディスカバリーを構成しています。つまり、Agent は同じポッド内の Redis コンテナで、自動的にチェックを実行します。
また、ドキュメントの手順 に従って、AWS Fargate の Amazon EKS で Datadog の Cluster Agent をデプロイすることも可能です。Cluster Agent はひとつのポッドを実行し、API サーバーからイベントを収集します。また、構成済みの場合(例えば NGINX サービスのレイテンシーをモニタリングする HTTP チェック を実行する場合など)は、クラスターチェック も完了します。
Application Load Balancer など、AWS Fargate で Amazon EKS と一緒に実行中の AWS サービスをモニタリングするには、必ず AWS インテグレーション を有効にします。
Datadog を使用した AWS Fargate 上の Amazon EKS の監視
Agent を AWS Fargate の Amazon EKS で実行中のアプリケーションにデプロイすると、オートディスカバリー (例えば上記例の Redis) を介して検出されたサービスからのデータと共に、Datadog に Kubernetes メトリクスが表示されます。Datadog は Fargate によって管理されていないホストレベルのメトリクスを EKS ノードから収集できますが、インフラストラクチャーは AWS が管理するため、Fargate がプロビジョンした「ホスト」からのシステムレベルのメトリクスは表示されません。
このインテグレーションには、通常の Kubernetes および Docker のタグ (docker_image
、pod_name
, kube_deployment
など) が含まれるため、コンテナインフラストラクチャーのサブセットのフィルタリングに使用できます。マニフェストに DD_TAGS
環境変数が含まれている場合は、そこに指定されたカスタムタグを使用することもできます。
すばやく、詳細まで可視化
AWS Fargate の Amazon EKS を使えば、チームはコンテナアプリケーションの開発にさらに多くの時間を注ぎ、基盤となるインフラストラクチャーの管理時間を軽減することができます。AWS Fargate の Amazon EKS のポッドの実行についての詳細は、公式ドキュメントを参照してください。Amazon EKS のモニタリングに関する詳細は、詳細ガイド をご覧ください。
管理方法あるいは実行場所に関わりなく、動的なコンテナ環境をリアルタイムで表示できることを大変うれしく思います。Datadog をすでにご利用の場合は、ドキュメント で開始方法をご確認ください。まだご利用でない場合は、ぜひ無料トライアルをお試しください。