Amazon EKS を使用した AWS Fargate の使用開始 - Amazon EKS

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 クラスターがなければ、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-my-cluster-FargatePodExecutionRole-ABCDEFGHIJKL で IAM コンソールに表示されます。同様に、eksctl を使用して Fargate プロファイルを作成する場合、eksctl は pod 実行ロールを作成します (まだ存在しない場合)。

クラスターの Fargate プロファイルを作成する

クラスターの Fargate で実行されている pods をスケジューリングする前に、起動時に Fargate を使用する pods を指定する Fargate プロファイルを定義する必要があります。詳細については、「AWS Fargate プロファイル」を参照してください。

注記

--fargate オプションを使用して eksctl でクラスターを作成した場合、クラスターの Fargate プロファイルは、kube-systemdefault の名前空間のすべての pods のセレクターを使用して既に作成されています。Fargate で使用するその他の名前空間の Fargate プロファイルを作成するには、以下の手順に従います。

Fargate プロファイルを作成するには、eksctl または AWS Management Consoleを使用します。

eksctl

この手順には、eksctl バージョン 0.117.0 以降が必要です。 のバージョンは、以下のコマンドを使用して確認できます。

eksctl version

eksctl のインストールまたはアップグレードの手順については、「eksctl のインストールまたは更新」を参照してください。

eksctl で、Fargate プロファイルを作成するには

以下の eksctl コマンドで Fargate プロファイルを作成し、すべての example value を自分の値に置き換えます。名前空間を指定する必要があります。ただし、--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 プロファイルを作成するには

  1. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

  2. Fargate プロファイルを作成するクラスターを選択します。

  3. [Compute] (コンピューティング) タブを開きます。

  4. [Fargate profiles (Fargate プロファイル)] で、[Add Fargate profile (Fargate プロファイルを追加)] を選択します。

  5. [Configure Fargate profile] (Fargate プロファイルを設定) ページで、次の操作を行います。

    1. [Name] (名前) に Fargate プロファイルの名前を入力します。名前は一意である必要があります。

    2. Pod execution role (ポッド実行ロール) で、Fargate プロファイルで使用する pod 実行ロールを選択します。eks-fargate-pods.amazonaws.com サービスプリンシパルを持つ IAM ロールのみが表示されます。ここにロールが表示されない場合は、ロールを作成する必要があります。詳細については、「Amazon EKS pod 実行 IAM ロール」を参照してください。

    3. [Subnets] (サブネット) ドロップダウンを展開し、名前に Public を含むすべてのサブネットの選択を解除します。Fargate で実行される pods では、プライベートサブネットのみがサポートされます。

    4. [Tags] (タグ) では、オプションで Fargate プロファイルにタグを付けることができます。これらのタグは、pods など、プロファイルに関連付けられた他のリソースには伝達されません。

    5. [Next] を選択します。

  6. [Configure pod selection] (ポッドの選択を設定) ページで、次の操作を行います。

    1. [Namespace] (名前空間) に、pods と照合する名前空間を入力します。

      • kube-system または default など、特定の名前空間を使用して照合できます。

      • 特定のワイルドカード (例: prod-*) を使用して、複数の名前空間 (例: prod-deployment および prod-test) と照合することができます。詳細については、「Fargate プロファイルのワイルドカード」を参照してください。

    2. (オプション) セレクターに Kubernetes ラベルを追加します。特に、指定された名前空間内の pods が一致する必要があるものにそれらを追加します。

      • ラベル infrastructure: fargate をセレクターに追加して、infrastructure: fargate Kubernetes ラベルも持つ指定された名前空間の pods のみがセレクターと一致するようにすることができます。

      • 特定のワイルドカード (例: key?: value?) を使用して、複数の名前空間 (例: keya: valuea および keyb: valueb) と照合することができます。詳細については、「Fargate プロファイルのワイルドカード」を参照してください。

    3. [Next] を選択します。

  7. [Review and create (確認と作成)] ページで、Fargate プロファイルの情報を確認し、[Create (作成)] を選択します。

CoreDNS の更新

デフォルトでは、CoreDNS は Amazon EKS クラスターの Amazon EC2 インフラストラクチャで実行するように設定されています。クラスター内の Fargate でのみ pods を実行する場合は、次のステップを実行します。

注記

--fargate オプションを使用して eksctl でクラスターを作成した場合は、次のステップ にスキップできます。

  1. 次のコマンドを使用して、CoreDNS の Fargate プロファイルを作成します。my-cluster をクラスター名に、111122223333 を アカウント ID に、AmazonEKSFargatePodExecutionRole を pod 実行ロール名に、そして 000000000000000100000000000000020000000000000003 をプライベートサブネットの ID に置き換えます。pod 実行ロールがない場合は、最初に 作成する 必要があります。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国東部) の AWS リージョン にある場合は、arn:aws:arn:aws-us-gov: に置き換えます。

    重要

    ロール ARN にパスを含めることはできません。ロール ARN の形式は arn:aws:iam::111122223333:role/role-name であることが必要です。詳細については、「aws-auth ConfigMap がクラスターへのアクセスを許可しない」を参照してください。

    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
  2. 次のコマンドを実行して、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 で実行するために既存のアプリケーションの移行を開始できます。

    1. アプリケーションの Kubernetes 名前空間と Kubernetes ラベルに一致する Fargate プロファイルを作成します

    2. 既存のいずれかの 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) コレクターをセットアップします。