クラスターの AWS Fargate の使用を開始する
重要
Amazon EKS を使用した AWS Fargate は、AWS GovCloud (米国東部) および AWS GovCloud (米国西部) ではご利用いただけません。
このトピックでは、Amazon EKS クラスターを使用して AWS Fargate で Pods の実行を開始する方法について説明します。
CIDR ブロックを使用してクラスターのパブリックエンドポイントへのアクセスを制限する場合は、プライベートエンドポイントアクセスも有効にすることをお勧めします。こうすることで、Fargate Pods がクラスターと通信できるようになります。プライベートエンドポイントが有効になっていない場合、パブリックアクセスに指定する CIDR ブロックに、VPC からのアウトバウンドソースを含める必要があります。詳細については、「クラスター API サーバーエンドポイントへのネットワークアクセスを制御する」を参照してください。
前提条件
既存のクラスター。既存の Amazon EKS クラスターがなければ、Amazon EKS の使用を開始する を参照してください。
ステップ 1: 既存のノードが Fargate Pods と通信できることを確認する
ノードのない新しいクラスター、またはマネージド型ノードグループ (マネージドノードグループを使用してノードライフサイクルを簡素化する を参照) のみを持つクラスターを使用している場合は、「ステップ 2: Fargate Pod 実行ロールを作成する」に進みます。
既にそれに関連付けられているノードがある既存のクラスターで作業していると仮定します。これらのノードの Pods が Fargate で実行されている Pods と自由に通信できることを確認します。Fargate で実行されている Pods は、関連付けられているクラスターのクラスターセキュリティグループを使用するように自動的に設定されます。クラスター内の既存のノードが、クラスターセキュリティグループとの間でトラフィックを送受信できることを確認します。マネージドノードグループもクラスターセキュリティグループを使用するように自動的に設定されるため、この互換性を変更または確認する必要はありません (「マネージドノードグループを使用してノードライフサイクルを簡素化する」を参照)。
eksctl
または Amazon EKS マネージド型 AWS CloudFormation テンプレートで作成された既存のノードグループの場合、クラスターセキュリティグループをノードに手動で追加できます。または、ノードグループの Auto Scaling グループ起動テンプレートを変更して、クラスターセキュリティグループをインスタンスにアタッチすることもできます。詳細については、Amazon VPC ユーザーガイドのインスタンスのセキュリティグループを変更するを参照してください。
AWS Management Console で、クラスターの [Networking] (ネットワーク) セクションでクラスターのクラスターセキュリティグループを確認できます。これを行うには、次の AWS CLI コマンドを実行します。このコマンドを使用する場合は、my-cluster
をご自分のクラスターの名前に置き換えます。
aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId
ステップ 2: Fargate Pod 実行ロールを作成する
クラスターが AWS Fargate で Pods を作成する場合、Fargate インフラストラクチャで実行されるコンポーネントは、ユーザーに代わって AWS API にコールを実行す必要があります。Amazon EKS の Pod 実行ロールにより、これらを行うための IAM アクセス許可が付与されます。AWS Fargate Pod 実行ロールを作成するには、「Amazon EKS Pod 実行 IAM ロール」を参照してください。
注記
--fargate
オプションを使用して eksctl
でクラスターを作成した場合は、クラスターに Pod 実行ロールが既にあり、これはパターン eksctl-my-cluster-FargatePodExecutionRole-ABCDEFGHIJKL
で IAM コンソールに表示されます。同様に、eksctl
を使用して Fargate プロファイルを作成する場合、eksctl
は Pod 実行ロールを作成します (まだ存在しない場合)。
ステップ 3: クラスターの Fargate プロファイルを作成する
クラスターの Fargate で実行されている Pods をスケジューリングする前に、起動時に Fargate を使用する Pods を指定する Fargate プロファイルを定義する必要があります。詳細については、「起動時にどの Pods が AWS Fargate を使用するのかを定義する」を参照してください。
注記
--fargate
オプションを使用して eksctl
でクラスターを作成した場合、クラスターの Fargate プロファイルは、kube-system
と default
の名前空間のすべての Pods のセレクターを使用して既に作成されています。Fargate で使用するその他の名前空間の Fargate プロファイルを作成するには、以下の手順に従います。
Fargate プロファイルを作成するには、次のツールのいずれかを使用します。
eksctl
この手順には、eksctl
バージョン 0.194.0
以降が必要です。お使いのバージョンは、以下のコマンドを使用して確認できます。
eksctl version
eksctl
のインストールまたはアップグレードの手順については、eksctl
ドキュメントの「インストール
eksctl
で、Fargate プロファイルを作成するには
以下の eksctl
コマンドで Fargate プロファイルを作成し、すべてのサンプル値
を自分の値に置き換えます。名前空間を指定する必要があります。ただし、--labels
オプションは必須ではありません。
eksctl create fargateprofile \ --cluster my-cluster \ --name my-fargate-profile \ --namespace my-kubernetes-namespace \ --labels key=value
my-kubernetes-namespace
ラベルおよび key=value
ラベルには、特定のワイルドカードを使用できます。詳細については、「Fargate プロファイルのワイルドカード」を参照してください。
AWS Management Console
AWS Management Console で、Fargate プロファイルを作成するには
-
Amazon EKS コンソール
を開きます。 -
Fargate プロファイルを作成するクラスターを選択します。
-
[コンピューティング] タブを開きます。
-
[Fargate プロファイル] で、[Fargate プロファイルを追加] を選択します。
-
[Fargate プロファイルを設定] ページで、次の操作を行います。
-
[名前] に Fargate プロファイルの名前を入力します。名前は一意である必要があります。
-
Pod execution role (ポッド実行ロール) で、Fargate プロファイルで使用する Pod 実行ロールを選択します。
eks-fargate-pods.amazonaws.com
サービスプリンシパルを持つ IAM ロールのみが表示されます。ここにロールが表示されない場合は、ロールを作成する必要があります。詳細については、「Amazon EKS Pod 実行 IAM ロール」を参照してください。 -
選択した [サブネット] を必要に応じて変更します。
注記
Fargate で実行される Pods では、プライベートサブネットのみがサポートされます。
-
[タグ] では、オプションで Fargate プロファイルにタグを付けることができます。これらのタグは、Pods など、プロファイルに関連付けられた他のリソースには伝達されません。
-
[Next] を選択します。
-
-
[Pod の選択を設定] ページで、次の操作を行います。
-
[名前空間] に、Pods と照合する名前空間を入力します。
-
kube-system
またはdefault
など、特定の名前空間を使用して照合できます。 -
特定のワイルドカード (例:
prod-*
) を使用して、複数の名前空間 (例:prod-deployment
およびprod-test
) と照合することができます。詳細については、「Fargate プロファイルのワイルドカード」を参照してください。
-
-
(オプション) セレクターに Kubernetes ラベルを追加します。特に、指定された名前空間内の Pods が一致する必要があるものにそれらを追加します。
-
ラベル
infrastructure: fargate
をセレクターに追加して、infrastructure: fargate
Kubernetes ラベルも持つ指定された名前空間の Pods のみがセレクターと一致するようにすることができます。 -
特定のワイルドカード (例:
key?: value?
) を使用して、複数の名前空間 (例:keya: valuea
およびkeyb: valueb
) と照合することができます。詳細については、「Fargate プロファイルのワイルドカード」を参照してください。
-
-
[Next] を選択します。
-
-
[確認と作成] ページで、Fargate プロファイルの情報を確認し、[作成] を選択します。
ステップ 4: CoreDNS を更新する
デフォルトでは、CoreDNS は Amazon EKS クラスターの Amazon EC2 インフラストラクチャで実行するように設定されています。クラスター内の Fargate でのみ Pods を実行する場合は、次のステップを実行します。
注記
--fargate
オプションを使用して eksctl
でクラスターを作成した場合は、次のステップ にスキップできます。
-
次のコマンドを使用して、CoreDNS の Fargate プロファイルを作成します。
my-cluster
をクラスター名に、111122223333
をアカウント ID に、AmazonEKSFargatePodExecutionRole
を Pod 実行ロールの名前に、0000000000000001
、0000000000000002
、0000000000000003
をプライベートサブネットの ID に置き換えます。Pod 実行ロールがない場合は、最初に作成する必要があります (ステップ 2: Fargate Pod 実行ロールを作成する を参照)。重要
ロール ARN に
/
以外のパスを含めることはできません。例えば、ロールの名前がdevelopment/apps/my-role
の場合、ロールの ARN を指定するときにmy-role
に変更する必要があります。ロール ARN の形式はarn:aws:iam::111122223333:role/role-name
であることが必要です。aws eks create-fargate-profile \ --fargate-profile-name coredns \ --cluster-name my-cluster \ --pod-execution-role-arn arn:aws:iam::111122223333:role/AmazonEKSFargatePodExecutionRole \ --selectors namespace=kube-system,labels={k8s-app=kube-dns} \ --subnets subnet-0000000000000001 subnet-0000000000000002 subnet-0000000000000003
-
次のコマンドを実行して、CoreDNS Pods から
eks.amazonaws.com/compute-type : ec2
アノテーションを削除します。kubectl patch deployment coredns \ -n kube-system \ --type json \ -p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'
次のステップ
-
以下のワークフローを使用すると、Fargate で実行するために既存のアプリケーションの移行を開始できます。
-
アプリケーションの Kubernetes 名前空間と Kubernetes ラベルと一致する Fargate プロファイルの作成。
-
既存のいずれかの Pods を削除および再作成し、Fargate でスケジューリングされるようにします。例えば、以下のコマンドでは、
coredns
デプロイのロールアウトがトリガーされます。名前空間とデプロイタイプを変更して、特定の Pods を更新できます。kubectl rollout restart -n kube-system deployment coredns
-
-
Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングする をデプロイして、Fargate で実行されている Pods が Ingress オブジェクトを使用できるようにします。
-
Vertical Pod Autoscaler を使用してポッドリソースを調整する を使用して Fargate Pods の CPU とメモリの適切な初期サイズを設定し、Horizontal Pod Autoscaler を使用してポッドデプロイをスケールする を使用してそれらの Pods をスケールできます。Vertical Pod Autoscaler で、より上位の CPU とメモリの組み合わせを持つ Fargate に Pods を自動的に再デプロイする場合は、Vertical Pod Autoscaler のモードを
Auto
またはRecreate
に設定します。これは、正しい機能を保証するためです。詳細については、「GitHub」で「Vertical Pod Autoscalerのドキュメント」を参照してください。 -
これらの手順に従って、アプリケーションをモニタリングするための AWS Distro for OpenTelemetry
(ADOT) コレクターをセットアップします。