使用 AWS Fargate 簡化運算管理 - Amazon EKS

協助改善此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要提供此使用者指南,請選擇位於每個頁面右窗格中的 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Fargate 簡化運算管理

本主題討論使用 Amazon EKS 在 AWS Fargate 上執行 Kubernetes Pod。Fargate 是一種為容器提供隨需、適當大小運算容量的科技。使用 Fargate,您不需要自行佈建、設定或擴展虛擬機器群組,即可執行容器。您也不需要選擇伺服器類型、決定何時擴展節點群組,或最佳化叢集封裝。

您可以控制哪些 Pod 從 Fargate 開始,以及它們如何使用 Fargate 設定檔執行。Fargate 描述檔會定義為 Amazon EKS 叢集的一部分。Amazon EKS 使用 Kubernetes 提供的 AWS 上游可擴展模型建置的控制器,將 Kubernetes 與 Fargate 整合。這些控制器作為 Amazon EKS 受管 Kubernetes 控制平面的一部分執行,並負責將原生 Kubernetes Pod 排程到 Fargate。Fargate 控制器包括新的排程器,除了數個變換與驗證許可控制器之外,也會隨著預設 Kubernetes 排程器執行。當您啟動符合 Fargate 上執行條件的 Pod 時,叢集中執行的 Fargate 控制器會辨識、更新並將 Pod 排程到 Fargate。

本主題說明在 Fargate 上執行之 Pod 的不同元件,並指出將 Fargate 與 Amazon EKS 搭配使用的特殊考量。

AWS Fargate 考量事項

以下是在 Amazon EKS 上使用 Fargate 的考慮因素。

  • 在 Fargate 上執行的每個 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 資訊清單中指定 HostPortHostNetwork

  • 預設nofilenproc軟性限制為 1024,而 Fargate Pod 的硬性限制為 65535。

  • Fargate 上目前無法使用 GPUs。

  • 在 Fargate 上執行的 Pod 僅支援私有子網路 (具有 NAT 閘道存取 AWS 服務,但無法直接路由至網際網路閘道),因此叢集的 VPC 必須具有私有子網路。如需沒有傳出網際網路存取權的叢集,請參閱 部署網際網路存取受限的私有叢集

  • 您可以使用調整 Pod 資源搭配 Vertical Pod Autoscaler 來設定 Fargate Pod 的 CPU 和記憶體初始正確大小,然後使用 Scale Pod 部署搭配 Horizontal Pod Autoscaler 來擴展這些 Pod。如果您希望 Vertical Pod Autoscaler 使用較大的 CPU 和記憶體組合自動將 Pod 重新部署至 Fargate,請將 Vertical Pod Autoscaler 的 模式設定為 AutoRecreate ,以確保功能正確。如需詳細資訊,請參閱 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 區塊。

  • Amazon EC2 執行個體中繼資料服務 (IMDS) 不適用於部署到 Fargate 節點的 Pod。如果您有部署至 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 作業系統修補事件的動作

  • 適用於 Amazon EKS 的 Amazon VPC CNI 外掛程式會安裝在 Fargate 叢集上。您無法為具有 Fargate 節點的 Amazon EKS 叢集使用替代 CNI 外掛程式

  • 在 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,您可以使用time-to-live(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 Outpost

可以部署到 AWS Local Zone

可以執行需要 Windows 的容器

可以執行需要 Linux 的容器

可以執行需要 Inferentia 晶片的工作負載

可以執行需要 GPU 的工作負載

可以執行需要 Arm 處理器的工作負載

可以執行 AWS Bottlerocket

Pod 與其他 Pod 共用核心執行期環境

否 – 每個 Pod 都有專用的核心

Pod 與其他 Pod 共用 CPU、記憶體、儲存體和網路資源。

否 – 每個 Pod 都有專用資源,並且可以獨立調整大小以最大化資源使用率。

Pod 可以使用比 Pod 規格中請求更多的硬體和記憶體

否 – 不過,可以使用較大的 vCPU 和記憶體組態重新部署 Pod。

必須部署和管理 Amazon EC2 執行個體

必須保護、維護和修補 Amazon EC2 執行個體的作業系統

可以在部署節點時提供引導引數,例如額外的 kubelet 引數。

可以將 IP 地址從與指派給節點的 IP 地址不同的 CIDR 區塊指派給 Pod。

可以對節點執行 SSH

否 – SSH 沒有節點主機作業系統。

可以將自己的自訂 AMI 部署至節點

可以將您自己的自訂 CNI 部署至節點

必須自行更新節點 AMI

必須自行更新節點 Kubernetes 版本

否 – 您不管理節點。

可與 Pod 搭配使用 Amazon EBS 儲存體

可與 Pod 搭配使用 Amazon EFS 儲存體

可以使用 Amazon FSx for Lustre 儲存搭配 Pod

可以針對服務使用 Network Load Balancer

是,使用建立網路負載平衡器

Pod 可以在公有子網路中執行

可以將不同的 VPC 安全群組指派給個別 Pod

可以執行 Kubernetes DaemonSets

Pod 資訊清單中HostNetwork的支援 HostPort

AWS 區域可用性

部分 Amazon EKS 支援的區域

可以在 Amazon EC2 專用主機上執行容器

定價

獨立 Fargate 記憶體和 CPU 組態的成本。每個 Pod 都有自己的成本。如需詳細資訊,請參閱 AWS Fargate 定價