管理 Amazon VPC CNI 附加组件 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

管理 Amazon VPC CNI 附加组件

Amazon EKS 支持通过适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件进行本机 VPC 联网。使用此插件允许 Kubernetes Pod 在 Pod 内具有与其在 VPC 网络上相同的 IP 地址。有关更多信息,请参阅 Pod 联网 (CNI)

如果您使用 Amazon Web Services Management Console 创建了 1.18 版或更高版本的集群,则 Amazon EKS 已为您安装 Amazon EKS 附加组件。如果您使用除 Amazon Web Services Management Console 以外的其他方法创建了 1.18 版或更高版本的集群,则 Amazon EKS 已为您安装自行管理的附加组件。您可以按照 添加 Amazon VPC CNI Amazon EKS 附加组件 中的步骤将自行管理的附加组件迁移到 Amazon EKS 附加组件。如果您已将 Amazon VPC CNI Amazon EKS 附加组件添加到集群,则您可以按照 更新 Amazon VPC CNI Amazon EKS 附加组件删除 Amazon VPC CNI Amazon EKS 附加组件 部分的程序来管理该附加组件。有关 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件

为每个集群版本推荐的 Amazon VPC CNI 附加组件版本
1.21 1.20 1.19 1.18 1.17
附加组件版本 1.10.2-eksbuild.1 1.10.2-eksbuild.1 1.10.2-eksbuild.1 1.10.2-eksbuild.1 1.10.2-eksbuild.1

要更新 Amazon EKS 附加组件版本,请参阅 更新 Amazon VPC CNI Amazon EKS 附加组件。要使用 Amazon EKS Amazon Elastic Container Registry 或您自己的存储库中的容器镜像更新自行管理的附加组件版本,请参阅 更新 Amazon VPC CNI 自行管理附加组件

重要

创建集群时部署的附加组件版本可能早于推荐的版本。如果您使用清单更新了自行管理的附加组件,则该版本不包括 -eksbuild.1

先决条件

添加 Amazon VPC CNI Amazon EKS 附加组件

选择带有您想要用于将 Amazon VPC CNI Amazon EKS 附加组件添加到集群(1.18 或更高版本)的工具名称的选项卡。

重要

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

eksctl

使用 eksctl 添加最新版本的 Amazon EKS 附加组件

my-cluster 替换为您的集群名称,将 arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-iamserviceaccount-kube-sys-Role1-UK9MQSLXK0MW 替换为现有的 IAM 角色(请参阅先决条件)。

eksctl create addon \ --name vpc-cni \ --version latest \ --cluster my-cluster \ --service-account-role-arn arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-iamserviceaccount-kube-sys-Role1-UK9MQSLXK0MW \ --force

如果任意 Amazon EKS 附加组件设置与自行管理附加组件的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。

Amazon Web Services Management Console

使用 Amazon Web Services Management Console 添加最新版本的 Amazon EKS 附加组件

  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

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

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

  4. 选择 Add new(新增)

    • 对于 Name(名称),请选择 vpc-cni

    • 选择您想使用的 Version(版本)。建议选择标记为 Latest(最新)的版本。

    • 对于 Service account role(服务账户角色),选择您附加了 AmazonEKS_CNI_Policy IAM 策略的 IAM 角色的名称(请参阅先决条件)。

    • 选择 Override existing configuration for this add-on on the cluster.(覆盖集群上此附加组件的现有配置。) 如果任意 Amazon EKS 附加组件设置与自行管理附加组件的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。

    • 选择 Add(添加)

Amazon CLI

使用 Amazon CLI 添加最新版本的 Amazon EKS 附加组件

  1. 确定哪些版本的 Amazon VPC CNI Amazon EKS 附加组件可用于您的集群版本。在以下命令中,将 1.20 替换为集群版本。

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

    输出

    v1.10.2-eksbuild.1 False ... v1.7.5-eksbuild.2 True ...

    下面带有 True 的版本是使用新集群部署的默认版本。在之前的输出中,v1.10.2-eksbuild.1 是最新可用版本。

  2. 在下面的命令中,将 my-cluster 替换为集群名称,将 v1.10.2-eksbuild.1 替换为最新可用版本,将 arn:aws:iam::AWS_ACCOUNT_ID:role/AmazonEKSCNIRole 替换为 AmazonEKS_CNI_Policy IAM 策略附加到的 IAM 角色的 ARN(请参阅先决条件),然后运行该命令。

    aws eks create-addon \ --cluster-name my-cluster \ --addon-name vpc-cni \ --addon-version v1.10.2-eksbuild.1 \ --service-account-role-arn arn:aws:iam::AWS_ACCOUNT_ID:role/AmazonEKSCNIRole \ --resolve-conflicts OVERWRITE

    如果任意 Amazon EKS 附加组件设置与自行管理附加组件的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。

