擴展 CoreDNSPods 適用於高DNS流量 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。

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

擴展 CoreDNSPods 適用於高DNS流量

當您啟動具有至少一個節點的 Amazon EKS叢集時,Deployment 的兩個複本 CoreDNS 映像預設會部署,無論叢集中部署的節點數量為何。所以此 CoreDNS Pod 提供叢集中所有 Pod 的名稱解析。應用程式會使用名稱解析來連線至叢集中的 Pod 和服務,以及連線至叢集外部的服務。隨著 Pod 中名稱解析 (查詢) 的請求數量增加,CoreDNS Pod 可能會不堪重負並放慢速度,並拒絕 Pod 無法處理的請求。

處理 上增加的負載 CoreDNS Pod,考慮 的自動擴展系統 CoreDNS。 Amazon EKS可以管理 的自動擴展 CoreDNS EKS 的附加元件版本中的部署 CoreDNS。 這 CoreDNS autoscaler 會持續監控叢集狀態,包括節點和CPU核心的數量。根據該資訊,控制器會動態調整 的複本數量 CoreDNS EKS 叢集中的部署。此功能適用於 CoreDNS v1.9 和 EKS 版本 1.25 及更新版本。如需與哪些版本相容的詳細資訊 CoreDNS Autoscaling,請參閱下一節。

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

必要條件

讓 Amazon EKS擴展您的 CoreDNS 部署有三個先決條件:

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

  • 您的叢集必須至少執行最低叢集版本和平台版本。

  • 您的叢集必須至少執行 的EKS附加元件最低版本 CoreDNS.

最低叢集版本

的自動擴展 CoreDNS 由叢集控制平面中的新元件完成,由 Amazon 管理EKS。因此,您必須將叢集升級至支援具有新元件之最低平台版本的EKS版本。

新的 Amazon EKS叢集。若要部署叢集,請參閱 開始使用 Amazon EKS。叢集必須是 Kubernetes 版本 1.25 或更新版本。叢集必須執行其中一個 Kubernetes 下表列出的版本和平台版本,或更新版本。請注意,任何 Kubernetes 也支援 和 平台版本晚於列出的版本。您可以檢查目前的 Kubernetes 版本取代 my-cluster 在下列命令中,使用叢集的名稱,然後執行修改後的命令:

aws eks describe-cluster --name my-cluster --query cluster.version --output text
Kubernetes version 平台版本

1.29.3

eks.7

1.28.8

eks.13

1.27.12

eks.17

1.26.15

eks.18

1.25.16

eks.19

注意

更新版本的每個平台 Kubernetes 也支援 版本,例如 Kubernetes 1.30 eks.1 和更新版本。

最低EKS附加元件版本

