

 **帮助改进此页面** 

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

# 更新 Amazon EKS 附加组件
<a name="updating-an-add-on"></a>

在新版本发布时或您将集群更新到新的 Kubernetes 次要版本后，Amazon EKS 不会自动更新附加组件。要更新现有集群的附加组件，必须启动更新。启动更新后，Amazon EKS 会为您更新附加组件。在更新某个附加组件之前，请查看该附加组件的最新文档。有关可用附加组件的列表，请参阅 [AWS 附加组件](workloads-add-ons-available-eks.md)。如果附加组件需要 IAM 角色，请参阅[来自 AWS 的 Amazon EKS 附加组件](workloads-add-ons-available-eks.md)中有关特定附加组件的详细信息，以了解有关创建该角色的详细信息。

## 先决条件
<a name="updating-an-add-on-prereq"></a>

在创建附加组件之前，请完成以下步骤：
+ 检查附加组件是否需要 IAM 角色。有关更多信息，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。
+ 验证 Amazon EKS 附加组件版本是否与集群兼容。有关更多信息，请参阅 [验证 Amazon EKS 附加组件版本与集群的兼容性](addon-compat.md)。

## 过程
<a name="updating-an-add-on-procedure"></a>

您可以使用 `eksctl`、AWS 管理控制台 或 AWS CLI 更新 Amazon EKS 附加组件。

## 更新附加组件（eksctl）
<a name="_update_add_on_eksctl"></a>

1. 确定集群上目前安装的附加组件和附加组件版本。将 *my-cluster* 替换为您的集群的名称。

   ```
   eksctl get addon --cluster my-cluster
   ```

   示例输出如下。

   ```
   NAME        VERSION              STATUS  ISSUES  IAMROLE  UPDATE AVAILABLE
   coredns     v1.8.7-eksbuild.2    ACTIVE  0
   kube-proxy  v1.23.7-eksbuild.1   ACTIVE  0                v1.23.8-eksbuild.2
   vpc-cni     v1.10.4-eksbuild.1   ACTIVE  0                v1.12.0-eksbuild.1,v1.11.4-eksbuild.1,v1.11.3-eksbuild.1,v1.11.2-eksbuild.1,v1.11.0-eksbuild.1
   ```

   您的输出可能会有所不同，这取决于您的集群上安装的附加组件和版本。您可以看到，在前面的输出示例中，集群上的两个现有附加组件在 `UPDATE AVAILABLE` 列中有较新的版本可用。