更新 Amazon VPC CNI Amazon EKS 附加组件

重要

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

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

我们建议您更新到最新次要版本的最新补丁版本,但一次只能更新一个次要版本。例如,如果您的当前的次要版本为 1.8,并且您想要更新到 1.10,则应首先更新到最新的补丁版本 1.9,再更新到最新的补丁版本 1.10

选择带有您想用来更新 1.18 或更高版本集群上的 Amazon VPC CNI Amazon EKS 附加组件的工具名称的选项卡。

eksctl

使用 eksctl 将 Amazon EKS 附加组件更新为最新版本

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

    eksctl get addon --name vpc-cni --cluster my-cluster

    输出

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE vpc-cni v1.7.5-eksbuild.2 ACTIVE 0 arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-iamserviceaccount-kube-sys-Role1-UK9MQSLXK0MW v1.10.2-eksbuild.1
  2. 将附加组件更新为最新版本。

    eksctl update addon \ --name vpc-cni \ --version latest \ --cluster my-cluster \ --force
Amazon Web Services Management Console

使用 Amazon Web Services Management Console 将 Amazon EKS 附加组件更新为最新版本

  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

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

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

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

    • 选择您要使用的 Amazon EKS 附加组件的 Version(版本)。建议选择标记为 Latest(最新)的版本。

    • 对于 Service account role(服务账户角色),如果尚未进行选择,则选择您附加了 AmazonEKS_CNI_Policy IAM 策略的 IAM 角色的名称(请参阅先决条件)。

    • 选择 Override existing configuration for this add-on on the cluster.(覆盖集群上此附加组件的现有配置。)

    • Select Update(更新)。

Amazon CLI

使用 Amazon CLI 将 Amazon EKS 附加组件更新为最新版本

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

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

    输出:

    v1.7.5-eksbuild.2

    返回的版本可能有所不同。

  2. 确定哪些版本的 Amazon VPC CNI Amazon EKS 附加组件可用于您的集群版本。将 1.20 替换为集群版本。

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

    输出

    v1.10.2-eksbuild.1 False ... v1.7.5-eksbuild.2 True ...

    在之前的输出中,下面带有 True 的版本是使用新集群部署的默认版本。在之前的输出中,v1.10.2-eksbuild.1 是最新可用版本。返回的版本可能有所不同。

  3. 将附加组件更新为之前的输出中返回的最新版本。将 my-cluster 替换为集群名称,并将 v1.10.2-eksbuild.1 替换为要更新到的附加组件的版本。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name vpc-cni \ --addon-version v1.10.2-eksbuild.1 \ --resolve-conflicts OVERWRITE

删除 Amazon VPC CNI Amazon EKS 附加组件

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

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

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

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

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

eksctl

使用 eksctl 删除 Amazon EKS 附加组件

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

eksctl delete addon --cluster my-cluster --name vpc-cni --preserve
Amazon Web Services Management Console

使用 删除 Amazon EKS 附加组件Amazon Web Services Management Console

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

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

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

  4. 选择 vpc-cni 框的右上角的复选框,然后选择 Remove(删除)。如果您希望 Amazon EKS 停止管理附加组件的设置,但希望在集群上保留附加组件,以便您可以自行管理附加组件的所有设置,请选择 Preserve on cluster(保留在集群上)。键入 vpc-cni,然后选择 Remove(删除)

Amazon CLI

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

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

aws eks delete-addon --cluster-name my-cluster --addon-name vpc-cni --preserve

更新 Amazon VPC CNI 自行管理附加组件

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

