AWS Fargate プロファイルの作成に関する問題のトラブルシューティングはどうすればよいですか。

最終更新日: 20121 年11 月 4 日

AWS Fargate プロファイルの作成について質問があります。または、AWS Fargate プロファイルの作成に問題があります。これをトラブルシューティングするにはどうすればよいですか?

簡単な説明

Fargate プロファイルとは、Amazon Elastic Kubernetes Service (Amazon EKS) クラスター内の Fargate ノードでスケジュールされるべきポッドを指定する仕組みです。

Fargate プロファイルには、すべての受信ポッド仕様 YAML ファイルと一致するセレクターがあります。マッチングが成功し、 AWS Fargate の考慮事項が満たされた場合、サブネットと Fargate プロファイルで指定された AWS ID およびアクセス管理 (IAM) ロールを使用して、ポッドが Fargate ノードでスケジュールされます。

Pod の配置ルールの一部は次のとおりです。

  • Pod セレクターに名前空間とマッチラベルの両方を設定した場合:
    Fargate ワークフローでは、条件 (名前空間とラベル) の両方が Pod 仕様に一致する場合にのみ、Pod が Fargate プロファイルと一致すると見なされます。
  • 1 つの Fargate プロファイル内で複数の Pod セレクターを指定した場合は次のようにします。
    Pod がこれらのセレクターのいずれかに一致すると、一致した Fargate プロファイルのデータを使用して Fargate ノードの fargate-scheduler によってスケジュールされます。
  • Pod 仕様が複数の Fargate プロファイルと一致する場合は、次の手順を実行します。
    ポッドは次の仕様がポッド仕様内で指定されていない限り、ランダムな Fargate プロファイルに従ってスケジュールされます:eks.amazonaws.com/fargate-profile: <fp_name>。

Fargate プロファイルを作成するときは、次の制限に注意してください。

  • クラスタごとに最大 10 個の Fargate プロファイルを作成できます。
  • Fargate プロファイルごとに最大 5 つのセレクターを使用できます。
  • セレクターごとに最大 5 つのラベルペアを使用できます。

解決方法

Fargate プロファイルの作成時に発生する一般的なシナリオと問題を次に示します。

Fargate ノードでポッド をスケジュールするための Fargate プロファイルの作成方するにはどうすればいいですか。

Amazon EKS コンソール、AWS コマンドラインインターフェイス (AWS CLI)、SDK、または API (CloudFormationまたは eksctlなど) を使用して、Fargate プロファイルを作成できます

AWS CloudFormation を使用して Fargate プロファイルを作成するにはどうすればよいですか。

AWS:: EKS:: FargateProfile CloudFormation リソースタイプを使用して、Fargate プロファイルを作成できます。

ただし、Fargate ノードとともに Amazon Elastic Compute Cloud(Amazon EC2)ノードグループを作成しない場合、coredns アドオンにはデフォルトで次のアノテーションが付きます。

eks.amazonaws.com/compute-type : ec2

coredns アノテーションを変更するには、デプロイメントに外部パッチを適用する必要があります。これは、EKS クラスターを管理するターミナルから実行できます。または、CloudFormation カスタムリソースを使用して、ユースケースに基づいてこのプロセスを自動化することもできます。

注:クラスターリソース管理を簡素化するため、 eksctl を使用して EKS クラスターを作成/更新することがベストプラクティスです。

Fargate プロファイルに含める必要のある Pod 実行ロールは何ですか。

Pod 実行ロールは、Fargate ノードが AWS API コールを行うために使用する IAM ロールです。これには、VPC CNI、CoreDNS などの Amazon Elastic Container レジストリ (Amazon ECR) イメージを取得するためのコールが含まれます。このロールには AmazonEKSFargatePodExecutionRolePolicy 管理ポリシーを添付する必要があります。

Fargate ノード上の Kubelet は、この IAM ロールを使用して API サーバーと通信します。kubelet が API サーバーで認証できるように、このロールを aws-auth configmap に含める必要があります。Fargate プロファイルを作成すると、Fargate ワークフローは自動的ににこのロールをクラスターの aws-auth configmap に追加します。

