クラスターの AWS Fargate の使用を開始する - Amazon EKS

クラスターの 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-systemdefault の名前空間のすべての 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 プロファイルを作成するには

  1. Amazon EKS コンソールを開きます。

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

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

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

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

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

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

    3. 選択した [サブネット] を必要に応じて変更します。

      注記

      Fargate で実行される Pods では、プライベートサブネットのみがサポートされます。

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

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

  6. [Pod の選択を設定] ページで、次の操作を行います。

    1. [名前空間] に、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. [確認と作成] ページで、Fargate プロファイルの情報を確認し、[作成] を選択します。

ステップ 4: CoreDNS を更新する

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

注記

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

  1. 次のコマンドを使用して、CoreDNS の Fargate プロファイルを作成します。my-cluster をクラスター名に、111122223333 をアカウント ID に、AmazonEKSFargatePodExecutionRole を Pod 実行ロールの名前に、000000000000000100000000000000020000000000000003 をプライベートサブネットの 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
  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"}]'

次のステップ