協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
進階 Kubernetes 控制平面組態
概觀
Amazon EKS 會管理叢集的 Kubernetes 控制平面,包括 API 伺服器、排程器和控制器管理員。EKS 使用適用於大多數工作負載的預設上游 Kubernetes 設定來執行這些元件,而且您不需要對大多數叢集進行變更。但是,某些工作負載受益於不同的控制平面設定。您可能希望排程器將 Pod 封裝在較少的節點上,以降低運算成本、將 Kubernetes 事件保留較短的時間,以限制叢集資料庫 (etcd) 成長,或更頻繁地評估自動擴展決策。
使用進階 Kubernetes 控制平面組態,您可以直接在叢集上設定這些參數。EKS 會將它們套用至控制平面,而您的叢集會繼續以相同的可用性和效能特性運作。
這些是進階組態。每個組態參數都會變更核心 Kubernetes 控制平面元件在叢集上執行之工作負載的行為,而正確的值取決於您的工作負載。變更參數之前,請閱讀下列各節的考量事項,並測試非生產叢集中的變更。
您可以在建立叢集時設定進階控制平面組態參數,或隨時在現有叢集上更新參數。此功能使用現有 CreateCluster和 UpdateClusterConfig操作搭配新參數,因此您可以透過 AWS 管理主控台、 AWS CLI、 AWS SDKs或 AWS CloudFormation 進行設定。EKS 會在套用之前驗證每個組態,並記錄 AWS CloudTrail 中的變更。
進階控制平面參數會套用至整個叢集,以及其上執行的所有工作負載。您無法將它們範圍限定為個別命名空間或工作負載。EKS 會將每個參數限制為經過驗證的範圍。每個參數的支援值都會在下一節中與該參數一起列出。
支援的 Kubernetes 控制平面參數
Amazon EKS 支援下列參數。每個參數都屬於控制平面元件,並透過該元件的組態欄位設定:kubeSchedulerConfig、 kubeControllerManagerConfig或 kubeApiServerConfig。
| 元件 | 參數 | 支援的值 | 預設 | 需要佈建的控制平面 |
|---|---|---|---|---|
|
kube-scheduler |
|
|
|
否 |
|
kube-controller-manager |
|
|
|
是 |
|
kube-controller-manager |
|
|
|
是 |
|
kube-apiserver |
|
|
|
否 |
|
kube-apiserver |
|
|
|
否 |
本主題中的預設值和支援值適用於發佈時可用的 Kubernetes 版本 (EKS v1.31 及更高版本),並且可能會在更新版本中變更。DescribeClusterVersions 操作會報告每個參數和 Kubernetes 版本的目前預設和支援值,因此如果您管理多個版本的叢集或自動化叢集組態,請使用它做為事實來源。如需詳細資訊,請參閱設定進階 Kubernetes 控制平面參數。
下列各節說明每個參數、變更時間,以及在執行之前要考量的內容。
排程器:節點資源適合
排程器會以兩個階段將 Pod 指派給節點。它會先篩選可執行 Pod 的節點,然後對剩餘的候選項目進行評分,並將 Pod 放置在最高評分的節點上。nodeResourcesFit 外掛程式會檢查節點是否具有 Pod 請求的資源,並根據評分策略對節點進行評分。
| 欄位 | 說明 | 支援的值 | 預設 |
|---|---|---|---|
|
|
用於依資源配置對節點進行評分的策略。 |
|
|
|
|
評分時考慮的資源,每個資源都有相對權重。 |
|
|
LeastAllocated 偏好資源配置較低的節點,這會將 Pod 分散到叢集中的節點,並在每個節點上留下空間。這是預設的 Kubernetes 行為,當您希望每個節點上的可用容量能夠吸收現有 Pod 的成長時,這是不錯的選擇。
MostAllocated 偏好已有較高資源配置的節點,這會將 Pod 封裝到較少的節點上。由於工作負載佔用的總容量較少,因此您可以在較少數量的節點上執行它們,並減少運算支出。隨著時間的推移,此封裝行為可讓少量使用的節點免於新工作負載,因此支援整合的節點集區可以移除它們。
EKS 支援 LeastAllocated和 MostAllocated策略。不支援上游 Kubernetes RequestedToCapacityRatio策略。
資源權重
您可以選擇性地指定具有自訂權重的resources陣列,以影響哪些資源在評分決策中最重要。當特定資源是叢集中的限制條件時,這會很有用。例如,在加速器 (GPU) 是稀少資源的叢集上,在 CPU 和記憶體nvidia.com/gpu上方的權重會將加速器請求 Pod 集中在已部分佔用的節點上。
權重是相對的,而不是絕對的。設定 cpu: 100和 memory: 1不會導致排程器忽略記憶體。它比評分公式中的記憶體重 100 倍的 CPU。如果每個候選節點都有相同的 CPU 可用性,CPU 就不會再區分它們,而且分數會有效地落入記憶體。
省略資源與提供低權重不同。當您指定resources陣列時,只會對您列出的資源進行評分。您離開的資源會完全從計算中排除。例如,只有 CPU 上cpu: 100沒有memory項目分數節點,且記憶體可用性不會影響結果。若要在計算中保留資源,同時減少其影響,請列出它,而非省略它。
加權加速器資源,例如 nvidia.com/gpu 只會影響實際為該資源宣告之 Pod resources.requests 的評分。未請求加速器的 Pod 不會受到加速器權重的影響。
這三個加速器資源是 Kubernetes 延伸資源,這表示節點層級的資源是由外掛程式公告至 Kubernetes,而不是內建資源。只有在裝置外掛程式透過裝置外掛程式 API 將它們公告至 kubelet 時,才會對它們進行評分。nodeResourcesFit 外掛程式無法單獨看到裝置驅動程式在節點上提供的資源,也不會評分。透過動態資源分配 (DRA) 管理的資源是由個別的外掛程式排程,且不屬於nodeResourcesFit評分的一部分,因此啟用 DRA 不會變更此參數的行為。如需設定 NVIDIA 裝置外掛程式的詳細資訊,請參閱 NVIDIA DRA 和裝置外掛程式。如需設定 Neuron 裝置的詳細資訊,請參閱 Neuron 裝置管理。
評分策略是排程器用來計算每個節點分數的數個輸入之一。如需排程器如何篩選和評分節點的詳細資訊,請參閱 Kubernetes 文件中的排程架構
評分策略的考量事項
-
執行中的 Pod 不會移動。Kubernetes 排程器永遠不會重新定位已在執行的 Pod。變更評分策略只會影響未來的排程決策,而現有的 Pod 放置是永久的。若要重新平衡已在執行中的 Pod,請移出或重新啟動它們。
-
篩選行為不會變更。評分策略只會影響評分階段,其中排程器會依偏好設定排名節點。決定 Pod 是否可以在節點上執行的篩選階段保持不變。不符合節點的 Pod 仍未在任一策略下排程。
-
MostAllocated集中爆量半徑。將工作負載封裝到較少的節點,表示如果節點運作狀態不佳、執行個體淘汰或可用區域中斷,會一次影響更多 Pod。在高 Pod 流失下,密集封裝的節點也會更快填滿,這可能會在佈建新容量時讓 Pod 處於Pending狀態。 -
排程器和節點管理在不同層操作。評分策略會影響 Pod 放置在已執行它們的節點之間的位置。它不會變更 EKS Auto Mode 或 Karpenter 佈建或移除節點的方式。變更組態之前,請先驗證工作負載的合併行為。
控制器管理員:Horizontal Pod Autoscaler 同步期間
控制器管理員會執行 Kubernetes 控制器,將叢集狀態推向所需的狀態,包括 Horizontal Pod Autoscaler (HPA) 控制器。在每個週期中,HPA 控制器會擷取每個HorizontalPodAutoscaler物件的指標、計算所需的複本計數,並在計數變更時更新目標工作負載。
| 欄位 | 說明 | 支援的值 | 預設 |
|---|---|---|---|
|
|
HPA 控制器評估擴展決策的頻率。 |
|
|
縮短同步期間表示您的工作負載在負載增加後更快擴展,而不是在新增容量之前等待完整週期。
若要設定此參數,您的叢集必須位於 Amazon EKS 佈建控制平面上。縮短間隔會增加 HPA 控制器協調叢集中每個HorizontalPodAutoscaler物件的速率,進而產生更多 API 請求。每個對帳會耗用至少一個 API 請求,而變更複本計數的對帳會再耗用兩個。佈建的控制平面叢集會預先配置控制平面容量,隨時準備好應付繁重的工作負載,因此它們的大小足以吸收額外的負載。如需詳細資訊,請參閱Amazon EKS 佈建控制平面。
對叢集支援的 HPA 物件數量的影響
-
縮短同步期間可減少您的控制平面可以按排程協調的
HorizontalPodAutoscaler物件數量,因為控制器在相同佇列中的作業時間較少。將期間從 縮短15s為 ,可將支援的物件計數10s降低大約三分之一。在縮短同步期間之前,請計算叢集中的HorizontalPodAutoscaler物件,並確認較短的期間仍支援擴展層上的該計數:kubectl get hpa --all-namespaces --no-headers | wc -l -
EKS 不會針對您的 HPA 物件計數驗證同步期間。即使您的叢集已有超過較短期間支援的
HorizontalPodAutoscaler物件,組態變更也會成功。在進行變更之前,請先自行驗證計數。 -
超過支援的計數會無提示地降低自動擴展。如果控制器無法在期間內處理每個物件,則某些物件不會按排程進行協調。EKS 不會發出此條件的警示或 Kubernetes 事件,而且症狀正在自動調整規模,回應速度比預期慢,與預期效果相反。如果您在縮短同步期間後觀察到延遲擴展,請將 參數傳回預設值
15s。 -
同步期間適用於叢集中的每個 HPA 物件。您無法為不同的物件或命名空間設定不同的同步期間。
控制器管理員:已終止的 Pod 垃圾回收閾值
控制器管理員會執行已終止的 Pod 垃圾收集器 (Pod GC 控制器)。此控制器會在叢集中已終止的 Pod 數目超過閾值後,刪除已終止的 Pod,即 Succeeded或 Failed階段中的 Pod。terminatedPodGcThreshold 參數會設定該閾值。
| 欄位 | 說明 | 支援的值 | 預設 |
|---|---|---|---|
|
|
在終止的 Pod 垃圾收集器開始刪除終止的 Pod 之前,可以存在的已終止 Pod 數量。 |
|
|
垃圾收集器會以固定的 20 秒週期執行。當您降低閾值時,收集器會在下一個週期開始強制刪除最舊的終止 Pod,直到計數達到新的閾值。
若要設定此參數,您的叢集必須位於 Amazon EKS 佈建控制平面上。降低閾值會增加控制器針對叢集資料庫 (等) 執行的垃圾回收工作。每個集合傳遞都有資格查詢、處理和刪除更多終止的 Pod。佈建的控制平面叢集會預先配置控制平面容量,隨時準備好應付繁重的工作負載,因此可以吸收額外的負載。如需詳細資訊,請參閱Amazon EKS 佈建控制平面。
終止 Pod 垃圾回收閾值的考量
-
降低閾值會立即刪除多餘的終止 Pod。如果您降低閾值 (例如,從
12500到10000),垃圾回收控制器會在下一個週期開始強制刪除最舊的終止 Pod。控制器會繼續執行,直到終止的 Pod 計數達到新的閾值為止。減少不是漸進的。 -
閾值適用於所有終止的 Pod,無論擁有者為何。它會影響
Succeeded或Failed階段中的 Pod,無論它們是任務、CronJob 或部署所擁有,還是獨立。實際上,Job 和 CronJob Pod 是終止 Pod 計數的最常見貢獻者。 -
降低閾值可減少偵錯時段。已完成和失敗的 Pod 從 消失
kubectl get pods並kubectl logs更快。檢查已完成任務 Pod 的結束代碼或日誌的自動化具有較小的操作時段。 -
閾值是全域叢集設定。您無法為每個命名空間或每個任務進行設定。若要控制個別任務 Pod 的生命週期,請在該任務
ttlSecondsAfterFinished上使用 。
API 伺服器:事件保留
API 伺服器是 Kubernetes 控制平面的前端。它為 Kubernetes API 提供服務,並將叢集狀態持續存在到叢集資料庫 (etcd)。Kubernetes 會記錄事件來描述叢集中發生的情況,例如 Pod 排程決策、映像提取、運作狀態檢查失敗和擴展動作。
| 欄位 | 說明 | 支援的值 | 預設 |
|---|---|---|---|
|
|
API 伺服器在刪除 Kubernetes 事件之前會保留多長時間。 |
|
|
執行高流失工作負載的叢集,例如大規模批次工作、AI 工作負載、CI/CD 管道和頻繁CronJobs,可快速累積數千個事件。每個保留的事件都會使用與叢集需要執行的物件競爭的叢集資料庫空間,而大型事件集合會使 API 伺服器清單操作更昂貴。
縮短事件保留會更快地清除此短期診斷資料,進而降低叢集資料庫儲存壓力,並改善事件繁重查詢的 API 伺服器回應時間。
在以下情況下,較短的保留期非常適合:
-
您的叢集會執行批次、CI/CD、AI 或 CronJob 工作負載,以產生大量事件。
-
您觀察到叢集資料庫儲存體成長至其限制。
-
您依賴外部系統持久地擷取事件,而且不依賴
kubectl get events進行歷史偵錯。
事件保留的考量事項
-
變更僅適用於新事件。建立事件時,Kubernetes 會設定事件的到期時間。已存在的事件會保留其建立時生效的保留期間,並根據該排程過期。縮短
eventTtl不會縮短叢集資料庫中已存在事件的生命週期,因此儲存體的減少會隨著現有事件的過時而逐漸生效。 -
已刪除的事件無法復原。Kubernetes 移除事件後,該事件會永久消失。如果您將保留時間縮短超過預期並遺失事件歷史記錄,則無法還原。縮短此值之前,請確認您在叢集外部擷取出任何需要進行故障診斷的物件。
-
事件可能會持續稍微超過設定的期間。在某些情況下,事件的到期時間可以延長到超過您設定的值,因為在控制平面領導者選擇期間可能發生的推定租賃續約。
-
減少偵錯時段。較短的保留期間會縮小
kubectl get events和 顯示的視窗kubectl describe。從叢集抓取事件的工具可用資料較少。選擇在儲存效率與除錯工作流程之間取得平衡的值。 -
設定適用於整個叢集。保留適用於所有事件,包括每個命名空間的 Pod 排程、節點條件和擴展事件。您無法為每個命名空間設定不同的保留期間。
API 伺服器:服務節點連接埠範圍
Kubernetes 會為每個需要的 服務在每個節點上配置此範圍的連接埠。這包括 類型的服務,NodePort以及預設 類型的服務LoadBalancer。
| 欄位 | 說明 | 支援的值 | 預設 |
|---|---|---|---|
|
|
範圍內的最低連接埠。 |
|
|
|
|
範圍中最高的連接埠。 |
|
|
minPort 必須小於或等於 maxPort。Amazon EKS 會拒絕 大於 minPort的組態maxPort。
透過變更範圍,您可以將節點連接埠配置與組織已強制執行的網路和防火牆政策保持一致。擴大範圍也會增加單一叢集可支援的服務數量。此參數在遷移期間特別有用。移至 Amazon EKS 的應用程式,以及呼叫它們的用戶端,通常會預期特定固定連接埠上的服務。當這些連接埠超出預設範圍時,通常的選項是修改應用程式或將代理放在其前面。將範圍與應用程式已使用的連接埠對齊會移除該運作狀態,因此您可以將工作負載移至 EKS,而無需重寫或新增要維護的網路元件。
為什麼範圍限制為 10260 和 32767
的下限10260可避免NodePort配置節點上 Kubernetes 系統元件已使用的連接埠,包括 kubelet 運作狀態連接埠 (10248) 和 kube-proxy 運作狀態檢查連接埠 ()10256。
的上限會32767保持範圍沒有 Linux 暫時性連接埠範圍,通常從 開始32768。如果 NodePort 落在暫時性範圍內,核心可以為節點的傳出連線選取該連接埠,並與 服務衝突。
服務節點連接埠範圍的考量事項
-
現有的 服務會保留其指派的連接埠。如果您縮小範圍,已經將連接埠保持在新範圍之外的服務會繼續運作,而 kube-proxy 會繼續將流量路由到它們。當範圍變更時,Amazon EKS 不會重新指派現有服務的連接埠。
-
重新建立服務會重新配置其連接埠。如果已刪除並重新建立保留out-of-range連接埠的服務,則無法再指派該連接埠。在縮小現有服務所依賴的範圍之前,請為此進行規劃,特別是當您的部署程序重新建立服務而非更新服務時。
-
範圍外的新配置會遭到拒絕。建立或更新需要設定範圍外連接埠的服務會失敗,並顯示來自 API 伺服器的驗證錯誤。
-
也會驗證明確指定的連接埠。如果服務直接指定
nodePort值,而不是讓 Kubernetes 指派值,則該連接埠必須位於設定的範圍內。範圍外的靜態連接埠請求會遭到拒絕,即使在您先前設定的較寬範圍內,相同的連接埠仍然有效。 -
範圍是整個叢集。您無法為不同的命名空間設定不同的範圍。
變更此參數之前,請確認您的安全群組和網路 ACLs新範圍的流量,且範圍不會與節點上其他軟體使用的連接埠衝突。
考量事項
設定進階控制平面參數之前,請先檢閱下列項目。
-
整個叢集範圍 – 控制平面參數適用於整個叢集,以及其上執行的所有工作負載。您無法將它們範圍限定為個別命名空間或工作負載。在非生產叢集中測試參數變更,然後再將其套用至生產。
-
Horizontal Pod Autoscaler 同步期間和終止的 Pod 垃圾收集閾值所需的佈建控制平面 –
horizontalPodAutoscalerSyncPeriod和terminatedPodGcThreshold參數僅適用於使用 Amazon EKS 佈建控制平面的叢集。Amazon EKS 會將大幅增加控制平面資源消耗的參數限制在具有預先配置控制平面容量的叢集。在標準控制平面模式中設定叢集上的任一參數都會失敗。若要使用它們,請先將叢集移至佈建的控制平面擴展層。如需詳細資訊,請參閱Amazon EKS 佈建控制平面。 -
Horizontal Pod Autoscaler 同步期間和終止 Pod 垃圾回收閾值的結束限制 – 如果
horizontalPodAutoscalerSyncPeriod或terminatedPodGcThreshold設定為預設值以外的值,則您無法將叢集的控制平面從佈建模式移回標準模式。若要返回標準模式,請先將兩個參數設回其預設值 (15s和12500),然後將控制平面擴展層變更為standard。 -
返回預設值 – Amazon EKS 不提供專用重設操作,而從更新省略欄位會保留其目前值,而不是將其清除。若要將參數傳回其預設值,請將其明確設定為預設值。針對叢集執行
DescribeClusterVersions的 Kubernetes 版本,使用 擷取預設值。如需詳細資訊,請參閱設定進階 Kubernetes 控制平面參數。 -
更新語意 – 更新會與您現有的組態合併。只有您指定的欄位會變更,而您省略的欄位會保留其目前值。這同時適用於元件和單一元件。例如,僅指定排程器組態的更新會讓您的控制器管理員和 API 伺服器組態保持不變。
-
檢視目前組態 –
describe-cluster操作會傳回在控制平面上執行的完整組態,包括您尚未自訂的參數及其預設值。 -
Kubernetes 版本之間的預設值和支援值可能會變更 – 本主題中記錄的值適用於發佈時可用的 Kubernetes 版本。使用
DescribeClusterVersions擷取每個參數和 Kubernetes 版本的目前預設和支援值。請參閱 設定進階 Kubernetes 控制平面參數。 -
現有叢集保持不變 – Amazon EKS 不會變更現有叢集的行為。所有叢集都會繼續執行預設參數值,直到您明確設定參數為止。
-
變更不會立即套用 –
UpdateClusterConfig傳回時,組態變更不會生效。Amazon EKS 透過控制平面的滾動更新來套用新組態,因此在變更生效前,預期會有幾分鐘的時間。更新完成時,叢集會返回ACTIVE狀態。您可以使用 DescribeUpdate 操作或 區塊追蹤進度,直到使用 完成變更為止aws eks wait cluster-active。 -
可稽核性 – Amazon EKS 會在套用之前驗證每個組態,並記錄 AWS CloudTrail 中的組態變更。
-
工具支援 – 進階 Kubernetes 控制平面組態可在啟動時透過 AWS 管理主控台、eksctl、 AWS CLI、Amazon EKS API、 AWS CloudFormation 和 AWS CDK 提供。即將支援 Kubernetes (ACK) 和 Terraform 的 AWS 控制器。
-
Kubernetes 版本支援 – 執行 Kubernetes 1.31 版或更新版本的新叢集和現有叢集支援進階 Kubernetes 控制平面組態。
-
AWS 區域支援 – 進階 Kubernetes 控制平面組態適用於所有 AWS 商業區域、 AWS GovCloud (US) 區域,以及提供 Amazon EKS 的 AWS 中國區域。
-
定價 – 設定控制平面參數無需額外費用。使用
horizontalPodAutoscalerSyncPeriod需要佈建的控制平面,以您擴展層的每小時費率計費。如需詳細資訊,請參閱 Amazon EKS 定價。
後續步驟
-
設定進階 Kubernetes 控制平面參數 – 使用 CLI 和 AWS 設定和檢視控制平面參數 AWS 管理主控台。
-
Amazon EKS 佈建控制平面 – 預先配置控制平面容量,以實現可預測的高效能。