要使用 kubectl 将自我管理的附加组件更新为最新的次要和补丁版本

  1. 通过查看 GitHub 上的 Releases 决定最新可用的版本。

  2. 使用以下命令确定您集群的当前 Amazon VPC CNI 附加组件版本:

    kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

    输出:

    amazon-k8s-cni-init:1.7.5-eksbuild.1 amazon-k8s-cni:1.7.5-eksbuild.1

    您的输出可能看起来与示例输出不同。在此示例输出中,Amazon VPC CNI 附加组件版本为 1.7.5-eksbuild.1,此版本早于 latest available version。Amazon EKS 最初与集群一起部署的版本与之前的输出类似。但是,如果您已经使用清单至少更新了一次附加组件,则输出不包括 -eksbuild.1

  3. 如果您的节点无权访问 Amazon EKS Amazon ECR 镜像存储库,则需要提取以下容器镜像并将其推送到节点有权访问的存储库。有关如何提取、标记和推送镜像到您自己的存储库的更多信息,请参阅 将容器镜像从一个存储库复制到另一个存储库。将 accountregion-code 替换为集群所在 Amazon Web Services 区域的 Amazon 容器镜像注册表 中的值。

    account.dkr.ecr.region-code.amazonaws.com/amazon-k8s-cni-init:v1.10.2 account.dkr.ecr.region-code.amazonaws.com/amazon-k8s-cni:v1.10.2
  4. 将您的 Amazon VPC CNI 附加组件更新为可用的最新次要和补丁版本。

    重要
    • 在应用清单新版本时,您对集群上的附加组件默认设置所做的任何更改都可被原定设置覆盖。要防止丢失自定义设置,请下载清单,根据需要更改原定设置,然后将修改后的清单应用到您的集群。您每次只更新一个次要版本。例如,如果您的当前版本为 1.8,并且您想要更新到 1.10,则应首先更新到 1.9,再更新到 1.10,方法是在以下命令更改版本号。

    • 最新版本适用于 Amazon EKS 支持的所有 Kubernetes 版本。

    运行以下命令以更新您的 Amazon VPC CNI 附加组件。

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/aws-k8s-cni-cn.yaml

    • 如果您的集群位于 Amazon GovCloud(美国东部)(us-gov-east-1) Amazon Web Services 区域,则运行以下命令。

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/aws-k8s-cni-us-gov-east-1.yaml
    • 如果您的集群位于 Amazon GovCloud(美国西部)(us-gov-west-1) Amazon Web Services 区域,则运行以下命令。

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/aws-k8s-cni-us-gov-west-1.yaml
    • 如果您的集群位于美国西部(俄勒冈)(us-west-2) Amazon Web Services 区域,则运行以下命令。

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/aws-k8s-cni.yaml
    • 如果您的集群位于任何其他 Amazon Web Services 区域,或者如果您在上一步中将镜像复制到自己的存储库,则完成以下步骤。

      1. 下载清单文件。

        curl -o aws-k8s-cni.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/aws-k8s-cni.yaml
      2. 使用以下选项之一修改此文件:

        • 如果您在上一步中没有将容器镜像复制到自己的存储库,则运行以下命令:

          1. 将以下命令中的 region-code 替换为集群所在的 Amazon Web Services 区域,然后运行修改后的命令以替换文件中的 us-west-2

            sed -i.bak -e 's|us-west-2|region-code|' aws-k8s-cni.yaml
          2. 将以下命令中的 account 替换为集群所在 Amazon Web Services 区域的 Amazon 容器镜像注册表 中的账户,然后运行修改后的命令以替换文件中的 602401143452

            sed -i.bak -e 's|602401143452|account|' aws-k8s-cni.yaml
        • 如果您在上一步中将容器镜像复制到自己的存储库,则进行以下替换并运行以下命令:

          1. 将以下命令中的 your-registry 替换为您的注册表,然后运行修改后的命令以替换文件中的 602401143452.dkr.ecr.us-west-2.amazonaws.com

            sed -i.bak -e 's|602401143452.dkr.ecr.us-west-2.amazonaws.com|your-registry|' aws-k8s-cni.yaml
          2. 将以下命令中的 your-repository:tag 替换为您的存储库和标签,然后运行修改后的命令以替换文件中的 amazon-k8s-cni-init:v1.10

            sed -i.bak -e 's|amazon-k8s-cni-init:v1.10|your-repository:tag|' aws-k8s-cni.yaml
          3. 将以下命令中的 your-repository:tag 替换为您的存储库和标签,然后运行修改后的命令以替换文件中的 amazon-k8s-cni:v1.10

            sed -i.bak -e 's|amazon-k8s-cni:v1.10|your-repository:tag|' aws-k8s-cni.yaml
      3. 将清单文件应用于集群。

        kubectl apply -f aws-k8s-cni.yaml