

 **帮助改进此页面** 

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

# 创建 Amazon VPC CNI（Amazon EKS 附加组件）
<a name="vpc-add-on-create"></a>

使用以下步骤创建适用于 Kubernetes Amazon EKS 附加组件的 Amazon VPC CNI 插件。

开始之前，请查看注意事项。有关更多信息，请参阅 [注意事项](managing-vpc-cni.md#manage-vpc-cni-add-on-on-considerations)。

## 先决条件
<a name="vpc-add-on-create-prerequisites"></a>

以下是适用于 Kubernetes Amazon EKS 附加组件的 Amazon VPC CNI 插件的先决条件。
+ 现有 Amazon EKS 集群。要部署一个角色，请参阅[开始使用 Amazon EKS](getting-started.md)。
+ 适用于集群的现有 Amazon Identity and Access Management（IAM）OpenID Connect（OIDC）提供者。要确定您是否已经拥有一个或是否要创建一个，请参阅[为集群创建 IAM OIDC 提供商](enable-iam-roles-for-service-accounts.md)。
+ 附加有 [AmazonEKS\$1CNI\$1Policy](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html) IAM 策略（如果集群使用 `IPv4` 系列）或 IPv6 策略（如果集群使用 `IPv6` 系列）的 IAM 角色。有关 VPC CNI 角色的更多信息，请参阅[配置 Amazon VPC CNI 插件以使用 IRSA](cni-iam-role.md)。有关 IPv6 策略的信息，请参阅[为使用 `IPv6` 系列的集群创建 IAM policy](cni-iam-role.md#cni-iam-role-create-ipv6-policy)。

**重要**  
适用于 Kubernetes 的 Amazon VPC CNI 插件版本 `v1.16.0` 到 `v1.16.1` 实现了 CNI 规范版本 `v1.0.0`。有关 CNI 规范 `v1.0.0` 的更多信息，请参阅 GitHub 上的 [Container Network Interface (CNI) Specification](https://github.com/containernetworking/cni/blob/spec-v1.0.0/SPEC.md)。

## 过程
<a name="vpc-add-on-create-procedure"></a>

完成先决条件后，请使用以下步骤创建附加组件。

1. 查看集群上当前安装的附加组件版本。

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

   示例输出如下。

   ```
   v1.16.4-eksbuild.2
   ```

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 类型的附加组件。要安装，就需完成此流程中其余的步骤。

1. 保存您当前安装的附加组件的配置。

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

1. 使用 Amazon CLI 创建附加组件。如果要使用 Amazon Web Services 管理控制台 或 `eksctl` 来创建附加组件，请参阅 [创建 Amazon EKS 附加组件](creating-an-add-on.md) 并指定 `vpc-cni` 为附加组件名称。将以下命令复制到您的设备。根据需要对该命令进行以下修改，然后运行修改后的命令。
   + 将 *my-cluster* 替换为您的集群的名称。
   + 将 *v1.20.3-eksbuild.1* 替换为适合您的集群版本的最新版本表中列出的最新版本。有关最新版本表，请参阅 [Amazon VPC CNI 版本](managing-vpc-cni.md#vpc-cni-latest-available-version)。
   + 将 *111122223333* 替换为您的账户 ID，并将 *AmazonEKSVPCCNIRole* 替换为您创建的[现有 IAM 角色](cni-iam-role.md#cni-iam-role-create-role)的名称。指定角色需要您的集群具有 IAM OpenID Connect（OIDC）提供者。要确定您的集群是否具有此提供程序，或者要创建此提供程序，请参阅[为集群创建 IAM OIDC 提供商](enable-iam-roles-for-service-accounts.md)。

     ```
     aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.20.3-eksbuild.1 \
         --service-account-role-arn arn:aws-cn:iam::111122223333:role/AmazonEKSVPCCNIRole
     ```

     如果您对当前附加组件应用的自定义设置与 Amazon EKS 附加组件的默认设置相冲突，则创建可能会失败。如果创建失败，您会收到一条可以帮助您解决问题的错误信息。或者，您可以将 `--resolve-conflicts OVERWRITE` 添加到前面的命令中。这样一来，附加组件会覆盖任何现有的自定义设置。创建附加组件后，您可以使用自定义设置对其进行更新。

1. 确认集群的 Kubernetes 版本的附加组件最新版本已添加到集群。将 *my-cluster* 替换为您的集群的名称。

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

   附加组件创建可能需要几秒钟才能完成。

   示例输出如下。

   ```
   v1.20.3-eksbuild.1
   ```

1. 如果您在创建 Amazon EKS 附加组件之前对原始附加组件进行了自定义设置，则请使用您在上一步中保存的配置，以使用您的自定义设置更新 EKS 附加组件。按照 [更新 Amazon VPC CNI（Amazon EKS 附加组件）](vpc-add-on-update.md) 中的步骤操作。

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)。