設定進階 Kubernetes 控制平面參數 - Amazon EKS

View a markdown version of this page

設定進階 Kubernetes 控制平面參數 - Amazon EKS

協助改進此頁面

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

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

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

設定進階 Kubernetes 控制平面參數

本指南將逐步引導您使用 CLI 和 來設定和檢視進階 Kubernetes AWS 控制平面參數 AWS 管理主控台。如需每個參數的說明及其對叢集的影響,請參閱 進階 Kubernetes 控制平面組態

先決條件

開始之前,請確定您具有下列先決條件:

  • 執行 Kubernetes 1.31 版或更新版本的 Amazon EKS 叢集 – 執行 Kubernetes 1.31 版或更新版本的新叢集和現有叢集支援進階 Kubernetes 控制平面組態。本主題中的所有參數都會共用此最低版本。

  • AWS CLI – 用於使用 AWS 服務的命令列工具,包括 Amazon EKS。如需詳細資訊,請參閱《 AWS 命令列界面使用者指南》中的安裝。安裝 CLI AWS 之後,建議您也進行設定。如需詳細資訊,請參閱《 AWS 命令列界面使用者指南》中的具有 aws 設定的快速組態

  • 必要的 IAM 許可 – 您使用的 IAM 主體必須具有描述和更新 Amazon EKS 叢集的許可。若要檢查目前的委託人,請執行下列命令:

    aws sts get-caller-identity
注意

建議您在 Bash shell 中完成本主題中的步驟。如果您不使用 Bash shell,則某些指令碼命令 (如行接續字元以及設定和使用變數的方式) 需要針對 shell 進行調整。此外,您的 Shell 的引用及轉義規則可能會有所不同。如需詳細資訊,請參閱《 AWS 命令列界面使用者指南》中的使用引號搭配 AWS CLI 中的字串

執行本主題中的命令之前,請先設定您偏好的叢集名稱和區域:

export CLUSTER=my-eks-cluster export AWS_REGION=us-west-2

支援的值

Amazon EKS 會根據下列範圍驗證每個參數,並拒絕其外部的請求。

元件參數 支援的值 預設

kubeSchedulerConfig.nodeResourcesFit.scoringStrategy.type

LeastAllocated, MostAllocated

LeastAllocated

kubeSchedulerConfig.nodeResourcesFit.scoringStrategy.resources[].weight

1100

cpu: 1, memory: 1

kubeControllerManagerConfig.horizontalPodAutoscalerControllerConfig.horizontalPodAutoscalerSyncPeriod

10s15s

15s

kubeControllerManagerConfig.podGcControllerConfig.terminatedPodGcThreshold

1000012500

12500

kubeApiServerConfig.eventTtl

10m60m

60m

kubeApiServerConfig.serviceNodePortRange.minPort

1026032767

30000

kubeApiServerConfig.serviceNodePortRange.maxPort

1026032767

32767

這些值適用於發佈時可用的 Kubernetes 版本,並且可能會在更新版本中變更。若要擷取特定版本的目前值,請參閱下一節。

尋找 Kubernetes 版本的預設值和支援值

DescribeClusterVersions 操作會針對每個 Kubernetes 版本,報告每個控制平面參數的預設值和支援的值。讀取此操作中的值,而不是硬式編碼,尤其是在自動化叢集組態或管理多個 Kubernetes 版本的叢集時。

aws eks describe-cluster-versions --cluster-versions 1.35

回應包含controlPlaneComponentConfig物件,由控制平面元件組織。每個參數都會報告 defaultValueconstraints 物件:

