管理 Amazon EKS 叢集中的 CoreDNS for DNS - Amazon EKS

協助改進此頁面

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

管理 Amazon EKS 叢集中的 CoreDNS for DNS

提示

使用 Amazon EKS 自動模式,您無需安裝或升級聯網附加元件。自動模式包括 Pod 聯網和負載平衡功能。

如需詳細資訊,請參閱 利用 EKS 自動模式自動運作叢集基礎設施

CoreDNS 是一個靈活、可擴展的 DNS 伺服器,可作為 Kubernetes 集群 DNS。當您啟動具有至少一個節點的 Amazon EKS 叢集時,依預設會部署兩個 CoreDNS 映像複本,而不論叢集中部署的節點數量為何。CoreDNS Pod 為叢集中的所有 Pod 提供名稱解析。如果您的叢集包含 Fargate Profile,且該設定檔的命名空間與 CoreDNS deployment 的命名空間相符,則可將 CoreDNS Pod 部署至 Fargate 節點。如需 CoreDNS 的詳細資訊,請參閱 Kubernetes 文件中的使用 CoreDNS 進行服務探索

CoreDNS 版本

下表列出適用於每個 Kubernetes 版本的 Amazon EKS 附加元件類型的最新版本。

Kubernetes 版本 CoreDNS 版本

1.33

v1.12.4-eksbuild.1

1.32

v1.11.4-eksbuild.22

1.31

v1.11.4-eksbuild.22

1.30

v1.11.4-eksbuild.22

1.29

v1.11.4-eksbuild.22

1.28

v1.10.1-eksbuild.38

重要

如果您要自行管理此附加元件,資料表中的版本可能與可用的自我管理版本不同。如需更新此附加元件之自我管理類型的詳細資訊,請參閱 更新 CoreDNS Amazon EKS 自我管理的附加元件

重要的 CoreDNS 升級考量

  • CoreDNS 更新會利用 PodDisruptionBudget,以協助在更新程序期間維持 DNS 服務可用性。

  • 為了提高 CoreDNS 部署的穩定性與可用性,版本 v1.9.3-eksbuild.6 及更新版本和 v1.10.1-eksbuild.3 會隨 PodDisruptionBudget 一起部署。如果您已部署現有 PodDisruptionBudget,則可能無法升級至上述版本。如果升級失敗,完成下列其中一項任務即可解決問題:

    • 升級 Amazon EKS 附加元件時,選擇將覆寫現有設定作為衝突解決方案選項。如果您已對部署制定自訂設定,則務必在升級前備份設定,以便在升級後重新套用其他自訂設定。

    • 移除現有的 PodDisruptionBudget,然後再次嘗試升級。

  • 在 EKS 附加元件版本 v1.9.3-eksbuild.3 和更新版本以及 v1.10.1-eksbuild.6 和更新版本中,CoreDNS 部署將 readinessProbe 設定為使用 /ready 端點。此端點已在的 CoreDNS 的 Corefile 組態檔案中啟用。

    如果您使用自訂 Corefile,則必須將 ready 外掛程式新增至組態,以便在 CoreDNS 中使用 /ready 端點才能使用探查。

  • 在 EKS 附加元件版本以v1.9.3-eksbuild.7及更新版本v1.10.1-eksbuild.4和更新版本中,您可以變更 PodDisruptionBudget。您可以使用下列範例的欄位,在選擇性組態設定中編輯附加元件並變更這些設定。此範例顯示預設值PodDisruptionBudget

    { "podDisruptionBudget": { "enabled": true, "maxUnavailable": 1 } }

    您可以設定 maxUnavailableminAvailable,但不能同時在單一 PodDisruptionBudget 進行設定。如需有關 PodDisruptionBudgets 的詳細資訊,請參閱 Kubernetes 文件中的指定 PodDisruptionBudget

    請注意,如果您將 enabled 設定為 false,則 PodDisruptionBudget 不會移除。將此欄位設定為false之後,您必須刪除PodDisruptionBudget物件。同樣地,如果您在升級至具有 PodDisruptionBudget 的版本之後編輯附加元件以使用較舊版本的附加元件 (降級附加元件),則 PodDisruptionBudget 不會移除。執行下列命令以刪除 PodDisruptionBudget

    kubectl delete poddisruptionbudget coredns -n kube-system
  • 在 EKS 附加元件版本 v1.10.1-eksbuild.5 和更新版本中,將預設容差從 node-role.kubernetes.io/master:NoSchedule 變更為 node-role.kubernetes.io/control-plane:NoSchedule,以符合 KEP 2067 的規定。如需有關 KEP 2067 的詳細資訊,請參閱 GitHub 上 Kubernetes Enhancement Proposals (KEP) 中的 KEP-2067:重新命名 kubeadm「主要」標籤和污點

    在 EKS 附加元件版本 v1.8.7-eksbuild.8 和更新版本以及 v1.9.3-eksbuild.9 和更新版本中,兩個容差均設定為與每個 Kubernetes 版本相容。

  • 在 EKS 附加元件版本 v1.9.3-eksbuild.11v1.10.1-eksbuild.7 及更新版本中,CoreDNS 部署會設定 topologySpreadConstraints 的預設值。如果多個可用區域中有可用的節點,預設值可確保 CoreDNS Pod 分散到可用區域。您可以設定自訂值,並使用該值取代預設值。預設值如下:

    topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: k8s-app: kube-dns

CoreDNS v1.11 升級考量

  • 在 EKS 附加元件版本 v1.11.1-eksbuild.4 和更新版本中,容器映像的基礎為 Amazon EKS Distro 維護的最低基礎映像,其中包含最少套件且沒有 Shell。如需詳細資訊,請參閱 Amazon EKS Distro。CoreDNS 映像的用量和故障診斷保持不變。