起動時にどの Pods が AWS Fargate を使用するのかを定義する - Amazon EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

起動時にどの Pods が AWS Fargate を使用するのかを定義する

重要

Amazon EKS を使用した AWS Fargate は、AWS GovCloud (米国東部) および AWS GovCloud (米国西部) ではご利用いただけません。

クラスター内の Fargate で Pods をスケジュールする前に、起動時にどの Pods が Fargate を使用するかを指定する Fargate プロファイルを少なくとも 1 つ定義する必要があります。

管理者として、Fargate プロファイルを使用してどの Pods が Fargate で実行されるかを宣言できます。これはプロファイルのセレクターを介して行うことができます。1 つのプロファイルに最大 5 つのセレクターを追加できます。各セレクターには名前空間が含まれている必要があります。セレクターにはラベルを含めることもできます。ラベルフィールドは、複数のオプションのキーと値のペアで構成されます。セレクターに一致するポッドは Fargate でスケジュールされます。ポッドは、セレクターで指定された名前空間とラベルを使用して照合されます。名前空間セレクターがラベルなしで定義されている場合、Amazon EKS は、プロファイルを使用して、その名前空間で実行されるすべての Pods を Fargate にスケジュールしようとします。スケジュールされる Pod が Fargate プロファイルのセレクターのいずれかと一致する場合、その Pod は Fargate でスケジュールされます。

Pod が複数の Fargate プロファイルと一致する場合、次の Kubernetes ラベルを Pod 仕様に追加することで、Pod がどのプロファイルを使用するかを指定することができます: eks.amazonaws.com/fargate-profile: my-fargate-profile。Pod を Fargate にスケジューリングするには、そのプロファイル内のセレクターに一致させる必要があります。Kubernetes アフィニティ/アンチアフィニティルールは適用されず、Amazon EKS Fargate Pods では不要です。

Fargate プロファイルを作成する際は、Pod 実行ロールを指定する必要があります。この実行ロールは、プロファイルを使用して Fargate インフラストラクチャで実行される Amazon EKS コンポーネントのためのものです。認証のためにクラスターの Kubernetes ロールベースのアクセスコントロール (RBAC) に追加されます。これにより、Fargate インフラストラクチャで実行されている kubelet が Amazon EKS クラスターに登録され、クラスター内でノードとして表示されるようになります。Pod 実行ロールは、Amazon ECR イメージリポジトリへの読み取りアクセスを許可するために、Fargate インフラストラクチャへの IAM アクセス許可も提供します。詳細については、「Amazon EKS Pod 実行 IAM ロール」を参照してください。

Fargate プロファイルは変更できません。ただし、新しい更新されたプロファイルを作成して既存のプロファイルを置き換え、その後元のプロファイルを削除することはできます。

注記

Fargate プロファイルを使用して実行中の Pods は、プロファイルが削除されると停止され、保留状態になります。

クラスターのいずれかの Fargate プロファイルが DELETING ステータスである場合は、Fargate プロファイルの削除が完了するのを待ってから、そのクラスターに他のプロファイルを作成する必要があります。

Amazon EKS と Fargate は、Fargate プロファイルで定義されている各サブネットに Pods を分散させます。ただし、分散が偏ってしまう場合があります。均等な分散が必要な場合は、2 つの Fargate プロファイルを使用してください。2 つのレプリカをデプロイし、ダウンタイムを発生させたくないシナリオでは、均等な分散が重要になります。各プロファイルにはサブネットを 1 つだけ含めることをお勧めします。

Fargate プロファイルのコンポーネント

Fargate プロファイルには、次のコンポーネントが含まれています。

ポッド実行ロール

クラスターが AWS Fargate で Pods を作成するとき、Fargate インフラストラクチャ上で実行されている kubelet は、ユーザーに代わって AWS API にコールを実行する必要があります。例えば、Amazon ECR からコンテナイメージを取得するためのコールを行う必要があります。Amazon EKS の Pod 実行ロールにより、これらを行うための IAM アクセス許可が付与されます。