1. 更新附加组件。

   1. 将以下命令复制到您的设备。根据需要对该命令进行以下修改：
      + 将 *my-cluster* 替换为您的集群的名称。
      + 将 *region-code* 替换为您的集群所在的 AWS 区域。
      + 将 *vpc-cni* 替换为上一步的输出中返回的要更新的附加组件名称。
      + 如果要更新到的版本早于最新版本，请将 *latest* 替换为上一步的输出中返回的适用版本号。一些附加组件有推荐版本。有关更多信息，请参阅您正在更新的附加组件的文档。有关附加组件的列表，请参阅 [AWS 附加组件](workloads-add-ons-available-eks.md)。**\$1**如果附加组件使用 Kubernetes 服务账户和 IAM 角色，请将 *111122223333* 替换为您的账户 ID，并将 *role-name* 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明，请参阅您正在创建的附加组件的文档。有关可用附加组件的列表，请参阅[AWS 附加组件](workloads-add-ons-available-eks.md)。指定服务账户角色需要您的集群具有 IAM OpenID Connect（OIDC）提供者。要确定您的集群是否具有此提供程序，或者要创建此提供程序，请参阅 [为集群创建 IAM OIDC 提供商](enable-iam-roles-for-service-accounts.md)。

        如果附加组件不使用 Kubernetes 服务账户和 IAM 角色，请删除 `serviceAccountRoleARN: arn:aws:iam::111122223333:role/role-name ` 行。
      + *preserve* 选项保留附加组件的现有值。如果您为附加组件设置设定了自定义值，但未使用此选项，则 Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项，那么我们建议您在更新生产集群上的附加组件之前，先测试非生产集群上所有更改的字段和值。如果您将该值改为 `overwrite`，则所有设置都将更改为 Amazon EKS 的默认值。如果您为任何设置设定了自定义值，这些值可能会被 Amazon EKS 的默认值覆盖。如果您将该值改为 `none`，Amazon EKS 不会更改任何设置的值，但更新可能会失败。如果更新失败，您会收到一条帮助您解决冲突的错误消息。

        ```
        cat >update-addon.yaml <<EOF
        apiVersion: eksctl.io/v1alpha5
        kind: ClusterConfig
        metadata:
          name: my-cluster
          region: region-code
        
        addons:
        - name: vpc-cni
          version: latest
          serviceAccountRoleARN: arn:aws:iam::111122223333:role/role-name
          resolveConflicts: preserve
        EOF
        ```

   1. 运行修改后的命令以创建 `update-addon.yaml` 文件。

   1. 将配置文件应用到您的集群。

      ```
      eksctl update addon -f update-addon.yaml
      ```

   有关更新附加组件的更多信息，请参阅 `eksctl` 文档中的 [Updating addons](https://eksctl.io/usage/addons/#updating-addons)。

## 更新附加组件（AWS 控制台）
<a name="update_add_on_shared_aws_console"></a>

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在左侧导航窗格中，选择**集群**。

1. 选择要为其更新附加组件的集群名称。

1. 选择**附加组件**选项卡。

1. 选择要更新的附加组件

1. 选择**编辑**。

1. 在**配置 *name of addon*** 页面上，执行以下操作：

   1. 选择要使用的**版本**。该附加组件可能有推荐版本。有关更多信息，请参阅您正在更新的附加组件的文档。有关可用附加组件的列表，请参阅[AWS 附加组件](workloads-add-ons-available-eks.md)。

   1. 您可以使用两个选项为附加组件配置角色：EKS 容器组身份 IAM 角色和服务账户 IAM 角色（IRSA）。按照以下相应步骤选择首选选项。如果您选择的所有附加组件在**状态**下都有**需要订阅**字样，请选择**下一步**。如果附件组件的**状态**下没有**需要订阅**字样：

      1. 对于**服务账户的容器组身份 IAM 角色**，您可以使用现有 EKS 容器组身份 IAM 角色，也可以使用**创建推荐角色**按钮创建。此字段将仅提供具有适当信任策略的选项。如果没有可选择的角色，则表示没有具有匹配信任策略的现有角色。要为所选附加组件配置服务账户的 EKS 容器组身份 IAM 角色，请选择**创建推荐角色**。角色创建向导将在单独的窗口中打开。向导将自动填充角色信息，如下所示。对于要在其中创建 EKS 容器组身份 IAM 角色的各个附加组件，请如下方式完成 IAM 向导中的步骤。
         + 在**选择可信实体**步骤中，预先选择 **EKS** 的 AWS 服务选项和 **EKS – 容器组身份**的使用案例，并将自动为附加组件填充相应的信任策略。例如，该角色将使用相应的信任策略创建，该策略包含 pods.eks.amazonaws.com IAM 主体，详见[EKS 容器组身份的优势](pod-identities.md#pod-id-benefits)。选择**下一步**。
         + 在**添加权限**步骤中，系统将为附加组件预先选择角色策略的相应托管策略。例如，对于 Amazon VPC CNI 附加组件，系统将使用托管式策略 `AmazonEKS_CNI_Policy` 创建角色，详见[适用于 Kubernetes 的 Amazon VPC CNI 插件](workloads-add-ons-available-eks.md#add-ons-vpc-cni)。选择**下一步**。
         + 在**命名、查看和创建**步骤的**角色名称**中，系统将自动填充附加组件的默认角色名称。例如，对于 **Amazon VPC CNI** 附加组件，系统将使用 **AmazonEKSPodIdentityAmazonVPCCNIRole** 名称创建角色。在**描述**中，默认描述会自动填充附加组件的相应描述。例如，对于 Amazon VPC CNI 附加组件，该角色的创建描述为**允许在 Amazon EKS 集群中运行容器组（pod）** 以访问 AWS 资源。在**信任策略**中，查看为附加组件填充的信任策略。选择**创建角色**。
**注意**  
保留默认角色名称，使 EKS 能够在新集群中或在向现有集群添加附加组件时为附加组件预先选择角色。您仍然可以覆盖此名称，并且该角色可在您的集群中用于该附加组件，但需要从下拉列表中手动选择该角色。

      1. 对于在**状态**下没有**需要订阅**且您想使用 IRSA 配置角色的附加组件，请参阅您正在创建的附加组件的文档，以创建 IAM 策略并将其附加至角色。有关可用附加组件的列表，请参阅[AWS 附加组件](workloads-add-ons-available-eks.md)。选择 IAM 角色需要您的集群具有 IAM OpenID Connect（OIDC）提供者。要确定您的集群是否具有此提供程序，或者要创建此提供程序，请参阅 [为集群创建 IAM OIDC 提供商](enable-iam-roles-for-service-accounts.md)。

   1. 展开**可选配置设置**。

   1. 在**配置值**中，请输入附加组件特有的任何配置信息。有关更多信息，请参阅您正在更新的附加组件的文档。有关附加组件列表，请参阅[AWS 附加组件](workloads-add-ons-available-eks.md)…​ 对于**冲突解决方法**，选择其中一个选项。如果您为附加组件设置设定了自定义值，我们建议选择 **Preserve**（保留）选项。如果您不选择此选项，Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项，那么我们建议您在更新生产集群上的附加组件之前，先测试非生产集群上所有更改的字段和值。如果您将该值改为 overwrite，则所有设置都将更改为 Amazon EKS 的默认值。如果您为任何设置设定了自定义值，这些值可能会被 Amazon EKS 的默认值覆盖。如果您将该值改为 none，Amazon EKS 不会更改任何设置的值，但更新可能会失败。如果更新失败，您会收到一条帮助您解决冲突的错误消息。

1. 选择**保存更改**。

## 更新附加组件（AWS CLI）
<a name="update_add_on_shared_aws_cli"></a>

1. 您需要在您的设备或 AWS CloudShell 上安装和配置 AWS 命令行界面（AWS CLI）的版本 `2.12.3` 或更高版本，或版本 `1.27.160` 或更高版本。要查看当前版本，请使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。`yum`、`apt-get` 或适用于 macOS 的 Homebrew 等软件包管理器通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本，请参阅《AWS 命令行界面用户指南》**中的[安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)和[使用 aws configure 快速配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新，请参阅《AWS CloudShell 用户指南》**中的[将 AWS CLI 安装到您的主目录](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。

1. 查看已安装的附加组件列表。将 *my-cluster* 替换为您的集群的名称。

   ```
   aws eks list-addons --cluster-name my-cluster
   ```

   示例输出如下。

   ```
   {
       "addons": [
           "coredns",
           "kube-proxy",
           "vpc-cni"
       ]
   }
   ```

1. 查看要更新的附加组件的当前版本。将 *my-cluster* 替换为您的集群名称，将 *vpc-cni* 替换为要更新的附加组件的名称。

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

   示例输出如下。

   ```
   v1.10.4-eksbuild.1
   ```

1. 确定哪些版本的附加组件可用于您的集群版本。将 *1.35* 替换为您的集群版本，将 *vpc-cni* 替换为要更新的附加组件的名称。

   ```
   aws eks describe-addon-versions --kubernetes-version 1.35 --addon-name vpc-cni \
       --query 'addons[].addonVersions[].{Version: addonVersion, Defaultversion: compatibilities[0].defaultVersion}' --output table
   ```

   示例输出如下。

   ```
   ------------------------------------------
   |          DescribeAddonVersions         |
   +-----------------+----------------------+
   | Defaultversion  |       Version        |
   +-----------------+----------------------+
   |  False          |  v1.12.0-eksbuild.1  |
   |  True           |  v1.11.4-eksbuild.1  |
   |  False          |  v1.10.4-eksbuild.1  |
   |  False          |  v1.9.3-eksbuild.1   |
   +-----------------+----------------------+
   ```

   默认情况下，`Defaultversion` 列中值为 `True` 的版本是创建附加组件时使用的版本。

1. 更新您的附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改，然后运行修改后的命令。有关此命令的更多信息，请参阅《Amazon EKS 命令行参考》中的 [update-addon](https://docs.aws.amazon.com/cli/latest/reference/eks/update-addon.html)。
   + 将 *my-cluster* 替换为您的集群的名称。
   + 将 *vpc-cni* 替换为前面步骤的输出中返回的要更新的附加组件名称。
   + 将 *version-number* 替换为上一步的输出中返回的要更新到的版本。一些附加组件有推荐版本。有关更多信息，请参阅您正在更新的附加组件的文档。有关附加组件的列表，请参阅 [AWS 附加组件](workloads-add-ons-available-eks.md)。**\$1**如果附加组件使用 Kubernetes 服务账户和 IAM 角色，请将 *111122223333* 替换为您的账户 ID，并将 *role-name* 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明，请参阅您正在创建的附加组件的文档。有关可用附加组件的列表，请参阅[AWS 附加组件](workloads-add-ons-available-eks.md)。指定服务账户角色需要您的集群具有 IAM OpenID Connect（OIDC）提供者。要确定您的集群是否具有此提供程序，或者要创建此提供程序，请参阅 [为集群创建 IAM OIDC 提供商](enable-iam-roles-for-service-accounts.md)。

     如果附加组件不使用 Kubernetes 服务账户和 IAM 角色，请删除 `serviceAccountRoleARN: arn:aws:iam::111122223333:role/role-name ` 行。
   + `--resolve-conflicts PRESERVE` 选项保留附加组件的现有值。如果您为附加组件设置设定了自定义值，但未使用此选项，则 Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项，那么我们建议您在更新生产集群上的附加组件之前，先测试非生产集群上所有更改的字段和值。如果您将该值改为 `OVERWRITE`，则所有设置都将更改为 Amazon EKS 的默认值。如果您为任何设置设定了自定义值，这些值可能会被 Amazon EKS 的默认值覆盖。如果您将该值改为 `NONE`，Amazon EKS 不会更改任何设置的值，但更新可能会失败。如果更新失败，您会收到一条帮助您解决冲突的错误消息。
   + 如果要删除所有自定义配置，请使用 *--configuration-values '\$1\$1'* 选项执行更新。这会将所有自定义配置设置回默认值。如果不想更改自定义配置，请勿提供 *--configuration-values* 标志。如果想要调整自定义配置，请将 *\$1\$1* 替换为新参数。

     ```
     aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version version-number \
         --service-account-role-arn arn:aws:iam::111122223333:role/role-name --configuration-values '{}' --resolve-conflicts PRESERVE
     ```

1. 检查更新的状态。将 *my-cluster* 替换为您的集群名称，将*vpc-cni* 替换为您正在更新的附加组件的名称。

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name vpc-cni
   ```

   示例输出如下。

   ```
   {
       "addon": {
           "addonName": "vpc-cni",
           "clusterName": "my-cluster",
           "status": "UPDATING",
       }
   }
   ```

   当状态为 `ACTIVE` 时更新完成。