協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS Fargate 簡化運算管理
本主題討論如何使用 Amazon EKS 在 AWS Fargate 上執行 Kubernetes Pod。Fargate 是一種為容器
您可以控制哪些 Pod 要在 Fargate 上啟動,以及其如何搭配 Fargate 設定檔執行。Fargate 描述檔會定義為 Amazon EKS 叢集的一部分。Amazon EKS 使用控制器將 Kubernetes 與 Fargate 整合,而控制器則是透過 AWS 使用 Kubernetes 提供的上游、可擴充模型建立。這些控制器作為 Amazon EKS 受管 Kubernetes 控制平面的一部分執行,且負責將原生 Kubernetes Pod 排程至 Fargate。Fargate 控制器包括新的排程器,除了數個變換與驗證許可控制器之外,也會隨著預設 Kubernetes 排程器執行。當您啟動符合在 Fargate 上執行的條件的 Pod 時,在叢集中執行的 Fargate 控制器便會辨識、更新 Pod 並將 Pod 排程至 Fargate。
本主題會說明在 Fargate 上執行的不同 Pod 元件,並注意搭配使用 Fargate 與 Amazon EKS 的特殊考量。
AWS Fargate 考慮因素
以下是在 Amazon EKS 上使用 Fargate 的考慮因素。
-
在 Fargate 上執行的每個 Pod 都有自己的運算界限。這些 Pod 不會與其他 Pod 共用基礎核心、CPU 資源、記憶體資源或彈性網路介面。
-
Network Load Balancer 和 Application Load Balancer (ALB) 可以僅與具有 IP 目標的 Fargate 搭配使用。如需詳細資訊,請參閱建立 Network Load Balancer及透過 Application Load Balancer 路由應用程式與 HTTP 流量。
-
Fargate 的公開服務僅能在目標類型 IP 模式下執行,不能在節點 IP 模式下執行。若要檢查在受管節點上和在 Fargate 上執行的服務的連線狀態,建議透過服務名稱來連線。
-
Pod 必須與其排程時的 Fargate 設定檔相符,以在 Fargate 上執行。與 Fargate 設定檔不相符的 Pod 可能會卡在
Pending狀態。如果存在相符的 Fargate 設定檔,您可以刪除已建立的待定 Pod,以將其重新排程至 Fargate。 -
Fargate 不支援 Daemonsets。如果您的應用程式需要常駐程式,請重新設定該常駐程式,以作為您 Pod 中的附屬容器執行。
-
Fargate 不支援具有特殊權限的容器。
-
在 Fargate 上執行的 Pod 不能指定 Pod 資訊清單中的
HostPort或HostNetwork。 -
預設
nofile和nproc軟性限制為 1024,而 Fargate Pod 的硬性限制為 65535。 -
GPU 目前無法在 Fargate 上使用。
-
只有私有子網路支援在 Fargate 上執行的 Pod (具有對 AWS 服務的 NAT 閘道存取,但沒有網際網路閘道的直接路由),因此您叢集的 VPC 必須具有可用的私有子網路。如需沒有傳出網際網路存取權的叢集,請參閱 部署網際網路存取受到限制的私有叢集。
-
您可以使用透過 Vertical Pod Autoscaler 來調整 Pod 資源為 Fargate Pod 設定 CPU 和記憶體的初始正確大小,然後使用使用 Horizontal Pod Autoscaler 擴展 Pod 部署來擴展這些 Pod。如果要 Vertical Pod Autoscaler 自動將 Pod 重新部署到具有較大 CPU 和記憶體組合的 Fargate,請將 Vertical Pod Autoscaler 的模式設定為
Auto或Recreate以確保正確的功能。如需詳細資訊,請參閱 GitHub 上的 Vertical Pod Autoscaler文件。 -
您的 VPC 必須啟用 DNS 解析和 DNS 主機名稱。如需詳細資訊,請參閱檢視與更新 VPC 的 DNS 支援。
-
Amazon EKS Fargate 透過在虛擬機器 (VM) 中隔離每個 Pod,為 Kubernetes 應用程式增加深度防禦功能。此 VM 界限可防止在容器逸出時存取其他 Pod 使用的主機型資源,這是攻擊容器化應用程式並存取容器外資源的常用方法。
使用 Amazon EKS 並不會變更您在共同責任模式下所需承擔的責任。您應該審慎考慮叢集安全性和控管控制項的組態。隔離應用程式最安全的方法是永遠在個別的叢集中執行。
-
Fargate 描述檔支援從 VPC 次要 CIDR 區塊指定子網路。您可能想要指定次要 CIDR 區塊。這是因為子網路僅提供數量有限的 IP 位址。因此,叢集中可建立的 Pod 數量也有限。如果為 Pod 使用不同的子網路,您可增加可用 IP 位址的數量。如需詳細資訊,請參閱為 VPC 新增 IPv4 CIDR 區塊。
-
部署到 Fargate 節點的 Pod 不提供 Amazon EC2 執行個體中繼資料服務 (IMDS)。如果有部署到 Fargate 且需要 IAM 憑證的 Pod,則請使用服務帳戶的 IAM 角色將其指派給 Pod。如果您的 Pod 需要存取 IMDS 提供的其他資訊,則必須將此資訊硬式編碼至 Pod 規格中。這包括部署 Pod 的 AWS 區域或可用區域。
-
您無法將 Fargate Pod 部署到 AWS Outposts、AWS Wavelength 或 AWS Local Zones。
-
Amazon EKS 必須定期修補 Fargate Pod 來確保其安全。我們嘗試以減少影響的方式進行更新,但有時,如果沒有成功移出 Pod,則必須將其刪除。您可採取一些措施以盡可能地減少中斷。如需詳細資訊,請參閱 設定 AWS Fargate OS 修補事件的動作。
-
適用於 Amazon EKS 的 Amazon VPC CNI 外掛程式
會安裝在 Fargate 叢集上。您無法將適用於 Amazon EKS 叢集的替代 CNI 外掛程式與 Fargate 節點搭配使用。 -
在 Fargate 上執行的 Pod 會自動掛載 Amazon EFS 檔案系統,而無需執行手動驅動程式安裝步驟。您不能將動態持久性磁碟區佈建與 Fargate 節點搭配使用,但可以使用靜態佈建。
-
Amazon EKS 不支援 Fargate Spot。
-
您無法將 Amazon EBS 磁碟區掛載到 Fargate Pod。
-
您可以在 Fargate 節點上執行 Amazon EBS CSI 控制器,但是 Amazon EBS CSI 節點 DaemonSet 僅能在 Amazon EC2 執行個體上執行。
-
在 Kubernetes 任務
標記為 Completed或Failed之後,任務建立的 Pod 通常會繼續存在。此行為允許您檢視日誌和結果,但使用 Fargate,如果您之後不清理任務,將產生費用。若要在任務完成或失敗後自動刪除相關的 Pod,您可以使用存留時間 (TTL) 控制器來指定時間間隔。下列範例顯示在您的任務資訊清單中指定
.spec.ttlSecondsAfterFinished。apiVersion: batch/v1 kind: Job metadata: name: busybox spec: template: spec: containers: - name: busybox image: busybox command: ["/bin/sh", "-c", "sleep 10"] restartPolicy: Never ttlSecondsAfterFinished: 60 # <-- TTL controller
Fargate 比較表
| 條件 | AWS Fargate |
|---|---|
|
可以部署到 AWS Outposts |
否 |
|
可以部署到 AWS Local Zone |
否 |
|
可以執行需要 Windows 的容器 |
否 |
|
可以執行需要 Linux 的容器 |
是 |
|
可以執行需要 Inferentia 晶片的工作負載 |
否 |
|
可以執行需要 GPU 的工作負載 |
否 |
|
可以執行需要 Arm 處理器的工作負載 |
否 |
|
可以執行 AWS Bottlerocket |
否 |
|
Pod 與其他 Pod 共享核心執行時期環境 |
否:每個 Pod 都有專用核心 |
|
Pod 會與其他 Pod 共享 CPU、記憶體、儲存體和網路資源。 |
否:每個 Pod 都有專用資源,可以獨立調整大小,以最大化資源使用率。 |
|
Pod 可以使用的硬體和記憶體比 Pod 規格要求的更多 |
否:Pod 可以使用較大的 vCPU 和記憶體組態重新部署。 |
|
必須部署和管理 Amazon EC2 執行個體 |
否 |
|
必須保護、維護和修補 Amazon EC2 執行個體的作業系統 |
否 |
|
可以在部署節點時提供引導引數,例如額外的 kubelet |
否 |
|
可以將 IP 位址指派給來自不同於將 IP 位址指派給節點之 CIDR 區塊的 Pod。 |
否 |
|
可以對節點執行 SSH |
否:沒有節點主機作業系統可供 SSH 使用。 |
|
可以將自己的自訂 AMI 部署至節點 |
否 |
|
可以將您自己的自訂 CNI 部署至節點 |
否 |
|
必須自行更新節點 AMI |
否 |
|
必須自行更新節點 Kubernetes 版本 |
否:您未管理節點。 |
|
可以透過 Pod 使用 Amazon EBS 儲存體 |
否 |
|
可以透過 Pod 使用 Amazon EFS 儲存體 |
|
|
可以透過 Pod 使用 Amazon FSx for Lustre 儲存體 |
否 |
|
可以針對服務使用 Network Load Balancer |
是,使用建立 Network Load Balancer 時 |
|
Pod 可以在公有子網路中執行 |
否 |
|
可以將不同的 VPC 安全群組指派給個別 Pod |
是 |
|
可以執行 Kubernetes DaemonSets |
否 |
|
支援 Pod 資訊清單中的 |
否 |
|
AWS 區域可用性 |
|
|
可以在 Amazon EC2 專用主機上執行容器 |
否 |
|
定價 |
獨立 Fargate 記憶體和 CPU 組態的成本。每個 Pod 都有自己的成本。如需詳細資訊,請參閱 AWS Fargate 定價 |