

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 更新 Amazon VPC CNI（自主管理型附加组件）
<a name="vpc-add-on-self-managed-update"></a>

**重要**  
建议您向集群添加 Amazon EKS 类型的附加组件，而不是自行管理类型的附加组件。如果不熟悉这些类型之间的区别，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。有关向集群中添加 Amazon EKS 附加组件的更多信息，请参阅 [创建 Amazon EKS 附加组件](creating-an-add-on.md)。如果您无法使用 Amazon EKS 附加组件，我们鼓励您向[容器路线图 GitHub 存储库](https://github.com/aws/containers-roadmap/issues)提交有关您为什么无法使用的问题。

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 类型的附加组件。要对其进行更新，请使用 [更新 Amazon EKS 附加组件](updating-an-add-on.md) 中的过程，而不是此过程。如果不熟悉这些附加组件类型之间的区别，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。

1. 查看集群上当前安装的容器映像版本。

   ```
   kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
   ```

   示例输出如下。

   ```
   v1.20.0-eksbuild.1
   ```

   输出可能不包含版本号。

1. 备份当前设置，以便在更新版本后可以配置相同设置。

   ```
   kubectl get daemonset aws-node -n kube-system -o yaml > aws-k8s-cni-old.yaml
   ```

   要查看可用版本并熟悉要更新到的版本中的更改，请参阅 GitHub 上的 [releases](https://github.com/aws/amazon-vpc-cni-k8s/releases)。请注意，我们建议更新到最新可用版本表中列出的相同 `major`.`minor`.`patch` 版本，即使 GitHub 上提供了更新版本。有关最新可用版本表，请参阅 [Amazon VPC CNI 版本](managing-vpc-cni.md#vpc-cni-latest-available-version)。表中列出的构建版本并未在 GitHub 上列出的自行管理版本中指定。通过完成以下选项之一中的任务来更新您的版本：
   + 如果您的附加组件没有任何自定义设置，请在 GitHub 上针对要更新到的[版本](https://github.com/aws/amazon-vpc-cni-k8s/releases)运行 `To apply this release:` 标题下的命令。
   + 如果有自定义设置，请使用以下命令下载清单文件。将 *https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.20.0/config/master/aws-k8s-cni.yaml* 更改为您要更新到的 GitHub 上的版本的 URL。

     ```
     curl -O https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.20.3/config/master/aws-k8s-cni.yaml
     ```

     如有必要，使用您在上一步中创建的备份中的自定义设置修改清单，然后将修改后的清单应用到集群。如果节点无法访问从中提取映像的私有 Amazon EKS Amazon ECR 存储库（参阅清单中以 `image:` 开头的行），则您必须下载映像，将其复制到自己的存储库，然后修改清单以从存储库中提取映像。有关更多信息，请参阅 [将容器镜像从一个存储库复制到另一个存储库](copy-image-to-repository.md)。

     ```
     kubectl apply -f aws-k8s-cni.yaml
     ```

1. 确认新版本现已安装在集群上。

   ```
   kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
   ```

   示例输出如下。

   ```
   v1.20.3
   ```

1. （可选）将 `cni-metrics-helper` 安装到您的集群。它会抓取弹性网络接口和 IP 地址信息，在集群级别聚合这些信息，并将指标发布到 Amazon CloudWatch。有关更多信息，请参阅 GitHub 上的 [cni-metrics-helper](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/cmd/cni-metrics-helper/README.md)。