管理 CoreDNS 附加组件 - Amazon EKS

管理 CoreDNS 附加组件

CoreDNS 是一个灵活、可扩展的 DNS 服务器,可用作 Kubernetes 集群 DNS。当您启动具有至少一个节点的 Amazon EKS 集群时,无论集群中部署的节点数量如何,预设情况下都会部署 CoreDNS 镜像的两个副本。CoreDNS 容器为集群中的所有容器提供名称解析。如果您的集群包含命名空间与 CoreDNS Deployment 的命名空间相匹配的 AWS Fargate 配置文件 时,则可以将 CoreDNS 容器部署到 Fargate 节点。有关 CoreDNS 的更多信息,请参阅 Kubernetes 文档中的使用 CoreDNS 进行服务发现

下表列出了随每个 Amazon EKS 集群版本一起部署的 CoreDNS 附加组件的版本。

与每个 Amazon EKS 支持的集群版本一起部署的 CoreDNS 版本
Kubernetes 版本 1.21 1.20 1.19 1.18 1.17
CoreDNS 1.8.4 1.8.3 1.8.0 1.7.0 1.6.6

如果您的 1.18 版或更高版本的集群尚未添加 CoreDNS Amazon EKS 附加组件,则可以按照 添加 CoreDNS Amazon EKS 附加组件 中的程序来添加该附加组件。在 2021 年 5 月 19 日或之后,如果您是使用 AWS Management Console 创建的 1.18 版或更高版本的集群,那么 CoreDNS Amazon EKS 附加组件已位于您的集群上。如果您的 1.18 版或更高版本的集群是使用任何其他工具创建的,并且您希望使用 CoreDNS Amazon EKS 附加组件,则您必须自行将其添加到您的集群。

如果您已将 CoreDNS Amazon EKS 附加组件添加到 1.18 版或更高版本的集群,则您可以按照 更新 CoreDNS Amazon EKS 附加组件删除 CoreDNS Amazon EKS 附加组件 部分的程序来管理该附加组件。有关 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件

如果您尚未添加 CoreDNS Amazon EKS 附加组件,则 CoreDNS 自行管理附加组件仍在您的集群上运行。您可以使用 更新 CoreDNS 自行管理附加组件 中的程序更新 CoreDNS 自行管理附加组件。

添加 CoreDNS Amazon EKS 附加组件

选择带有要用于将 CoreDNS Amazon EKS 附加组件添加到集群的工具名称的选项卡。

重要

在添加 CoreDNS Amazon EKS 附加组件之前,请确认您不会自行管理 Amazon EKS 将开始管理的任何设置。要确定 Amazon EKS 管理的设置,请参阅 Amazon EKS 附加组件配置

eksctl

使用 eksctl 添加 CoreDNS Amazon EKS 附加组件

my-cluster 替换为集群名称,然后运行以下命令。

eksctl create addon --name coredns --cluster my-cluster --force

如果您删除 --force 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

AWS Management Console

使用 AWS Management Console 添加 CoreDNS Amazon EKS 附加组件

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择 Amazon EKS Clusters(集群),然后选择要为其配置 CoreDNS Amazon EKS 附加组件的集群的名称。

  3. 选择 Configuration(配置)选项卡,然后选择 Add-ons(附加组件)选项卡。

  4. 选择 Add new(新增)

    1. 对于 Name(名称),选择 CoreDNS

    2. 选择您想使用的 Version(版本)

    3. 如果您选择 Override existing configuration for this add-on on the cluster(覆盖集群上此附加组件的现有配置),那么 Amazon EKS 附加组件的设置可以覆盖现有附加组件的任何设置。如果您未启用此选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

    4. 选择 Add(添加)

AWS CLI

使用 AWS CLI 添加 CoreDNS Amazon EKS 附加组件

my-cluster 替换为您的集群的名称,然后运行以下命令。

aws eks create-addon \ --cluster-name my-cluster \ --addon-name coredns \ --resolve-conflicts OVERWRITE

如果您删除 --resolve-conflicts OVERWRITE 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么创建附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

更新 CoreDNS Amazon EKS 附加组件

本程序用于更新 CoreDNS Amazon EKS 附加组件。如果您尚未添加 CoreDNS Amazon EKS 附加组件,请改为按照 更新 CoreDNS 自行管理附加组件 中的程序操作,或添加 CoreDNS Amazon EKS 附加组件。当新版本发布之后或您将集群更新到一个新的 Kubernetes 次要版本后,Amazon EKS 不会自动更新集群上的 CoreDNS。要更新现有集群上的 CoreDNS,您必须启动更新,然后 Amazon EKS 会为您更新 Amazon EKS 附加组件。

eksctl

使用 eksctl 更新 CoreDNS Amazon EKS 附加组件

  1. 检查 coredns Amazon EKS 附加组件的当前版本。将 my-cluster 替换为您的集群名称。

    eksctl get addon --name coredns --cluster my-cluster

    输出

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE coredns v1.8.0-eksbuild.1 ACTIVE 0 v1.8.3-eksbuild.1
  2. 将附加组件更新为上一个步骤的输出中的 UPDATE AVAILABLE 下返回的版本。

    eksctl update addon \ --name coredns \ --version v1.8.3-eksbuild.1 \ --cluster my-cluster \ --force

    如果您删除 --force 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