Kubernetes version 1.29 1.28 1.27 1.26 1.25
v1.11.1-eksbuild.9 v1.10.1-eksbuild.11 v1.10.1-eksbuild.11 v1.9.3-eksbuild.15 v1.9.3-eksbuild.15
  1. 確保您的叢集處於或高於最低叢集版本。

    相同 平台版本之間的 Amazon EKS 升級叢集 Kubernetes 版本,您無法自行啟動此程序。相反地,您可以將叢集升級至下一個叢集 Kubernetes 版本,而叢集將升級至該 K8s 版本和最新的平台版本。例如,如果您從 1.25 升級至 1.26,叢集將升級至 1.26.15 eks.18

    新增 Kubernetes 版本有時會帶來重大變更。因此,我們建議您使用新的 叢集來測試應用程式的行為 Kubernetes 版本。

    將叢集升級至新的 Kubernetes 版本,請遵循 中的程序將現有叢集更新至新的 Kubernetes 版本

  2. 確保您擁有 的 EKS 附加元件 CoreDNS,而非自我管理 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 附加元件。

  3. 確定您的 附加EKS元件 CoreDNS 的版本等於或高於最低EKS附加元件版本。

    查看叢集上目前安裝了哪些附加元件版本。您可以在 中查看 AWS Management Console 或執行下列命令:

    kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3

    範例輸出如下。

    v1.10.1-eksbuild.13

    將此版本與上一節中的EKS最低附加元件版本進行比較。如有需要,請依照程序 將EKS附加元件升級至更高版本更新 CoreDNS Amazon EKS 附加元件

  4. 將自動擴展組態新增至EKS附加元件的選用組態設定

    1. 開啟位於 https://console.aws.amazon.com/eks/home#/clusters 的 Amazon EKS主控台。

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

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

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

    5. 設定 上 CoreDNS 頁面:

      1. 選取您要使用的 Version (版本)。建議您保留與上一個步驟相同的版本,並以個別動作更新版本和組態。

      2. 展開選用組態設定

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

        { "autoScaling": { "enabled": true } }
      4. (選用) 您可以提供 Autoscaling 可以擴展 數量的最小值和最大值 CoreDNS Pod 目的地。

        下列範例顯示已啟用自動擴展功能,且所有選用金鑰都有值。我們建議 CoreDNS Pod 一律大於 2,以為叢集中的DNS服務提供彈性。

        { "autoScaling": { "enabled": true, "minReplicas": 2, "maxReplicas": 10 } }
    6. 若要透過取代 CoreDNS Pod,選擇儲存變更

      Amazon 使用 的推出,將變更EKS套用至EKS附加元件 Kubernetes 核心 的部署DNS。您可以在 和 中的附加元件更新歷史記錄中追蹤推出狀態 AWS Management Console 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會復原推出,且具有附加元件更新類型和失敗狀態的訊息會新增至附加元件的更新歷史記錄。若要調查任何問題,請從推出歷史記錄開始,並在 kubectl logs上執行 CoreDNS Pod 以查看 的日誌 CoreDNS.

  5. 如果更新歷史記錄中的新項目狀態為成功 ,則推展已完成,且附加元件在所有 中使用新組態 CoreDNS Pod。當您變更叢集中節點的數目和CPU核心時,Amazon 會EKS擴展 的複本數目 CoreDNS 部署。

  1. 確保您的叢集處於或高於最低叢集版本。

    相同平台版本之間的 Amazon EKS 升級叢集 Kubernetes 版本,您無法自行啟動此程序。相反地,您可以將叢集升級至下一個叢集 Kubernetes 版本,且叢集將升級至該 K8s 版本和最新的平台版本。例如,如果您從 1.25 升級至 1.26,叢集將升級至 1.26.15 eks.18

    新增 Kubernetes 版本有時會帶來重大變更。因此,我們建議您使用新的 叢集來測試應用程式的行為 Kubernetes 版本。

    將叢集升級至新的 Kubernetes 版本,請遵循 中的程序將現有叢集更新至新的 Kubernetes 版本

  2. 確保您擁有 的 EKS 附加元件 CoreDNS,而非自我管理 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 附加元件。

  3. 確定您的 附加EKS元件 CoreDNS 的版本與最低EKS附加元件版本相同或更高。

    查看叢集上目前安裝了哪些附加元件版本。您可以在 中查看 AWS Management Console 或執行下列命令:

    kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3

    範例輸出如下。

    v1.10.1-eksbuild.13

    將此版本與上一節中的最低EKS附加元件版本進行比較。如有需要,請依照程序 將EKS附加元件升級至更高版本更新 CoreDNS Amazon EKS 附加元件

  4. 將自動擴展組態新增至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套用至EKS附加元件 Kubernetes 核心 的部署DNS。您可以在 和 中的附加元件更新歷史記錄中追蹤推出狀態 AWS Management Console 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會復原推出,且具有附加元件更新類型和失敗狀態的訊息會新增至附加元件的更新歷史記錄。若要調查任何問題,請從推出歷史記錄開始,並在 kubectl logs上執行 CoreDNS Pod 來查看 的日誌 CoreDNS.

  5. (選用) 您可以提供 Autoscaling 可以擴展 數量的最小值和最大值 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}}'
  6. 執行下列命令,檢查附加元件的更新狀態:

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

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