AWS Fargate プロファイルの作成時に問題が発生します。
簡単な説明
Fargate プロファイルは、Amazon Elastic Kubernetes Service (Amazon EKS) クラスターの Fargate ノードに対してスケジュールするポッドを指定するメカニズムです。
Fargate プロファイルには、受信するすべてのポッド仕様 YAML ファイルと照合されるセレクターがあります。ポッドが Fargate ノードでスケジュールされる前に、照合が正常に完了し、AWS Fargate の考慮事項が満たされる必要があります。ポッドは、Fargate プロファイルで指定されたサブネットと AWS Identity and Access Management (IAM) ロールでスケジュールされます。
ポッドには、次のようないくつかの配置ルールがあります。
- ポッド仕様に名前空間と照合ラベル設定がある場合、そのポッドは名前空間に一致する Fargate プロファイルに配置されます。ポッド仕様は、ポッドセレクターのラベルとも一致する必要があります。
- Fargate プロファイルに複数のポッドセレクター設定がある場合は、スケジュールされたポッドのうち、いずれかのポッドセレクター設定に一致するポッドが使用されます。
- ポッド仕様が複数の Fargate プロファイルと一致する場合、そのポッドはランダムな Fargate プロファイルに従ってスケジュールされます。これは、ポッド仕様で eks.amazonaws.com/fargate-profile というアノテーションが指定されている場合を除き、発生します。
- Kubernetes のアフィニティルールおよびアンチアフィニティルールは、Amazon EKS Fargate ポッドには適用されず、必要ありません。
解決策
Fargate プロファイルの作成時に発生する一般的な問題には、以下のものがあります。
Fargate プロファイルを作成して、Fargate ノードに対してポッドをスケジュールする方法を教えてください。
Amazon EKS コンソール、AWS コマンドラインインターフェイス (AWS CLI)、SDK、または API を使用して、Fargate プロファイルを作成できます。
AWS CloudFormation を使用して Fargate プロファイルを作成する方法を教えてください。
AWS::EKS::FargateProfile CloudFormation リソースタイプを使用して、Fargate プロファイルを作成します。
CoreDNS ポッドを Fargate ノードでのみ実行する方法を教えてください。
デフォルトでは、CoreDNS は Amazon EKS クラスター上の Amazon EC2 インフラストラクチャで実行するように設定されています。クラスター内の Fargate サーバーレスコンピューティングで CoreDNS ポッドを実行する場合は、CoreDNS デプロイのロールアウト再起動を実行する必要があります。
eksctl と**--fargate** オプションを使用してクラスターを作成した場合は、「次のステップ」のアクションに従ってください。
注: EKS クラスターを作成または更新する場合は、eksctl を使用することがベストプラクティスです。これにより、クラスターリソースの管理が簡単になるためです。詳細については、eksctl ウェブサイトの「EKS Fargate support」を参照してください。
Fargate プロファイルには、デフォルトでどのような制限がありますか?
Fargate プロファイルの作成時のデフォルトの制限は次のとおりです。
- EKS クラスターで設定できる Fargate プロファイルは最大 10 個です。
- Fargate プロファイルで設定できるセレクターは最大 5 個です。
- Fargate プロファイルのセレクターで設定できるラベルのペアは最大 5 個です。
Fargate プロファイルにはどのポッド実行ロールを含める必要がありますか?
ポッド実行ロールは、Fargate ノードが AWS API 呼び出しを行うために使用する IAM ロールです。AmazonEKSFargatePodExecutionRolePolicy によって管理されるポリシーをこのロールにアタッチする必要があります。
Fargate ノードの Kubelet は、この IAM ロールを使用して API サーバーと通信します。Kubelet が API サーバーで認証できるように、このロールを aws-auth ConfigMap に含める必要があります。Fargate プロファイルを作成すると、Fargate ワークフローによって、このロールがクラスターの aws-auth ConfigMap に自動的に追加されます。
Fargate ノードに「Not Ready」と表示される場合は、ポッド実行ロールが aws-auth ConfigMap に含まれていることを確認してください。
以下は、ポッド実行ロールを使用して Fargate プロファイルを作成した後の、aws-auth ConfigMap MapProles セクションのスニペットのサンプルを示しています。
mapRoles: | - groups:
- system:bootstrappers
- system:nodes
- system:node-proxier
rolearn: <Pod_execution_role_ARN>
username: system:node:{{SessionName}}
Fargate プロファイルの作成後に aws-auth ConfigMap が変更された場合は、Fargate ノードでポッドがスケジュールされたときに次の警告が表示されることがあります。
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 トラフィックを許可するインバウンドルールが必要です。
API ベースのプロビジョナー (Terraform や AWS CloudFormation など) を使用して Fargate プロファイルを作成しました。Fargate プロファイルが CREATE_FAILED 状態になるのはなぜですか?
一度に作成または削除できる Fargate プロファイルは 1 つだけです。いずれかの Fargate プロファイルを削除する際に、同時に他の Fargate プロファイルを作成または削除することはできません。
API ベースのプロビジョナーを使用している場合、Fargate プロファイルの作成または削除は、他のすべての Fargate プロファイルの作成または削除が正常に完了した後に開始する必要があります。
Fargate プロファイルで、Fargate ノード用にプロビジョニングするリソース (CPU、メモリ) を指定することはできますか?
Fargate プロファイルで、プロビジョニングするリソースの量を直接指定することはできません。Fargate ポッド仕様 YAML ファイルでリソースリクエストを指定するのがベストプラクティスです。そうすることで、Fargate ワークフローは、ポッドに対して少なくともその量のリソースを割り当てることができます。詳細については、Kubernetes ウェブサイトの「How Kubernetes applies resource requests and limits」を参照してください。
kubectl describe node コマンドの実行後に表示される vCPU またはメモリの量は、ポッドに対してリクエストした量と同じではない場合があります。ノードが持つメモリと CPU の量は、Fargate リソース割り当てプールの使用可能な容量によって異なります。請求は、ポッド仕様でリクエストした量に基づいて行われます。kubectl で表示されるリソースの量に対しては請求されません。
注: vCPU とメモリの組み合わせを指定しない場合は、使用可能な最小の組み合わせ (0.25 vCPU と 0.5 GB メモリ) が使用されます。