帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
提示
使用 Amazon EKS 自动模式时,您无需安装或升级联网附加组件。自动模式包含容器组联网和负载均衡功能。
有关更多信息,请参阅 使用 EKS 自动模式实现集群基础设施自动化。
CoreDNS 是一个灵活、可扩展的 DNS 服务器,可用作 Kubernetes 集群 DNS。当您启动具有至少一个节点的 Amazon EKS 集群时,无论集群中部署的节点数量如何,预设情况下都会部署 CoreDNS 镜像的两个副本。CoreDNS Pod 为集群中的所有 Pod 提供名称解析。如果您的集群包含命名空间与 CoreDNS deployment
的命名空间相匹配的 Fargate 配置文件,则可以将 CoreDNS 容器组(pod)部署到 Fargate 节点。有关 Fargate 配置文件的更多信息,请参阅定义启动时将使用 AWS Fargate 的容器组(pod)。有关 CoreDNS 的更多信息,请参阅 Kubernetes 文档中的使用 CoreDNS 进行服务发现
CoreDNS 版本
下表列出了每个 Kubernetes 版本的 Amazon EKS 附加组件类型的最新版本。
Kubernetes 版本 | CoreDNS 版本 |
---|---|
1.32 |
v1.11.4-eksbuild.2 |
1.31 |
v1.11.4-eksbuild.2 |
1.30 |
v1.11.4-eksbuild.2 |
1.29 |
v1.11.4-eksbuild.2 |
1.28 |
v1.10.1-eksbuild.18 |
1.27 |
v1.10.1-eksbuild.18 |
1.26 |
v1.9.3-eksbuild.22 |
1.25 |
v1.9.3-eksbuild.22 |
1.24 |
v1.9.3-eksbuild.22 |
重要
如果您自行管理此附加组件,则表中的版本可能与可用的自行管理版本不同。有关更新此附加组件的自行管理类型的更多信息,请参阅更新 CoreDNS Amazon EKS 自主管理型附加组件。
重要的 CoreDNS 升级注意事项
-
为了提高 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
插件添加到该配置,以便/ready
端点在 CoreDNS 中处于活动状态,供探测器使用。 -
在 EKS 附加组件版本
v1.9.3-eksbuild.7
及更高版本 和v1.10.1-eksbuild.4
及更高版本中,您可以更改PodDisruptionBudget
。您可以使用以下示例中的字段编辑附加组件并在可选配置设置中更改这些设置。此示例显示默认PodDisruptionBudget
。{ "podDisruptionBudget": { "enabled": true, "maxUnavailable": 1 } }
您可以设置
maxUnavailable
或minAvailable
,但不能在一个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 增强建议(KEP)中的 KEP-2067: Rename the kubeadm "master" label and taint。 在 EKS 附加组件
v1.8.7-eksbuild.8
及更高版本和v1.9.3-eksbuild.9
及更高版本中,两个公差都设置为与每个 Kubernetes 版本兼容。 -
在 EKS 附加组件
v1.9.3-eksbuild.11
和v1.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 维护的最小基本映像,其中包含最少的软件包且没有外壳。有关更多信息,请参阅 Amazon EKS Distro 。CoreDNS 映像的使用和问题排查保持不变。