我在建立 AWS Fargate 設定檔時發生問題。
簡短說明
Fargate 設定檔是在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中指定哪些 Pod 應排程於 Fargate 節點的一種機制。
Fargate 設定檔的選擇器會與每個傳入的 Pod 規格 YAML 檔案相互比對。兩者必須相符並符合 AWS Fargate 考量事項,系統才會透過子網路將 Pod 排程到 Fargate 節點上,並在 Fargate 設定檔中指定 AWS Identity and Access Management (IAM) 角色。
部分 Pod 置放規則如下:
- 如果 Pod 規格具有命名空間和比對標籤組態,則 Pod 置放在與命名空間相符的 Fargate 設定檔上。Pod 規格也必須與 Pod 選擇器的標籤相符
- 如果 Fargate 設定檔具有多個 Pod 選擇器組態,則會使用與其中一個 Pod 選擇器組態相符的排程 Pod。
- 如果 Pod 規格與多個 Fargate 設定檔相符,則會根據隨機 Fargate 設定檔來排定 Pod。除非在 Pod 規格內指定下列註釋:eks.amazonaws.com/fargate-profile,否則會發生這種情況。
- Kubernetes 相似性和反相似性規則不適用於 Amazon EKS Fargate Pod,也不需要這些規則。
解決方案
建立 Fargate 設定檔時常見的問題如下:
如何建立 Fargate 設定檔,以便將 Pod 排程到 Fargate 節點上?
您可以使用 Amazon EKS 主控台、AWS Command Line Interface (AWS CLI)、SDK 或 API 來建立 Fargate 設定檔。
如何使用 AWS CloudFormation 建立 Fargate 設定檔?
使用 AWS::EKS::FargateProfile CloudFormation 資源類型來建立 Fargate 設定檔。
如何僅在 Fargate 節點上執行 CoreDNS Pod?
預設情況下,CoreDNS 設定為在 Amazon EKS 叢集的 Amazon EC2 基礎設施上執行。如果想在叢集中使用 Fargate 無伺服器運算執行 CoreDNS Pod,您必須執行 CoreDNS 部署的滾動重新啟動。
如果您使用 eksctl 和 --fargate 選項建立叢集,請依照下一步中的動作操作。
**注意事項:**最佳實務是使用 eksctl 建立或更新 EKS 叢集,因為這樣才能簡化叢集資源管理工作。如需詳細資訊,請參閱 eksctl 網站上的 EKS Fargate 支援。
Fargate 設定檔有何預設限制?
建立 Fargate 設定檔時的預設限制為:
- EKS 叢集最多可以有十個 Fargate 設定檔。
- Fargate 設定檔最多可以有五個選擇器。
- Fargate 設定檔選擇器最多可以有五個標籤配對。
Fargate 設定檔必須具備何種 Pod 執行角色?
Pod 執行角色是 Fargate 節點用來進行 AWS API 呼叫的 IAM 角色。AmazonEKSFargatePodExecutionRolePolicy 受管政策必須與此角色連接。
Fargate 節點上的 Kubelet 會使用此 IAM 角色與 API 伺服器通訊。這個角色必須包含在 aws-auth ConfigMap 中,這樣 kubelet 才能對 API 伺服器執行身分驗證作業。當您建立 Fargate 設定檔時,Fargate 工作流程會自動將此角色新增至叢集的 aws-auth ConfigMap。
如果您的 Fargate 節點顯示為「未就緒」,請確認 aws-auth ConfigMap 中是否包含 Pod 執行角色。
建立 Fargate 設定檔 (具有 Pod 執行角色) 後,系統產生的 aws-auth ConfigMap 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。
我使用了以 API 為基礎的佈建程式 (例如 Terraform 或 AWS CloudFormation) 建立 Fargate 設定檔。為何我的 Fargate 設定檔會進入 CREATE_FAILED 狀態?
一次只能建立或刪除一個 Fargate 設定檔。因此,如果您要刪除某個 Fargate 設定檔,就無法同時建立或刪除其他 Fargate 設定檔。
使用以 API 為基礎的佈建程式時,請務必確認 Fargate 設定檔成功建立或刪除之後,再著手建立所有的其他 Fargate 設定檔。
我可以指定要為 Fargate 設定檔中的 Fargate 節點佈建哪些資源 (CPU、記憶體) 嗎?
您無法直接在 Fargate 設定檔中指定要佈建的資源數量。最佳實務是在 Fargate 的 Pod 規格 YAML 檔案中指定資源請求,這樣有助於 Fargate 工作流程為 Pod 指派至少該所需數量的資源。如需詳細資訊,請參閱 Kubernetes 網站上的 Kubernetes 如何套用資源請求和限制。
執行 kubectl describe node 命令後顯示的 vCPU 或記憶體數量,可能不會與您為 Pod 提出的請求數量相同。節點具有的記憶體和 CPU 數量取決於 Fargate 資源分配集區的可用容量。系統會根據您在 Pod 規格中請求配置的數量向您收費,並非依據 kubectl 命令所顯示的資源數量。
**注意事項:**如果未指定 vCPU 和記憶體組合,則系統會使用最小的可用組合 (0.25 vCPU 和 0.5 GB 記憶體)。