更新 CoreDNS Amazon EKS 自行管理的附加组件 - Amazon EKS

更新 CoreDNS Amazon EKS 自行管理的附加组件

重要

建议您向集群添加 Amazon EKS 类型的附加组件,而不是自行管理类型的附加组件。如果不熟悉这些类型之间的区别,请参阅 Amazon EKS 附加组件。有关向集群中添加 Amazon EKS 附加组件的更多信息,请参阅 创建 Amazon EKS 附加组件。如果您无法使用 Amazon EKS 附加组件,我们鼓励您向容器路线图 GitHub 存储库提交有关您为什么无法使用的问题。

在开始之前,请查看升级的注意事项。有关更多信息,请参阅 重要的 CoreDNS 升级注意事项

  1. 确认已在集群上安装自行管理类型的附加组件。将 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. 查看集群上当前安装的容器映像版本。

    kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3

    示例输出如下。

    v1.8.7-eksbuild.2
  3. 如果 CoreDNS 的当前版本为 v1.5.0 或更高版本,但早于 CoreDNS 版本表中列出的版本,请跳过此步骤。如果您的当前版本低于 1.5.0,则需要修改 ConfigMap,以使 CoreDNS 使用转发附加组件,而不是代理附加组件。

    1. 使用以下命令打开 ConfigMap

      kubectl edit configmap coredns -n kube-system
    2. 将以下行中的 proxy 替换为 forward。保存文件,然后退出编辑器。

      proxy . /etc/resolv.conf
  4. 如果您最初在 Kubernetes 1.17 或更低版本上部署了集群,那么您可能需要从 CoreDNS 清单中删除已停用的行。

    重要

    在更新到 CoreDNS 版本 1.7.0 之前,您必须完成此步骤,但是即使您要更新到早期版本,我们也建议您完成此步骤。

    1. 检查您的 CoreDNS 清单是否包含该行。

      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream

      如果未返回任何输出,则说明您的清单没有此类行,您可以跳到下一步更新 CoreDNS。如果返回了输出,则需要删除该行。

    2. 使用以下命令编辑 ConfigMap,删除文件中包含词语 upstream 的该行。不要更改文件中的任何其他内容。删除该行后,保存更改。

      kubectl edit configmap coredns -n kube-system -o yaml
  5. 检索您当前的 CoreDNS 映像版本:

    kubectl describe deployment coredns -n kube-system | grep Image

    示例输出如下。

    602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.8.7-eksbuild.2
  6. 如果您要更新到 CoreDNS 1.8.3 或更高版本,则需要将 endpointslices 权限添加到 system:coredns Kubernetes clusterrole

    kubectl edit clusterrole system:coredns -n kube-system

    在文件中的 rules 部分的现有权限行下添加以下行。

    [...] - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch [...]
  7. 通过将 602401143452region-code 替换为上一步中返回的输出的值,更新 CoreDNS 附加组件。将 v1.11.3-eksbuild.1 替换为适合 Kubernetes 版本的 最新版本表中列出的 CoreDNS 版本。

    kubectl set image deployment.apps/coredns -n kube-system coredns=602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.11.3-eksbuild.1

    示例输出如下。

    deployment.apps/coredns image updated
  8. 再次检查容器映像版本,确认它已更新到您在上一步中指定的版本。

    kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3

    示例输出如下。

    v1.11.3-eksbuild.1