View a markdown version of this page

為高 DNS 流量擴展 CoreDNS Pod - Amazon EKS

協助改進此頁面

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

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

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

為高 DNS 流量擴展 CoreDNS Pod

當您啟動具有至少一個節點的 Amazon EKS 叢集時,預設會部署 CoreDNS 映像的兩個複本的部署,無論叢集中部署的節點數目為何。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 附加元件組態來調整 nodesPerReplica和 cpuCoresPerReplica擴展參數:

  • nodesPerReplica:每個 CoreDNS 複本的節點數量。預設值為 16。較小的值會增加自動擴展為指定數量節點維護的複本數量。

  • cpuCoresPerReplica:每個 CoreDNS 複本的 CPU 核心數量。預設值為 256。較小的值會增加自動擴展為指定數量的 CPU 核心維護的複本數量。

Autoscaling 使用兩個計算複本計數中的較大者,並固定 minReplicas和 之間的結果maxReplicas。若要使用 nodesPerReplica或 cpuCoresPerReplica,您的 CoreDNS 附加元件必須為叢集 Kubernetes 版本的最低版本。如需詳細資訊,請參閱進階擴展參數的最低 EKS 附加元件版本。

我們建議您將此功能與其他 EKS Cluster Autoscaling 最佳實務結合使用,以改善整體應用程式可用性和叢集可擴展性。

先決條件

若要讓 Amazon EKS 擴展您的 CoreDNS 部署,您必須符合下列先決條件:

  • 必須使用 CoreDNS 的 EKS 附加元件版本。

  • 若要設定 nodesPerReplica或 cpuCoresPerReplica,您必須根據叢集的 Kubernetes 版本使用最低 CoreDNS 附加元件版本,如下節所示。

進階擴展參數的最低 EKS 附加元件版本

下表列出每個 Kubernetes 版本使用 nodesPerReplica和 cpuCoresPerReplica擴展參數所需的最低 CoreDNS 附加元件版本。

Kubernetes 版本 CoreDNS 版本

1.36

v1.14.3-eksbuild.16

1.35

v1.14.3-eksbuild.16

1.34

v1.13.2-eksbuild.24

1.33

v1.12.4-eksbuild.31

1.32

v1.11.4-eksbuild.53

1.31

v1.11.4-eksbuild.53

  1. 確保您擁有 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 附加元件取代自我管理版本。

  2. 確保 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 附加元件升級到更高版本。

  3. 可將自動調整規模組態新增至 EKS 附加元件的選用組態設定。

    1. 開啟 Amazon EKS 主控台。

    2. 在左側導覽窗格中,選取 Clusters (叢集),然後選取您要為其設定附加元件之叢集的名稱。

    3. 選擇附加元件索引標籤。

    4. 選取 CoreDNS 附加元件方塊右上方的方塊,然後選擇編輯。

    5. 在設定 CoreDNS 頁面上:

      1. 選取您要使用的版本。建議您保留與上一步驟相同的版本,並執行單獨的動作來更新版本與組態。

      2. 展開選用組態設定。

      3. 請輸入組態值中包含索引鍵 "enabled": 和值 true 的巢狀 JSON 物件的 JSON 索引鍵 "autoscaling": 和值。產生的文字必須是有效的 JSON 物件。如果此金鑰和值是文字方塊中唯一的資料,請以大括號 { } 括住該金鑰和值。以下範例顯示已啟用自動擴展:

        { "autoScaling": { "enabled": true } }

        下列範例顯示以最小和最大複本值啟用自動擴展。我們建議 CoreDNS Pod 的最小數量始終大於 2,以提供叢集中 DNS 服務的彈性。

        { "autoScaling": { "enabled": true, "minReplicas": 2, "maxReplicas": 10 } }

        下列範例也會設定 nodesPerReplica和 cpuCoresPerReplica 擴展參數。這些金鑰需要最低的 CoreDNS 附加元件版本。如需詳細資訊,請參閱進階擴展參數的最低 EKS 附加元件版本。

        { "autoScaling": { "enabled": true, "minReplicas": 2, "maxReplicas": 10, "nodesPerReplica": 5, "cpuCoresPerReplica": 256 } }
    6. 要透過取代 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 的日誌。

  4. 若更新歷程記錄中新項目的狀態為成功,則表示推展已完成,並且在所有 CoreDNS Pod 身分識別代理程式 Pod 中,附加元件均會使用新的組態。當您變更叢集中節點的節點和 CPU 核心數時,Amazon EKS 會擴展 CoreDNS 部署的複本數量。

  1. 確保您擁有 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 附加元件取代自我管理版本。

  2. 確保 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 附加元件升級到更高版本。

  3. 可將自動調整規模組態新增至 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 的日誌。

  4. (選用) 您可以提供自動擴展可以將 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}}'
  5. (選用) 您也可以設定 nodesPerReplica和 cpuCoresPerReplica 擴展參數。這些金鑰需要最低的 CoreDNS 附加元件版本。如需詳細資訊,請參閱進階擴展參數的最低 EKS 附加元件版本。

    aws eks update-addon --cluster-name my-cluster --addon-name coredns \ --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true,"minReplicas":2,"maxReplicas":10,"nodesPerReplica":5,"cpuCoresPerReplica":256}}'
  6. 透過執行以下命令檢查附加元件更新的狀態:

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns

    如果您看到此行:"status": "ACTIVE",則表示推展已完成,且附加元件在所有 CoreDNS Pod 中使用新組態。當您變更叢集中節點的節點和 CPU 核心數時,Amazon EKS 會擴展 CoreDNS 部署的複本數量。