更新 Amazon EKS 附加组件 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

更新 Amazon EKS 附加组件

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

先决条件

在创建附加组件之前,请完成以下步骤:

过程

您可以使用 eksctl、AWS Management Console 或 AWS CLI 更新 Amazon EKS 附加组件。

更新附加组件(eksctl)

  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 列中有较新的版本可用。

  2. 更新附加组件。

    1. 将以下命令复制到您的设备。根据需要对该命令进行以下修改:

      • my-cluster 替换为您的集群的名称。

      • region-code 替换为您的集群所在的 AWS 区域。

      • vpc-cni 替换为上一步的输出中返回的要更新的附加组件名称。

      • 如果要更新到的版本早于最新版本,请将 latest 替换为上一步的输出中返回的适用版本号。一些附加组件有推荐版本。有关更多信息,请参阅您正在更新的附加组件的文档。有关可用附加组件的列表,请参阅AWS 附加组件* 如果附加组件使用 Kubernetes 服务账户和 IAM 角色,请将 111122223333 替换为您的账户 ID,并将 role-name 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明,请参阅您正在创建的附加组件的文档。有关可用附加组件的列表,请参阅AWS 附加组件。指定服务账户角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅 为集群创建 IAM OIDC 提供商

        如果附加组件不使用 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
    2. 运行修改后的命令以创建 update-addon.yaml 文件。

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

      eksctl update addon -f update-addon.yaml

    有关更新附加组件的更多信息,请参阅 eksctl 文档中的 Updating addons

更新附加组件(AWS 控制台)

  1. 打开 Amazon EKS 控制台

  2. 在左侧导航窗格中,选择集群

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

  4. 选择附加组件选项卡。

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

  6. 选择编辑

  7. 配置 name of addon 页面上,执行以下操作:

    1. 选择要使用的版本。该附加组件可能有推荐版本。有关更多信息,请参阅您正在更新的附加组件的文档。有关可用附加组件的列表,请参阅AWS 附加组件

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

      1. 对于服务账户的容器组身份 IAM 角色,您可以使用现有 EKS 容器组身份 IAM 角色,也可以使用创建推荐角色按钮创建。此字段将仅提供具有适当信任策略的选项。如果没有可选择的角色,则表示没有具有匹配信任策略的现有角色。要为所选附加组件配置服务账户的 EKS 容器组身份 IAM 角色,请选择创建推荐角色。角色创建向导将在单独的窗口中打开。向导将自动填充角色信息,如下所示。对于要在其中创建 EKS 容器组身份 IAM 角色的各个附加组件,请如下方式完成 IAM 向导中的步骤。

        • 选择可信实体步骤中,预先选择 EKS 的 AWS 服务选项和 EKS – 容器组身份的用例,并将自动为附加组件填充相应的信任策略。例如,该角色将使用相应的信任策略创建,该策略包含 pods.eks.amazonaws.com IAM 主体,详见EKS 容器组身份的优势。选择下一步

        • 添加权限步骤中,系统将为附加组件预先选择角色策略的相应托管策略。例如,对于 Amazon VPC CNI 附加组件,系统将使用托管策略“AmazonEKS_CNI_Policy”创建角色,详见适用于 Kubernetes 的 Amazon VPC CNI 插件。选择下一步

        • 命名、查看和创建步骤的角色名称中,系统将自动填充附加组件的默认角色名称。例如,对于 Amazon VPC CNI 附加组件,系统将使用 AmazonEKSPodIdentityAmazonVPCCNIRole 名称创建角色。在描述中,默认描述会自动填充附加组件的相应描述。例如,对于 Amazon VPC CNI 附加组件,该角色的创建描述为允许在 Amazon EKS 集群中运行容器组(pod) 以访问 AWS 资源。在信任策略中,查看为附加组件填充的信任策略。选择 Create role(创建角色)。

          注意

          保留默认角色名称,使 EKS 能够在新集群中或在向现有集群添加附加组件时为附加组件预先选择角色。您仍然可以覆盖此名称,并且该角色可在您的集群中用于该附加组件,但需要从下拉列表中手动选择该角色。

      2. 对于在状态下没有需要订阅且您想使用 IRSA 配置角色的附加组件,请参阅您正在创建的附加组件的文档,以创建 IAM 策略并将其附加至角色。有关可用附加组件的列表,请参阅AWS 附加组件。选择 IAM 角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅为集群创建 IAM OIDC 提供商

    3. 展开可选配置设置

    4. 配置值中,请输入附加组件特有的任何配置信息。有关更多信息,请参阅您正在更新的附加组件的文档。有关附加组件列表,请参阅AWS 附加组件…​ 对于冲突解决方法,选择其中一个选项。如果您为附加组件设置设定了自定义值,我们建议选择 Preserve(保留)选项。如果您不选择此选项,Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项,那么我们建议您在更新生产集群上的附加组件之前,先测试非生产集群上所有更改的字段和值。

  8. 选择 Save changes(保存更改)

更新附加组件(AWS CLI)

  1. 您需要在您的设备或 AWS CloudShell 上安装和配置 AWS 命令行界面(AWS CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS 命令行界面用户指南》中的安装使用 aws configure 快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到您的主目录

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

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

    示例输出如下。

    { "addons": [ "coredns", "kube-proxy", "vpc-cni" ] }
  3. 查看要更新的附加组件的当前版本。将 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
  4. 确定哪些版本的附加组件可用于您的集群版本。将 1.30 替换为您的集群版本,将 vpc-cni 替换为要更新的附加组件的名称。

    aws eks describe-addon-versions --kubernetes-version 1.30 --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 的版本是创建附加组件时使用的版本。

  5. 更新您的附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。有关此命令的更多信息,请参阅《Amazon EKS 命令行参考》中的 update-addon

    • my-cluster 替换为您的集群的名称。

    • vpc-cni 替换为前面步骤的输出中返回的要更新的附加组件名称。

    • version-number 替换为上一步的输出中返回的要更新到的版本。一些附加组件有推荐版本。有关更多信息,请参阅您正在更新的附加组件的文档。有关可用附加组件的列表,请参阅AWS 附加组件* 如果附加组件使用 Kubernetes 服务账户和 IAM 角色,请将 111122223333 替换为您的账户 ID,并将 role-name 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明,请参阅您正在创建的附加组件的文档。有关可用附加组件的列表,请参阅AWS 附加组件。指定服务账户角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅 为集群创建 IAM OIDC 提供商

      如果附加组件不使用 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 '{}' 选项执行更新。这会将所有自定义配置设置回默认值。如果不想更改自定义配置,请勿提供 --configuration-values 标志。如果想要调整自定义配置,请将 {} 替换为新参数。

      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
  6. 检查更新的状态。将 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 时更新完成。