使用 Amazon VPC CNI plugin for Kubernetes Amazon EKS 附加组件
Amazon VPC CNI plugin for Kubernetes 附加组件部署在 Amazon EKS 集群中的每个 Amazon EC2 节点上。附加组件会创建弹性网络接口并将其附加到 Amazon EC2 节点。附加组件还会将 VPC 中的私有 IPv4
或 IPv6
地址分配给每个 pod 和服务。
附加组件版本随集群中的每个 Fargate 节点一起部署,但您无需在 Fargate 节点上对其进行更新。其他兼容的 CNI 插件也可用于 Amazon EKS 集群,但这是 Amazon EKS 唯一支持的 CNI 插件。
下表列出了每个 Kubernetes 版本的 Amazon EKS 附加组件类型的最新可用版本。
Kubernetes 版本 | 1.25 |
1.24 |
1.23 |
1.22 |
1.21 |
1.20 |
---|---|---|---|---|---|---|
v1.12.2-eksbuild.1 |
v1.12.2-eksbuild.1 |
v1.12.2-eksbuild.1 |
v1.12.2-eksbuild.1 |
v1.12.2-eksbuild.1 |
v1.12.2-eksbuild.1 |
如果您自行管理此附加组件,则表中的版本可能与可用的自行管理版本不同。有关更新此附加组件的自行管理类型的更多信息,请参阅更新自我管理的附加组件。
先决条件
-
现有 版 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
-
如果您的集群为
1.21
版本或更高版本,确保您的kube-proxy
和 CoreDNS 附加组件为服务账户令牌中列出的最低版本。 -
集群的现有 AWS Identity and Access Management IAM OpenID Connect (OIDC) 提供商。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商。
-
附加有 AmazonEKS_CNI_Policy
IAM policy(如果集群使用 IPv4
系列)或 IPv6 策略(如果集群使用IPv6
系列)的 IAM 角色。有关更多信息,请参阅配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户。 -
如果使用是
1.7.0
版或更高版本的 CNI 插件,并且使用自定义 pod 安全策略,请参阅 删除默认的 Amazon EKS pod 安全策略容器组(pod)安全策略。
注意事项
-
版本指定为
major-version.minor-version.patch-version-eksbuild.build-number
。 -
您一次只能为此 Amazon EKS 类型的附加组件更新一个次要版本。例如,如果您的当前版本为
v1.10.4-eksbuild.3
,并且您想要更新到v1.12.2-eksbuild.1
,则首先更新到v1.11.4-eksbuild.3
,再更新到v1.12.2-eksbuild.1
。如果您要更新此附加组件的自行管理类型,建议您更新到最新可用版本表中列出的版本。同时建议您一次仅更新一个次要版本。 -
此附加组件的所有版本都适用于所有 Amazon EKS 支持的 Kubernetes 版本,但并非每个版本的所有功能都适用于所有 Kubernetes 版本。使用不同的 Amazon EKS 功能时,如果需要特定版本的附加组件,则会在功能文档中注明。除非您出于某个特定原因需要运行早期版本,否则建议您运行最新版本。
创建 Amazon EKS 附加组件
创建 Amazon EKS 类型的附加组件。
-
查看集群上当前安装的附加组件版本。
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
输出示例如下。
v1.11.4-eksbuild.1
-
查看集群上当前安装的附加组件类型。根据您创建集群时使用的工具,您的集群上目前可能没有安装 Amazon EKS 附加组件类型。将
my-cluster
替换为您集群的名称。aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output text如果返回版本号,则表明您的集群上安装有 Amazon EKS 附加组件类型,且您不需要完成此过程的其余步骤。如果返回错误,则表明您的集群上安装有 Amazon EKS 类型的附加组件。完成此过程的其余步骤以进行安装。
-
保存您当前安装的附加组件的配置。
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
使用 AWS CLI 创建附加组件。如果要使用 AWS Management Console 或
eksctl
来创建附加组件,请参阅 创建附加组件 并指定vpc-cni
为附加组件名称。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。-
将
替换为您的集群名称。my-cluster
-
将
替换为您的集群版本的最新版本表中列出的最新版本。v1.12.2-eksbuild.1
-
将
111122223333
替换为您的账户 ID,并将AmazonEKSVPCCNIRole
替换为您创建的现有 IAM 角色的名称。指定角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅为集群创建 IAM OIDC 提供商。
aws eks create-addon --cluster-name
my-cluster
--addon-name vpc-cni --addon-version
\ --service-account-role-arn arn:aws:iam::v1.12.2-eksbuild.1
111122223333
:role/AmazonEKSVPCCNIRole
如果您对当前附加组件应用的自定义设置与 Amazon EKS 附加组件的默认设置相冲突,则创建可能会失败。如果创建失败,您会收到一条可以帮助您解决问题的错误信息。或者,您可以将
--resolve-conflicts OVERWRITE
添加到前面的命令中。这样一来,附加组件会覆盖任何现有的自定义设置。创建附加组件后,您可以使用自定义设置对其进行更新。 -
-
确认您的集群的 Kubernetes 版本的附加组件最新版本已添加到您的集群。将
替换为您的集群名称。my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output text附加组件创建可能需要几秒钟才能完成。
输出示例如下。
v1.12.2-eksbuild.1
-
如果您在创建 Amazon EKS 附加组件之前对原始附加组件进行了自定义设置,则请使用您在上一步中保存的配置,以使用您的自定义设置更新 Amazon EKS 附加组件。
更新 Amazon EKS 附加组件
更新 Amazon EKS 类型的附加组件。如果您尚未将 Amazon EKS 类型的附加组件添加到集群中,则请添加它或查看 更新自我管理的附加组件,而不是完成此过程。
-
查看集群上当前安装的附加组件版本。将
替换为您的集群名称。my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query "addon.addonVersion" --output text输出示例如下。
v1.11.4-eksbuild.1
如果返回的版本与最新版本表中集群的 Kubernetes 版本的版本相同,则您的集群上已经安装了最新版本,且您无需完成此过程的其余部分。如果您在输出中收到错误信息而不是版本号,则您的集群上没有安装 Amazon EKS 类型的附加组件。您需要先创建附加组件,然后才能使用此过程对其进行更新。
-
保存您当前安装的附加组件的配置。
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
使用 AWS CLI 更新您的附加组件。如果您想要使用 AWS Management Console 或
eksctl
更新附加组件,则请参阅更新附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。-
将
替换为您的集群名称。my-cluster
-
将
替换为您的集群版本的最新版本表中列出的最新版本。v1.12.2-eksbuild.1
-
将
111122223333
替换为您的账户 ID,并将AmazonEKSVPCCNIRole
替换为您创建的现有 IAM 角色的名称。指定角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅为集群创建 IAM OIDC 提供商。 -
--resolve-conflicts
PRESERVE
选项保留附加组件的现有配置值。如果您为附加组件设置设定了自定义值,但未使用此选项,则 Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项,那么我们建议您在更新生产集群上的附加组件之前,先测试非生产集群上所有更改的字段和值。如果您将该值改为OVERWRITE
,则所有设置都将更改为 Amazon EKS 的默认值。如果您为任何设置设定了自定义值,这些值可能会被 Amazon EKS 的默认值覆盖。如果您将该值改为none
,Amazon EKS 不会更改任何设置的值,但更新可能会失败。如果更新失败,您会收到一条帮助您解决冲突的错误消息。 -
如果您没有更新配置设置,则请从命令中移除
--configuration-values '{
。如果您更新配置设置,则将"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
}'"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
替换为您想要设置的设置。在此示例中,AWS_VPC_K8S_CNI_EXTERNALSNAT
环境变量设置为true
。您指定的值必须对配置架构有效。如果您不知道配置架构,则请运行aws eks describe-addon-configuration --addon-name vpc-cni --addon-version
,以将v1.12.2-eksbuild.1
v1.12.2-eksbuild.1
替换为您要查看其配置的附加组件的版本号。将在输出中返回架构。如果您有任何现有的自定义配置,想要将其全部删除,并将所有设置的值设置回 Amazon EKS 的默认值,请从命令中删除
,这样就可以有空的"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
。有关每项设置的说明,请参阅 GitHub 上的 CNI 配置变量{}
。 aws eks update-addon --cluster-name
my-cluster
--addon-name vpc-cni --addon-versionv1.12.2-eksbuild.1
\ --service-account-role-arn arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
\ --resolve-conflictsPRESERVE
--configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
}'可能需要几秒钟才能完成更新。
-
-
确认附加组件版本已更新。将
替换为您的集群名称。my-cluster
aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni
可能需要几秒钟才能完成更新。
输出示例如下。
{ "addon": { "addonName": "vpc-cni", "clusterName": "my-cluster", "status": "ACTIVE", "addonVersion": "
v1.12.2-eksbuild.1
", "health": { "issues": [] }, "addonArn": "arn:aws:eks:region
:111122223333
:addon/my-cluster
/vpc-cni/74c33d2f-b4dc-8718-56e7-9fdfa65d14a9
", "createdAt": "2023-02-22T18:25:19.319000+00:00", "modifiedAt": "2023-02-22T18:40:28.683000+00:00", "serviceAccountRoleArn": "arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
", "tags": {}, "configurationValues": "{\"env\":{\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":\"true\"}
}" } }
更新自我管理的附加组件
此过程将于 2023 年 7 月 1 日从本指南中删除。建议您向集群添加 Amazon EKS 类型的附加组件,而不是自行管理附加组件。要将 Amazon EKS 附加组件添加到您的集群,请参阅 创建 Amazon EKS 附加组件。
-
确认已在您的集群上安装 Amazon EKS 类型的附加组件。将
my-cluster
替换为您集群的名称。aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output text如果返回错误消息,则表明您的集群上安装有 Amazon EKS 类型的附加组件。要自行管理附加组件,请完成此过程中的剩余步骤以更新附加组件。如果返回版本号,则表明集群上安装有 Amazon EKS 类型的附加组件。要对其进行更新,请使用 更新附加组件 中的过程,而不是此过程。如果不熟悉这些附加组件类型之间的区别,请参阅 Amazon EKS 附加组件。
-
查看集群上当前安装的容器映像版本。
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
输出示例如下。
v1.11.4-eksbuild.1
输出可能不包含版本号。
-
备份当前设置,以便在更新版本后可以配置相同设置。
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
要查看可用版本并熟悉要更新到的版本中的更改,请参阅 GitHub 上的
releases
。建议更新到最新可用版本表中列出的相同major
.minor
.patch
版本,即使 GitHub 上提供了更新版本。表中列出的构建版本并未在 GitHub 上列出的自行管理版本中指定。通过完成以下选项之一中的任务来更新您的版本:如果您的附加组件没有任何自定义设置,请在 GitHub 上针对要更新到的版本
运行 To apply this release:
标题下的命令。如果有自定义设置,请使用以下命令下载清单文件。将
https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.12.2/config/master/aws-k8s-cni.yaml
更改为您要更新到的 GitHub 上的版本的 URL。curl -O
https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.12.2/config/master/aws-k8s-cni.yaml
如有必要,使用您在上一步中创建的备份中的自定义设置修改清单,然后将修改后的清单应用到集群。如果节点无法访问从中提取映像的私有 Amazon EKS Amazon ECR 存储库(参阅清单中以
image:
开头的行),则您必须下载映像,将其复制到自己的存储库,然后修改清单以从存储库中提取映像。有关更多信息,请参阅将容器镜像从一个存储库复制到另一个存储库。kubectl apply -f aws-k8s-cni.yaml
-
确认新版本现已安装在集群上。
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
输出示例如下。
v1.12.2