Fargate プロファイルを作成する際は、Pods で使用する Pod 実行ロールを指定する必要があります。このロールは、認証のためにクラスターの Kubernetes ロールベースのアクセスコントロール (RBAC) に追加されます。これにより、Fargate インフラストラクチャで実行されている kubelet が Amazon EKS クラスターに登録され、クラスター内でノードとして表示されるようになります。詳細については、「Amazon EKS Pod 実行 IAM ロール」を参照してください。

サブネット

このプロファイルを使用する Pods を起動するサブネットの ID。現時点では、Fargate で実行されている Pods にはパブリック IP アドレスが割り当てられていません。したがって、このパラメータには、プライベートサブネット (インターネットゲートウェイへの直接ルートなし) のみが受け入れられます。

セレクター

この Fargate プロファイルを使用するために Pods に一致するセレクター。1 つの Fargate プロファイルに最大 5 つのセレクターを指定できます。セレクターには次のコンポーネントがあります:

  • 名前空間 – セレクターの名前空間を指定する必要があります。セレクターはこの名前空間で作成された Pods のみを照合します。ただし、複数のセレクターを作成して複数の名前空間をターゲットにすることはできます。

  • ラベル – オプションで、セレクターに一致する Kubernetes ラベルを指定できます。セレクターは、セレクターで指定されているすべてのラベルを持つ Pods のみに一致します。

Fargate プロファイルのワイルドカード

名前空間、ラベルキー、およびラベル値のセレクター基準では、Kubernetes で許可されている文字に加えて、* および ? の使用が許可されています。

  • * は、文字なし、1 文字、または複数の文字を表します。例: prod*prod および prod-metrics を表します。

  • ? は 1 文字を表します (例: value?valuea を表します)。しかし、value および value-a を表すことはできません。? は厳密に 1 文字だけを表すためです。

これらのワイルドカード文字は、任意の位置や組み合わせで使用できます (例: prod**dev、および frontend*?)。正規表現など、他のワイルドカードやパターンマッチング形式はサポートされていません。

Pod 仕様内の名前空間とラベルに一致するプロファイルが複数ある場合、Fargate はプロファイル名でソートされた英数字に基づいてプロファイルを選択します。例えば、(beta-workload という名前の) プロファイル A と (prod-workload という名前の) プロファイル B の両方に、起動する Pods に一致するセレクターがある場合、Fargate は Pods にプロファイル A (beta-workload) を選択します。Pods には、Pods のプロファイル A にラベルが付いています。(例: eks.amazonaws.com/fargate-profile=beta-workload)

ワイルドカードを使用する新しいプロファイルに既存の Fargate Pods を移行するには、次の 2 つの方法があります。

  • 一致するセレクターを持つ新しいプロファイルを作成し、古いプロファイルを削除します。古いプロファイルでラベル付けされたポッドは、一致する新しいプロファイルに再スケジュールされます。

  • ワークロードを移行したいものの、各 Fargate Pod にどの Fargate ラベルが付いているかわからない場合は、次の方法を使用します。新しいプロファイルを作成し、同じクラスター上のプロファイルの中でアルファベット順で最初に並べられる名前を付けます。次に、新しいプロファイルに移行する必要がある Fargate Pods をリサイクルします。

Fargate プロファイルの作成

このセクションでは、Fargate プロファイルを作成する方法について説明します。また、Fargate プロファイルに使用する Pod 実行ロールを作成しておく必要があります。詳細については、「Amazon EKS Pod 実行 IAM ロール」を参照してください。Fargate で実行されている Pods は、AWS のサービス への NAT ゲートウェイアクセスを持つプライベートサブネットでのみサポートされます。インターネットゲートウェイへの直接ルートはサポートされません。これは、クラスターの VPC がプライベートサブネットを使用できるようにするためです。プロファイルを作成するには eksctl または AWS Management Console を使用します。

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. [コンピューティング] タブを開きます。

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

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

    1. [名前] に、Fargate プロファイルの一意の名前 (my-profile など) を入力します。

    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 プロファイルの情報を確認し、[作成] を選択します。