{ "clusterVersions": [ { "clusterVersion": "1.35", "clusterType": "eks", "defaultVersion": false, "releaseDate": "2026-01-23T00:00:00+00:00", "endOfStandardSupportDate": "2027-03-23T00:00:00+00:00", "endOfExtendedSupportDate": "2028-03-23T00:00:00+00:00", "status": "STANDARD_SUPPORT", "controlPlaneScalingTiers": [ { "tierName": "tier-xl", "apiRequestConcurrency": 2000, "podSchedulingRatePerSecond": 167, "clusterDatabaseSizeGb": 16 }, { "tierName": "tier-2xl", "apiRequestConcurrency": 4000, "podSchedulingRatePerSecond": 283, "clusterDatabaseSizeGb": 16 }, { "tierName": "tier-4xl", "apiRequestConcurrency": 8000, "podSchedulingRatePerSecond": 400, "clusterDatabaseSizeGb": 16 }, { "tierName": "tier-8xl", "apiRequestConcurrency": 16000, "podSchedulingRatePerSecond": 400, "clusterDatabaseSizeGb": 16 } ], "controlPlaneComponentConfig": { "kubeApiServerConfig": { "eventTtl": { "defaultValue": "60m", "constraints": { "min": "10m", "max": "60m" } }, "serviceNodePortRange": { "defaultValue": { "minPort": 30000, "maxPort": 32767 }, "constraints": { "minPort": {"min": 10260, "max": 32767}, "maxPort": {"min": 10260, "max": 32767} } } }, "kubeSchedulerConfig": { "nodeResourcesFit": { "scoringStrategy": { "defaultValue": { "type": "LeastAllocated", "resources": [ {"name": "cpu", "weight": 1}, {"name": "memory", "weight": 1} ] }, "constraints": { "scoringStrategy": { "allowedValues": ["LeastAllocated", "MostAllocated"] }, "resources": { "name": { "allowedValues": [ "cpu", "memory", "nvidia.com/gpu", "aws.amazon.com/neuron", "aws.amazon.com/neuroncore" ] }, "weight": {"min": 1, "max": 100} } } } } }, "kubeControllerManagerConfig": { "horizontalPodAutoscalerControllerConfig": { "horizontalPodAutoscalerSyncPeriod": { "defaultValue": "15s", "constraints": { "min": "10s", "max": "15s" } } }, "podGcControllerConfig": { "terminatedPodGcThreshold": { "defaultValue": 12500, "constraints": { "min": 10000, "max": 12500 } } } } } } ] }

上述回應顯示版本支援日期、佈建的控制平面擴展層,以及控制平面組態欄位。如需詳細資訊,請參閱《Amazon EKS API 參考》中的 DescribeClusterVersions

若要僅傳回組態欄位,請使用 --query選項:

aws eks describe-cluster-versions --cluster-versions 1.35 \ --query 'clusterVersions[0].controlPlaneComponentConfig'

控制平面組態 - AWS CLI

每個控制平面元件都有自己的參數:--kube-scheduler-config--kube-controller-manager-config--kube-api-server-config。您只能指定要自訂的元件。每個參數接受內嵌 JSON。

使用控制平面參數建立叢集

下列命令會建立叢集,將新的 Kubernetes 事件保留 10 分鐘,而非預設的 60 分鐘。您未指定的參數會使用其預設值。

aws eks create-cluster \ --name "$CLUSTER" \ --kubernetes-version 1.35 \ --role-arn arn:aws:iam::111122223333:role/eks-service-role \ --resources-vpc-config subnetIds=subnet-abc123,subnet-def456,securityGroupIds=sg-xyz789 \ --kube-api-server-config '{ "eventTtl": "10m" }'

回應:

{ "cluster": { "name": "my-eks-cluster", "arn": "arn:aws:eks:us-west-2:111122223333:cluster/my-eks-cluster", "createdAt": 1709640000.0, "version": "1.35", "roleArn": "arn:aws:iam::111122223333:role/eks-service-role", "status": "CREATING", "kubeSchedulerConfig": { "nodeResourcesFit": { "scoringStrategy": { "type": "LeastAllocated" } } }, "kubeControllerManagerConfig": { "horizontalPodAutoscalerControllerConfig": { "horizontalPodAutoscalerSyncPeriod": "15s" } }, "kubeApiServerConfig": { "eventTtl": "10m", "serviceNodePortRange": { "minPort": 30000, "maxPort": 32767 } } } }

檢視叢集的控制平面組態

aws eks describe-cluster --name "$CLUSTER"

