協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
為高 DNS 流量擴展 CoreDNS Pod
當您啟動具有至少一個節點的 Amazon EKS 叢集時,依預設會部署包括兩個 CoreDNS 映像複本的 Deployment,而不論叢集中部署的節點數量為何。CoreDNS Pod 為叢集中的所有 Pod 提供名稱解析。應用程式使用名稱解析來連線至叢集中的 Pod 和服務,並連線至叢集外部的服務。隨著來自 Pod 的名稱解析請求 (查詢) 數量增加,CoreDNS Pod 可能會變得不堪重負和速度變慢,並拒絕 Pod 無法處理的請求。
為應對 CoreDNS Pod 增加的負載,請考慮為 CoreDNS 設定自動擴展系統。Amazon EKS 可在 CoreDNS 的 EKS 附加元件版本中管理 CoreDNS 部署的自動擴展。此 CoreDNS 自動擴展器持續監控叢集狀態,包括節點數和 CPU 核心數。根據該資訊,控制器會動態調整 EKS 叢集中 CoreDNS 部署的複本數量。此功能適用於 CoreDNS v1.9 及更新版本。有關哪些版本與 CoreDNS 自動擴展相容的更多資訊,請參閱下一節。
該系統會根據叢集中的節點和 CPU 核心數目,使用動態公式自動管理 CoreDNS 複本,計算方式為 (numberOfNodes 除以 16) 和 (numberOfCPUCores 除以 256) 的最大值。它會評估 10 分鐘尖峰時段的需求,在需要時立即向上擴展以處理增加的 DNS 查詢負載,同時每 3 分鐘縮減複本規模 33%,以維持系統穩定性並避免中斷。
我們建議您將此功能與其他 EKS Cluster Autoscaling 最佳實務
先決條件
要讓 Amazon EKS 擴展您的 CoreDNS 部署,有三個先決條件:
-
必須使用 CoreDNS 的 EKS 附加元件版本。
-
叢集必須執行至少最低要求的叢集版本和平台版本。
-
叢集必須執行至少最低要求的 CoreDNS EKS 附加元件版本。
最低叢集版本
CoreDNS 的自動擴展由叢集控制平面中的新元件負責,該元件由 Amazon EKS 管理。因此,您必須將叢集升級至支援具有新元件的最低平台版本的 EKS 版本。
新的 Amazon EKS 叢集。若要部署叢集,請參閱 開始使用 Amazon EKS。叢集必須執行下表所列的其中一種 Kubernetes 版本和平台版本或更高版本。請注意,也支援比上列任何 Kubernetes 與平台版本更新的版本。您可使用叢集名稱取代下列命令的 my-cluster,然後執行修改的命令來檢查目前 Kubernetes 版本:
aws eks describe-cluster --name my-cluster --query cluster.version --output text
| Kubernetes 版本 | 平台版本 |
|---|---|
|
未列示 |
全部平台版本 |
|
|
|
|
|
|
|
|
|
|
|
|
注意
也支援更高 Kubernetes 版本的每個平台版本,例如從 eks.1 開始的 Kubernetes 版本 1.30。
最低 EKS 附加元件版本
| Kubernetes 版本 | 1.29 | 1.28 |
|---|---|---|
|
|
|
-
確保您的叢集達到或高於最低叢集版本。
Amazon EKS 會自動在同一 Kubernetes 版本的不同平台版本之間升級叢集,您無法自行啟動此程序。相反,您可以將叢集升級到下一個 Kubernetes 版本,叢集將升級到該 K8s 版本和最新的平台版本。
新的 Kubernetes 版本有時會加入重大變更。因此,我們推薦您在更新生產叢集之前,使用新 Kubernetes 版本的單獨叢集測試應用程式的行為。
要將叢集升級至新的 Kubernetes 版本,請遵循將現有叢集更新至全新 Kubernetes 版本中的程序。
-
確保您擁有 CoreDNS 的 EKS 附加元件,而不是自我管理的 CoreDNS 部署。
視您用來建立叢集的工具而定,您的叢集上目前可能沒有安裝 Amazon EKS 附加元件類型。要查看叢集上安裝的附加元件類型,可執行以下命令。使用您叢集的名稱取代
my-cluster。aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text如果傳回版本編號,則表明已在叢集上安裝附加元件的 Amazon EKS 類型,並且您可以繼續後續步驟。如果傳回錯誤,則表明沒有在叢集上安裝 Amazon EKS 類型的附加元件。完成程序建立 CoreDNS Amazon EKS 附加元件的其餘步驟,以用 Amazon EKS 附加元件取代自我管理版本。
-
確保 CoreDNS 的 EKS 附加元件版本等於或高於最低 EKS 附加元件版本。
查看叢集上目前安裝了哪些附加元件版本。您可以在 AWS 管理主控台 中檢查或執行以下命令:
kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3範例輸出如下。
v1.10.1-eksbuild.13將此版本與上一節中的最低要求 EKS 附加元件版本進行比較。如有需要,請遵循程序更新 CoreDNS Amazon EKS 附加元件將 EKS 附加元件升級到更高版本。
-
可將自動調整規模組態新增至 EKS 附加元件的選用組態設定。
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取 Clusters (叢集),然後選取您要為其設定附加元件之叢集的名稱。
-
選擇附加元件索引標籤。
-
選取 CoreDNS 附加元件方塊右上方的方塊,然後選擇編輯。
-
在設定 CoreDNS 頁面上:
-
選取您要使用的版本。建議您保留與上一步驟相同的版本,並執行單獨的動作來更新版本與組態。
-
展開選用組態設定。
-
請輸入組態值中包含索引鍵
"enabled":和值true的巢狀 JSON 物件的 JSON 索引鍵"autoscaling":和值。產生的文字必須是有效的 JSON 物件。如果此金鑰和值是文字方塊中唯一的資料,請以大括號{ }括住該金鑰和值。以下範例顯示已啟用自動擴展:{ "autoScaling": { "enabled": true } } -
(選用) 您可以提供自動擴展可以將 CoreDNS Pod 數量擴展到的最小值和最大值。
以下範例顯示已啟用自動擴展,並且所有選用鍵都有值。我們建議 CoreDNS Pod 的最小數量始終大於 2,以提供叢集中 DNS 服務的彈性。
{ "autoScaling": { "enabled": true, "minReplicas": 2, "maxReplicas": 10 } }
-
-
要透過取代 CoreDNS Pod 來套用新組態,請選擇儲存變更。
Amazon EKS 藉由推展適用於 CoreDNS 的 Kubernetes 部署,來套用變更至 EKS 附加元件。您可在 AWS 管理主控台 的附加元件更新歷程記錄中,以及透過
kubectl rollout status deployment/coredns --namespace kube-system來追蹤推展狀態。kubectl rollout具有下列命令:kubectl rollout history -- View rollout history pause -- Mark the provided resource as paused restart -- Restart a resource resume -- Resume a paused resource status -- Show the status of the rollout undo -- Undo a previous rollout若推展時間太長,Amazon EKS 會復原推展,並且類型為附加元件更新及狀態為失敗的訊息,則會新增至附加元件的更新歷程記錄。要調查任何問題,請從推展的歷史記錄開始,並在 CoreDNS Pod 上執行
kubectl logs,以查看 CoreDNS 的日誌。
-
-
若更新歷程記錄中新項目的狀態為成功,則表示推展已完成,並且在所有 CoreDNS Pod 身分識別代理程式 Pod 中,附加元件均會使用新的組態。當您變更叢集中節點的節點和 CPU 核心數時,Amazon EKS 會擴展 CoreDNS 部署的複本數量。
-
確保您的叢集達到或高於最低叢集版本。
Amazon EKS 會自動在同一 Kubernetes 版本的不同平台版本之間升級叢集,您無法自行啟動此程序。相反,您可以將叢集升級到下一個 Kubernetes 版本,叢集將升級到該 K8s 版本和最新的平台版本。
新的 Kubernetes 版本有時會加入重大變更。因此,我們推薦您在更新生產叢集之前,使用新 Kubernetes 版本的單獨叢集測試應用程式的行為。
要將叢集升級至新的 Kubernetes 版本,請遵循將現有叢集更新至全新 Kubernetes 版本中的程序。
-
確保您擁有 CoreDNS 的 EKS 附加元件,而不是自我管理的 CoreDNS 部署。
視您用來建立叢集的工具而定,您的叢集上目前可能沒有安裝 Amazon EKS 附加元件類型。要查看叢集上安裝的附加元件類型,可執行以下命令。使用您叢集的名稱取代
my-cluster。aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text如果傳回版本編號,則表明已在叢集上安裝附加元件的 Amazon EKS 類型。如果傳回錯誤,則表明沒有在叢集上安裝 Amazon EKS 類型的附加元件。完成程序建立 CoreDNS Amazon EKS 附加元件的其餘步驟,以用 Amazon EKS 附加元件取代自我管理版本。
-
確保 CoreDNS 的 EKS 附加元件版本等於或高於最低 EKS 附加元件版本。
查看叢集上目前安裝了哪些附加元件版本。您可以在 AWS 管理主控台 中檢查或執行以下命令:
kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3範例輸出如下。
v1.10.1-eksbuild.13將此版本與上一節中的最低要求 EKS 附加元件版本進行比較。如有需要,請遵循程序更新 CoreDNS Amazon EKS 附加元件將 EKS 附加元件升級到更高版本。
-
可將自動調整規模組態新增至 EKS 附加元件的選用組態設定。
執行下列 AWS CLI 命令。將
my-cluster取代為您的叢集名稱,並將 IAM 角色 ARN 取代為您正在使用的角色。aws eks update-addon --cluster-name my-cluster --addon-name coredns \ --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true}}'Amazon EKS 藉由推展適用於 CoreDNS 的 Kubernetes 部署,來套用變更至 EKS 附加元件。您可在 AWS 管理主控台 的附加元件更新歷程記錄中,以及透過
kubectl rollout status deployment/coredns --namespace kube-system來追蹤推展狀態。kubectl rollout具有下列命令:kubectl rollout history -- View rollout history pause -- Mark the provided resource as paused restart -- Restart a resource resume -- Resume a paused resource status -- Show the status of the rollout undo -- Undo a previous rollout若推展時間太長,Amazon EKS 會復原推展,並且類型為附加元件更新及狀態為失敗的訊息,則會新增至附加元件的更新歷程記錄。要調查任何問題,請從推展的歷史記錄開始,並在 CoreDNS Pod 上執行
kubectl logs,以查看 CoreDNS 的日誌。 -
(選用) 您可以提供自動擴展可以將 CoreDNS Pod 數量擴展到的最小值和最大值。
以下範例顯示已啟用自動擴展,並且所有選用鍵都有值。我們建議 CoreDNS Pod 的最小數量始終大於 2,以提供叢集中 DNS 服務的彈性。
aws eks update-addon --cluster-name my-cluster --addon-name coredns \ --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true,"minReplicas":2,"maxReplicas":10}}' -
透過執行以下命令檢查附加元件更新的狀態:
aws eks describe-addon --cluster-name my-cluster --addon-name coredns如果您看到此行:
"status": "ACTIVE",則表示推展已完成,且附加元件在所有 CoreDNS Pod 中使用新組態。當您變更叢集中節點的節點和 CPU 核心數時,Amazon EKS 會擴展 CoreDNS 部署的複本數量。