使用 CoreDNS Amazon EKS 附加组件
CoreDNS 是一个灵活、可扩展的 DNS 服务器,可用作 Kubernetes 集群 DNS。当您启动具有至少一个节点的 Amazon EKS 集群时,无论集群中部署的节点数量如何,预设情况下都会部署 CoreDNS 镜像的两个副本。这些 CoreDNS pods 为集群中的所有 pods 提供名称解析。如果您的集群包含命名空间与 CoreDNS deployment
的命名空间相匹配的 Amazon Fargate 配置文件 时,则可以将 CoreDNS pods 容器部署到 Fargate 节点。有关 CoreDNS 的更多信息,请参阅 Kubernetes 文档中的使用 CoreDNS 进行服务发现
下表列出了每个 Kubernetes 版本的 Amazon EKS 附加组件类型的最新版本。
Kubernetes 版本 | 1.25 |
1.24 |
1.23 |
1.22 |
1.21 |
1.20 |
---|---|---|---|---|---|---|
v1.9.3-eksbuild.2 |
v1.8.7-eksbuild.4 |
v1.8.7-eksbuild.4 |
v1.8.7-eksbuild.4 |
v1.8.4-eksbuild.2 |
v1.8.3-eksbuild.1 |
重要
如果您自行管理此附加组件,则表中的版本可能与可用的自行管理版本不同。有关更新此附加组件的自行管理类型的更多信息,请参阅更新自我管理的附加组件。
先决条件
-
现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
-
如果您的集群为
1.21
版本或更高版本,请确保 Amazon VPC CNI plugin for Kubernetes 和kube-proxy
附加组件为 集群附加组件 中列出的最低版本。
创建 Amazon EKS 附加组件
创建 Amazon EKS 类型的附加组件。
-
查看集群上当前安装的附加组件版本。
kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3
输出示例如下。
v1.8.7-eksbuild.4
-
查看集群上当前安装的附加组件类型。根据您创建集群时使用的工具,您的集群上目前可能没有安装 Amazon EKS 附加组件类型。将
my-cluster
替换为您集群的名称。aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query addon.addonVersion --output text如果返回版本号,则表明您的集群上安装有 Amazon EKS 附加组件类型,且您不需要完成此过程的其余步骤。如果返回错误,则表明您的集群上安装有 Amazon EKS 类型的附加组件。完成此过程的其余步骤以进行安装。
-
保存您当前安装的附加组件的配置。
kubectl get deployment coredns -n kube-system -o yaml >
aws-k8s-coredns-old.yaml
-
使用 Amazon CLI 创建附加组件。如果要使用 Amazon Web Services Management Console 或
eksctl
来创建附加组件,请参阅 创建附加组件 并指定coredns
为附加组件名称。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。-
将
替换为您的集群名称。my-cluster
-
将
v1.9.3-eksbuild.2
替换为您的集群版本的最新版本表中列出的最新版本。
aws eks create-addon --cluster-name
my-cluster
--addon-name coredns --addon-versionv1.9.3-eksbuild.2
如果您对当前附加组件应用的自定义设置与 Amazon EKS 附加组件的默认设置相冲突,则创建可能会失败。如果创建失败,您会收到一条可以帮助您解决问题的错误信息。或者,您可以将
--resolve-conflicts OVERWRITE
添加到前面的命令中。这样一来,附加组件会覆盖任何现有的自定义设置。创建附加组件后,您可以使用自定义设置对其进行更新。 -
-
确认您的集群的 Kubernetes 版本的附加组件最新版本已添加到您的集群。将
替换为您的集群名称。my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query addon.addonVersion --output text附加组件创建可能需要几秒钟才能完成。
输出示例如下。
v1.9.3-eksbuild.2
-
如果您在创建 Amazon EKS 附加组件之前对原始附加组件进行了自定义设置,则请使用您在上一步中保存的配置,以使用您的自定义设置更新 Amazon EKS 附加组件。
更新 Amazon EKS 附加组件
更新 Amazon EKS 类型的附加组件。如果您尚未将 Amazon EKS 类型的附加组件添加到集群中,则请添加它或查看 更新自我管理的附加组件,而不是完成此过程。
-
查看集群上当前安装的附加组件版本。将
替换为您的集群名称。my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query "addon.addonVersion" --output text输出示例如下。
v1.8.7-eksbuild.4
如果返回的版本与最新版本表中集群的 Kubernetes 版本的版本相同,则您的集群上已经安装了最新版本,且您无需完成此过程的其余部分。如果您在输出中收到错误信息而不是版本号,则您的集群上没有安装 Amazon EKS 类型的附加组件。您需要先创建附加组件,然后才能使用此过程对其进行更新。
-
保存您当前安装的附加组件的配置。
kubectl get deployment coredns -n kube-system -o yaml >
aws-k8s-coredns-old.yaml
-
使用 Amazon CLI 更新您的附加组件。如果您想要使用 Amazon Web Services Management Console 或
eksctl
更新附加组件,则请参阅更新附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。-
将
替换为您的集群名称。my-cluster
-
将
v1.9.3-eksbuild.2
替换为您的集群版本的最新版本表中列出的最新版本。 -
--resolve-conflicts
PRESERVE
选项保留附加组件的现有配置值。如果您为附加组件设置设定了自定义值,但未使用此选项,则 Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项,那么我们建议您在更新生产集群上的附加组件之前,先测试非生产集群上所有更改的字段和值。如果您将该值改为OVERWRITE
,则所有设置都将更改为 Amazon EKS 的默认值。如果您为任何设置设定了自定义值,这些值可能会被 Amazon EKS 的默认值覆盖。如果您将该值改为none
,Amazon EKS 不会更改任何设置的值,但更新可能会失败。如果更新失败,您会收到一条帮助您解决冲突的错误消息。 -
如果您没有更新配置设置,则请从命令中移除
--configuration-values '{
。如果您要更新配置设置,请将"replicaCount":3
}'"replicaCount":3
替换为要设置的设置。在此示例中,CoreDNS 的副本数设置为3
。您指定的值必须对配置架构有效。如果您不知道配置架构,请运行aws eks describe-addon-configuration --addon-name coredns --addon-version
,以将v1.9.3-eksbuild.2
v1.9.3-eksbuild.2
替换为您要查看其配置的附加组件的版本号。将在输出中返回架构。如果您有任何现有自定义配置,想要将其全部删除,并将所有设置的值设置回 Amazon EKS 默认值,请从命令中删除"replicaCount":3
,这样就可以有空的
。有关 CoreDNS 设置的更多信息,请参阅 Kubernetes 文档中的自定义 DNS 服务{}
。 aws eks update-addon --cluster-name
my-cluster
--addon-name coredns --addon-versionv1.9.3-eksbuild.2
\ --resolve-conflictsPRESERVE
--configuration-values '{"replicaCount":3
}'可能需要几秒钟才能完成更新。
-
-
确认附加组件版本已更新。将
替换为您的集群名称。my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns可能需要几秒钟才能完成更新。
输出示例如下。
{ "addon": { "addonName": "coredns", "clusterName": "
my-cluster
", "status": "ACTIVE", "addonVersion": "v1.9.3-eksbuild.2
", "health": { "issues": [] }, "addonArn": "arn:aws:eks:region
:111122223333
:addon/my-cluster
/coredns/d2c34f06-1111-2222-1eb0-24f64ce37fa4", "createdAt": "2023-03-01T16:41:32.442000+00:00", "modifiedAt": "2023-03-01T18:16:54.332000+00:00", "tags": {},"configurationValues": "{\"replicaCount\":3}"
} }
更新自我管理的附加组件
重要
建议您向集群添加 Amazon EKS 类型的附加组件,而不是自行管理类型的附加组件。如果不熟悉这些类型之间的区别,请参阅 Amazon EKS 附加组件。有关向集群中添加 Amazon EKS 附加组件的更多信息,请参阅 创建附加组件。如果您无法使用 Amazon EKS 附加组件,我们鼓励您向容器路线图 GitHub 存储库
-
确认已在集群上安装自行管理类型的附加组件。将
my-cluster
替换为您集群的名称。aws eks describe-addon --cluster-name
my-cluster
--addon-name coredns --query addon.addonVersion --output text如果返回错误消息,则表明集群上安装有自行管理类型的附加组件。完成此过程的其余步骤。如果返回版本号,则表明集群上安装有 Amazon EKS 类型的附加组件。要更新附加组件的 Amazon EKS 类型,请使用 更新 Amazon EKS 附加组件 中的过程,而不是此过程。如果不熟悉这些附加组件类型之间的区别,请参阅 Amazon EKS 附加组件。
-
查看集群上当前安装的容器映像版本。
kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3
输出示例如下。
v1.8.7-eksbuild.2
-
如果您的当前 CoreDNS 版本是
v1.5.0
或更高版本,但早于 CoreDNS 版本表中列出的版本,请跳过此步骤。如果您的当前版本低于1.5.0
,则需要修改ConfigMap
,以使 CoreDNS 使用转发附加组件,而不是代理附加组件。-
使用以下命令打开 configmap。
kubectl edit configmap coredns -n kube-system
-
将以下行中的
proxy
替换为forward
。保存文件,然后退出编辑器。
. /etc/resolv.confproxy
-
-
如果您最初在 Kubernetes
1.17
或更低版本上部署了集群,那么您可能需要从 CoreDNS 清单中删除已停用的行。重要
在更新到 CoreDNS 版本
1.7.0
之前,您必须完成此步骤,但是即使您要更新到早期版本,我们也建议您完成此步骤。-
检查您的 CoreDNS 清单是否包含该行。
kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream
如果未返回任何输出,则说明您的清单没有此类行,您可以跳到下一步更新 CoreDNS。如果返回了输出,则需要删除该行。
-
使用以下命令编辑
ConfigMap
,删除文件中包含词语upstream
的该行。不要更改文件中的任何其他内容。删除该行后,保存更改。kubectl edit configmap coredns -n kube-system -o yaml
-
-
检索您当前的 CoreDNS 映像版本:
kubectl describe deployment coredns -n kube-system | grep Image
输出示例如下。
918309763551
.dkr.ecr.region-code
.amazonaws.com.cn/eks/coredns:v1.8.7-eksbuild.2
-
如果您要更新到 CoreDNS
1.8.3
或更高版本,则需要将endpointslices
权限添加到system:coredns
Kubernetesclusterrole
。kubectl edit clusterrole system:coredns -n kube-system
在文件中的
rules
部分的现有权限行下添加以下行。...
- apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch
... -
通过来更新 CoreDNS 附加组件,将
918309763551
和
替换为上一步中返回的输出值。将region-code
替换为您的 Kubernetes 版本的最新版本表中列出的 CoreDNS 版本。v1.9.3-eksbuild.2
kubectl set image deployment.apps/coredns -n kube-system coredns=
918309763551
.dkr.ecr.region-code
.amazonaws.com.cn/eks/coredns:v1.9.3-eksbuild.2
输出示例如下。
deployment.apps/coredns image updated
-
再次检查容器映像版本,确认它已更新到您在上一步中指定的版本。
kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3
输出示例如下。
v1.9.3-eksbuild.2