回應包含 kubeSchedulerConfigkubeControllerManagerConfigkubeApiServerConfig作為最上層欄位。這些欄位一律存在,並顯示在控制平面上執行的完整組態,包括您尚未自訂的參數及其預設值。

若要傳回單一元件的組態,請使用 --query選項:

aws eks describe-cluster --name "$CLUSTER" \ --query 'cluster.kubeSchedulerConfig'

回應:

{ "nodeResourcesFit": { "scoringStrategy": { "type": "LeastAllocated" } } }

設定排程器評分策略

根據預設,排程器會使用 LeastAllocated策略,將 Pod 分散到各個節點。下列命令會將其變更為 MostAllocated,這偏好具有較高資源配置的節點,並將 Pod 封裝到較少節點。

aws eks update-cluster-config \ --name "$CLUSTER" \ --kube-scheduler-config '{ "nodeResourcesFit": { "scoringStrategy": { "type": "MostAllocated" } } }'

回應:

{ "update": { "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "status": "InProgress", "type": "ControlPlaneComponentConfigUpdate", "params": [ { "type": "kubeSchedulerConfig", "value": "{\"nodeResourcesFit\":{\"scoringStrategy\":{\"type\":\"MostAllocated\"}}}" } ], "createdAt": 1709643600.0, "errors": [] } }

您也可以在評分計算中指定resources陣列來權重個別資源,當特定資源是叢集中的限制條件時,這會很有用。如需詳細資訊,請參閱進階 Kubernetes 控制平面組態

其他控制平面參數遵循相同的模式,每個都具有自己的元件旗標:--kube-api-server-config適用於 eventTtlserviceNodePortRange--kube-controller-manager-config適用於 Horizontal Pod Autoscaler 同步期間。如需了解每個參數的功能,以及在變更參數之前要考慮的內容,請參閱 進階 Kubernetes 控制平面組態

一次更新多個元件

您可以在單一呼叫中指定多個元件參數:

aws eks update-cluster-config \ --name "$CLUSTER" \ --kube-scheduler-config '{"nodeResourcesFit":{"scoringStrategy":{"type":"MostAllocated"}}}' \ --kube-api-server-config '{"eventTtl":"30m"}'

更新會與您現有的組態合併。只有您指定的欄位會變更,而您省略的欄位會保留其目前值。上述命令會讓您的控制器管理員組態保持不變。

監控控制平面組態更新

update-cluster-config 傳回時,組態變更不會生效。Amazon EKS 透過控制平面的滾動更新來套用新組態,這需要幾分鐘的時間。若要封鎖 ,直到變更完成:

aws eks wait cluster-active --name "$CLUSTER"

此命令會在叢集達到ACTIVE狀態時傳回,通常在幾分鐘內。

若要列出叢集的更新:

aws eks list-updates --name "$CLUSTER"

回應:

{ "updateIds": [ "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" ] }

若要檢視特定更新的狀態:

aws eks describe-update --name "$CLUSTER" \ --update-id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111

當更新完成Successful時,狀態會從 InProgress 變更為 ,或在發生錯誤Failed時變更為 。errors 欄位指出失敗的原因。

控制平面組態 — AWS 管理主控台

若要在建立叢集時設定進階 Kubernetes 控制平面參數:

  1. 開啟 Amazon EKS 主控台

  2. 選擇 Create Cluster (建立叢集)。

  3. 組態選項下,請選取自訂組態

  4. 向下捲動至控制平面組態

  5. 選擇啟用控制平面組態

  6. 設定您要設定的參數。您保持不變的參數會使用其預設值。

  7. 視需要選取其他叢集組態選項。在最後一個步驟中,選擇建立叢集。叢集建立可能需要幾分鐘的時間才能完成。

若要在現有叢集上設定進階 Kubernetes 控制平面參數:

  1. 開啟 Amazon EKS 主控台

  2. 選擇您要更新的叢集。

  3. 選擇概觀索引標籤,然後向下捲動至控制平面組態

  4. 選擇管理,然後選取啟用控制平面組態以設定您要變更的參數。接著選擇 Save changes (儲存變更)