AWS Management Console

使用 AWS Management Console 更新 CoreDNS Amazon EKS 附加组件

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择 Amazon EKS Clusters(集群),然后选择要为其更新 CoreDNS Amazon EKS 附加组件的集群的名称。

  3. 选择 Configuration(配置)选项卡,然后选择 Add-ons(附加组件)选项卡。

  4. 选择 coredns 框右上角中的框,然后选择 Edit(编辑)

    1. 选择您要使用的 Amazon EKS 附加组件的 Version(版本)

    2. 如果您选择 Override existing configuration for this add-on on the cluster(覆盖集群上此附加组件的现有配置),那么 Amazon EKS 附加组件的设置可以覆盖现有附加组件的任何设置。如果您未启用此选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

    3. 选择 Update(更新)

AWS CLI

使用 AWS CLI 更新 CoreDNS Amazon EKS 附加组件

  1. 检查 CoreDNS 附加组件的当前版本。将 my-cluster 替换为您的集群名称。

    aws eks describe-addon \ --cluster-name my-cluster \ --addon-name coredns \ --query "addon.addonVersion" \ --output text

    输出:

    1.7.0
  2. 确定哪些版本的 CoreDNS 附加组件可用于您的集群版本。

    aws eks describe-addon-versions \ --addon-name coredns \ --kubernetes-version 1.19 \ --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \ --output text

    输出

    1.8.0 True 1.7.0 False

    下面带有 True 的版本是使用新集群部署的默认版本。

  3. 将附加组件更新为上一个步骤的输出中返回的带有 True 的版本。您也可以更新到更高版本(如果输出中返回了)。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name coredns \ --addon-version 1.8.0 \ --resolve-conflicts OVERWRITE

    如果您删除 --resolve-conflicts OVERWRITE 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

删除 CoreDNS Amazon EKS 附加组件

移除 Amazon EKS 附加组件时,您有两种选择:

  • 在集群上保留附加组件的软件:此选项删除了 Amazon EKS 对任何设置和功能的管理,使 Amazon EKS 能够在您启动更新后向您发出更新通知并自动更新 Amazon EKS 附加组件,但会将附加组件的软件保留在您的集群上。此选项使附加组件成为自我管理的附加组件,而不是 Amazon EKS 附加组件。附加组件没有停机时间。

  • 从集群中完全删除附加组件:只有在集群中没有资源依赖于附加组件提供的功能时,才应从集群中移除 Amazon EKS 附加组件。删除 Amazon EKS 附加组件后,如有需要,您可以再次添加它。

如果附加组件有与其关联的 IAM 账户,则不会移除该 IAM 账户。

选择带有要用于将 CoreDNS Amazon EKS 附加组件从 1.18 或更高版本的集群中移除的工具名称的选项卡。

eksctl

使用 eksctl 删除 CoreDNS Amazon EKS 附加组件

my-cluster 替换为集群名称,然后运行以下命令。移除 --preserve 会从您的集群中移除附加组件软件。

eksctl delete addon --cluster my-cluster --name coredns --preserve
AWS Management Console

使用 AWS Management Console 删除 CoreDNS Amazon EKS 附加组件

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择 Amazon EKS Clusters(集群),然后选择要删除其 CoreDNS Amazon EKS 附加组件的集群的名称。

  3. 选择 Configuration(配置)选项卡,然后选择 Add-ons(附加组件)选项卡。

  4. 选择 coredns 框右上角的复选框,然后选择 Remove(删除)。键入 coredns,然后选择 Remove(删除)

AWS CLI

使用 AWS CLI 删除 CoreDNS Amazon EKS 附加组件

my-cluster 替换为您的集群的名称,然后运行以下命令。移除 --preserve 会从您的集群中移除附加组件软件。

aws eks delete-addon --cluster-name my-cluster --addon-name coredns --preserve

更新 CoreDNS 自行管理附加组件

如果您的集群是 1.17 版或更早版本,或者是 1.18 版或更高版本,但尚未向其添加 CoreDNS Amazon EKS 附加组件,请完成以下步骤来更新附加组件。如果您已添加了 CoreDNS Amazon EKS 附加组件,请改为按照 更新 CoreDNS Amazon EKS 附加组件 中的程序操作。

要使用 kubectl 更新 CoreDNS 自行管理的附加组件

  1. 检查 CoreDNS 附加组件的当前版本。

    kubectl describe deployment coredns \ --namespace kube-system \ | grep Image \ | cut -d "/" -f 3

    输出:

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

    1. 使用以下命令打开 configmap。

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

      proxy . /etc/resolv.conf
  3. 如果您最初在 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
  4. 检索您当前的 CoreDNS 镜像:

    kubectl get deployment coredns \ --namespace kube-system \ -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
  5. 如果您要更新到 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 ...
  6. 通过将 602401143452us-west-2 替换为上一步中返回的输出的值,更新 CoreDNS 附加组件。将 1.8.4 替换为集群的建议 CoreDNS 版本或更高版本。

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/coredns:v1.8.4-eksbuild.1