Amazon EKS を使用した AWS Fargate の使用開始
このトピックでは、Amazon EKS クラスターを使用して AWS Fargate で Pods の実行を開始する方法について説明します。
CIDR ブロックを使用してクラスターのパブリックエンドポイントへのアクセスを制限する場合は、プライベートエンドポイントアクセスも有効にすることをお勧めします。こうすることで、Fargate Pods がクラスターと通信できるようになります。プライベートエンドポイントが有効になっていない場合、パブリックアクセスに指定する CIDR ブロックに、VPC からのアウトバウンドソースを含める必要があります。詳細については、「Amazon EKS クラスターエンドポイントアクセスコントロール」を参照してください。
前提条件
既存のクラスター。Amazon EKS を使用した AWS Fargate は、AWS GovCloud (米国東部) および AWS GovCloud (米国西部) ではご利用いただけません。既存の Amazon EKS クラスターがなければ、Amazon EKS の使用開始 を参照してください。
既存のノードが Fargate Pods と通信できることを確認します
ノードのない新しいクラスター、またはマネージド型ノードグループのみを持つクラスターを使用している場合は、「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
Fargate Pod 実行ロールを作成する
クラスターが AWS Fargate で Pods を作成する場合、Fargate インフラストラクチャで実行されるコンポーネントは、ユーザーに代わって AWS API にコールを実行す必要があります。Amazon EKS の Pod 実行ロールにより、これらを行うための IAM アクセス許可が付与されます。AWS Fargate Pod 実行ロールを作成するには、「Amazon EKS Pod 実行 IAM ロール」を参照してください。
注記
--fargate
オプションを使用して eksctl
でクラスターを作成した場合は、クラスターに Pod 実行ロールが既にあり、これはパターン eksctl-
で IAM コンソールに表示されます。同様に、my-cluster
-FargatePodExecutionRole-ABCDEFGHIJKL
eksctl
を使用して Fargate プロファイルを作成する場合、eksctl
は Pod 実行ロールを作成します (まだ存在しない場合)。
クラスターの Fargate プロファイルを作成する
クラスターの Fargate で実行されている Pods をスケジューリングする前に、起動時に Fargate を使用する Pods を指定する Fargate プロファイルを定義する必要があります。詳細については、「AWS Fargate プロファイル」を参照してください。
注記
--fargate
オプションを使用して eksctl
でクラスターを作成した場合、クラスターの Fargate プロファイルは、kube-system
と default
の名前空間のすべての Pods のセレクターを使用して既に作成されています。Fargate で使用するその他の名前空間の Fargate プロファイルを作成するには、以下の手順に従います。
Fargate プロファイルを作成するには、eksctl
または AWS Management Consoleを使用します。
CoreDNS の更新
デフォルトでは、CoreDNS は Amazon EKS クラスターの Amazon EC2 インフラストラクチャで実行するように設定されています。クラスター内の Fargate でのみ Pods を実行する場合は、次のステップを実行します。
注記
--fargate
オプションを使用して eksctl
でクラスターを作成した場合は、次のステップ にスキップできます。
次のコマンドを使用して、CoreDNS の Fargate プロファイルを作成します。
をクラスター名に、my-cluster
を アカウント ID に、111122223333
を Pod 実行ロール名に、そしてAmazonEKSFargatePodExecutionRole
、0000000000000001
、0000000000000002
をプライベートサブネットの ID に置き換えます。Pod 実行ロールがない場合は、最初に 作成する 必要があります。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国東部) の AWS リージョン にある場合は、0000000000000003
arn:aws:
をarn:aws-us-gov:
に置き換えます。重要
ロール ARN にパスを含めることはできません。ロール ARN の形式は
arn:aws:iam::
であることが必要です。詳細については、「aws-auth ConfigMap がクラスターへのアクセスを許可しない」を参照してください。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
-
-
Amazon EKS でのアプリケーション負荷分散 をデプロイして、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) コレクターをセットアップします。