Fargate ノードが「Net Ready」と表示されている場合は、ポッド実行ロールが aws-auth に含まれていることを確認します。

以下は、Pod 実行ロールを持つ Fargate プロファイルを作成した後の aws-auth mapRoles スニペットのサンプルです。

mapRoles: |   
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:node-proxier
      rolearn: <Pod_execution_role_ARN>
      username: system:node:{{SessionName}}

Fargate プロファイルの作成後に aws-auth configmap が変更された場合、Fargate ノードで Pod をスケジュールしているときに次の警告が表示されることがあります。

Pod provisioning timed out (will retry) for pod: <pod_nginx>

ワークロードを EKS Fargate に移行する予定です。使用するためのサブネットとセキュリティグループの作成するにはどうすればいいですか。

EKS Fargate は現在、プライベートサブネットのみをサポートしています。これは、Fargate プロファイル内で指定されたサブネットに添付されたルートテーブル内に、インターネットゲートウェイへのデフォルトルートが存在しないことを意味します。そのため、Fargate プロファイルに使用するサブネットに NAT ゲートウェイまたは VPC エンドポイントのいずれかを設定できます。

クラスターセキュリティグループは、デフォルトで Fargate ノードに添付されます。この目的のためにセキュリティグループをプロビジョンする必要はありません。また、サブネットに VPC エンドポイントを使用する場合は、クラスターでプライベートエンドポイントアクセスが有効になっていることを確認してください。

VPC エンドポイントに添付されたセキュリティグループに、クラスターの VPC CIDR からの HTTPS ポート 443 トラフィックを許可するインバウンドルールがあることを確認してください。

Terraform や AWS CloudFormation などの API ベースのプロビジョナーを使用して Fargate プロファイルを作成しています。Fargate プロファイルが CREATE_FAILED 状態になるのはなぜですか。

一度に作成または削除できる Fargate プロファイルは 1 つだけです。そのため、Fargate プロファイルを削除する場合、他の Fargate プロファイルを同時に作成または削除することはできません。

CloudFormation などの API ベースのプロビジョナーを使用している間は、他のすべての Fargate プロファイルが正常に作成された後に Fargate プロファイルの作成を開始するようにしてください。DependsOn 属性 を使用してFargate プロファイル間にチェーンのような階層を作成し、作成と削除を連続的に行うことができます。リクエストが連続していない場合は、次のようなエラーが表示されることがあります。

Cannot create Fargate Profile <fp_name1> because cluster <cluster_name> currently has Fargate profile <fp_name2> in status CREATING

Fargate プロファイル内で Fargate ノードにプロビジョニングするリソース (CPU、メモリ) を指定できますか。

Fargate プロファイル内でプロビジョニングされるリソースの量を直接指定することはできません。Fargate Pod 仕様 YAML ファイル内でリソースリクエストを指定するのがベストプラクティスです。そうすることで、Fargate ワークフローは少なくともその量のリソースをポッドに割り当てるのに役立ちます。

kubectl describe node <node_name>コマンドを実行した後に表示される vCPU またはメモリの量は、ポッドに要求した CPU またはメモリの量と同じではない場合かもしれません。ノードが持つメモリと CPU の量は、Fargate リソース割り当てプールで使用可能なキャパシティによって異なります。ポッド仕様内でリクエストした金額に応じて請求されます。kubectl で表示されるリソースの量に対しては請求されません。

CPU とメモリは常に個別の組み合わせとして AWS Fargate によってプロビジョニングされ、請求されます。請求対象額には、kubelet、kube-proxy など、ノードで実行されているポッド以外のコンポーネントによる使用率が含まれます。たとえば、ポッドに 1 つの vCPU と 8 GB のメモリをリクエストした場合、次に高い組み合わせである2 つの vCPU と 9 GB のメモリの対して請求されます。これは、ノード上の kubelet と他の Kubernetes コンポーネントが使用するリソースをアカウントします。詳細については、「Pod CPU とメモリ」を参照してください。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?