管理 Amazon EKS 附加组件 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

管理 Amazon EKS 附加组件

Amazon EKS 附加组件是一组用于 Amazon EKS 集群的精选附加软件。所有 Amazon EKS 附加组件都具有以下特性:

  • 包含最新的安全补丁和错误修复。

  • 经过 Amazon 验证,可与 Amazon EKS 一起使用。

  • 可减少管理附加软件所需的工作量。

当 Amazon EKS 附加组件有新版本时,Amazon Web Services Management Console会通知您。您只需启动更新,Amazon EKS 就会为您更新附加软件。

有关可用附加组件的列表,请参阅Amazon EKS 提供的可用 Amazon EKS 附加组件。有关 Kubernetes 字段管理的更多信息,请参阅 Kubernetes 字段管理

先决条件

创建附加组件

您可以使用 eksctl、Amazon Web Services Management Console或 Amazon CLI 创建 Amazon EKS 附加组件。如果附加组件需要 IAM 角色,请参阅 Amazon EKS 提供的可用 Amazon EKS 附加组件 中特定附加组件的详细信息,以了解有关创建角色的详细信息。

eksctl
先决条件

您的设备或 Amazon CloudShell 上安装了 0.183.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

使用 eksctl 创建 Amazon EKS 附加组件
  1. 查看某个集群版本的可用附加组件名称。将 1.30 替换为您的集群版本。

    eksctl utils describe-addon-versions --kubernetes-version 1.30 | grep AddonName

    示例输出如下。

    "AddonName": "aws-ebs-csi-driver",
                            "AddonName": "coredns",
                            "AddonName": "kube-proxy",
                            "AddonName": "vpc-cni",
                            "AddonName": "adot",
                            "AddonName": "dynatrace_dynatrace-operator",
                            "AddonName": "upbound_universal-crossplane",
                            "AddonName": "teleport_teleport",
                            "AddonName": "factorhouse_kpow",
                            [...]
  2. 查看要创建的附加组件的可用版本。将 1.30 替换为您的集群版本。将 name-of-addon 替换为您要查看其版本的附加组件的名称。该名称必须是前面步骤中返回的名称之一。

    eksctl utils describe-addon-versions --kubernetes-version 1.30 --name name-of-addon | grep AddonVersion

    以下输出是一个示例,显示了为名为 vpc-cni 的附加组件返回的内容。您可以看到该附加组件有多个可用版本。

    "AddonVersions": [
        "AddonVersion": "v1.12.0-eksbuild.1",
        "AddonVersion": "v1.11.4-eksbuild.1",
        "AddonVersion": "v1.10.4-eksbuild.1",
        "AddonVersion": "v1.9.3-eksbuild.1",
  3. 创建 Amazon EKS 附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令:

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

    • name-of-addon 替换为您要创建的附加组件的名称。

    • 如果您需要早于最新版本的附加组件版本,请将 latest 替换为前面步骤的输出中返回的适用版本号。

    • 如果附加组件使用了服务账户角色,请将 111122223333 替换为您的账户 ID,并将 role-name 替换为该角色的名称。有关为服务账户创建角色的说明,请参阅您正在创建的附加组件的文档。指定服务账户角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅为集群创建 IAM OIDC 提供商

      如果附加组件不使用服务账户角色,请删除 --service-account-role-arn arn:aws:iam::111122223333:role/role-name

    • 此示例命令将覆盖附加组件的任何现有自行管理版本(如果有的话)的配置。如果您不想覆盖现有的自行管理附加组件的配置,请删除 --force 选项。如果您删除此选项,并且 Amazon EKS 附加组件需要覆盖现有的自行管理附加组件的配置,那么创建 Amazon EKS 附加组件将会失败,并显示一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。

      eksctl create addon --cluster my-cluster --name name-of-addon --version latest \ --service-account-role-arn arn:aws:iam::111122223333:role/role-name --force

您可以看到该命令所有可用选项的列表。

eksctl create addon --help

有关可用选项的更多信息,请参阅 eksctl 文档中的 Addons(附加组件)。

Amazon Web Services Management Console
使用 Amazon Web Services Management Console 创建 Amazon EKS 附加组件
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择 Clusters(集群),然后选择要为其创建附加组件的集群的名称。

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

  4. 选择获取更多附加组件

  5. Configure selected add-ons settings(配置选定的附加组件设置)页面上:

    • 选择查看订阅选项,打开订阅选项表单。查看定价详细信息法律部分,然后选择订阅按钮继续。

    • 对于 Version(版本),请选择要安装的版本。我们建议选择标记为 latest(最新)的版本,除非您正在创建的个别附加组件推荐了不同的版本。要确定附加组件是否有推荐版本,请参阅您正在创建的附加组件的文档

  6. 查看和添加页面上,选择创建。附加组件安装完成后,您会看到您安装的附加组件。

Amazon CLI
先决条件

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

使用 Amazon CLI 创建 Amazon EKS 附加组件
  1. 确定哪些附加组件可用。您可以看到所有可用的附加组件及其类型和发布者。将 1.30 替换为您的集群版本。

    aws eks describe-addon-versions --kubernetes-version 1.30 \ --query 'addons[].{Name: addonName, Type: type}' --output table

    示例输出如下。

    -------------------------------------------------------
    |                DescribeAddonVersions                |
    +-------------------------------+---------------------+
    |             Name              |        Type         |
    +-------------------------------+---------------------+
    |  aws-ebs-csi-driver           |  storage            |
    |  coredns                      |  networking         |
    |  kube-proxy                   |  networking         |
    |  vpc-cni                      |  networking         |
    |  adot                         |  observability      |
    |  [...]                        |  [...]              |
    +-------------------------------+---------------------+

    您的输出可能会有所不同。在此输出示例中,有三个不同的 networking 类型的附加组件和五个发布者类型为 eks 的附加组件。

  2. 您可以看到每个附加组件的可用版本。将 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 的版本是创建附加组件时使用的版本。

  3. (可选)通过运行以下命令查找所选附加组件的配置选项:

    aws eks describe-addon-configuration --addon-name vpc-cni --addon-version v1.12.0-eksbuild.1
    {
        "addonName": "vpc-cni",
        "addonVersion": "v1.12.0-eksbuild.1",
        "configurationSchema": "{\"$ref\":\"#/definitions/VpcCni\",\"$schema\":\"http://json-schema.org/draft-06/schema#\",\"definitions\":{\"Cri\":{\"additionalProperties\":false,\"properties\":{\"hostPath\":{\"$ref\":\"#/definitions/HostPath\"}},\"title\":\"Cri\",\"type\":\"object\"},\"Env\":{\"additionalProperties\":false,\"properties\":{\"ADDITIONAL_ENI_TAGS\":{\"type\":\"string\"},\"AWS_VPC_CNI_NODE_PORT_SUPPORT\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_ENI_MTU\":{\"format\":\"integer\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_CONFIGURE_RPFILTER\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":{\"format\":\"boolean\",\"type\":\"string\"},\"AWS_VPC_K8S_CNI_LOGLEVEL\":{\"type\":\"string\"},\"AWS_VPC_K8S_CNI_LOG_FILE\":{\"type\":\"string\"},\"AWS_VPC_K8S_CNI_RANDOMIZESNAT\":{\"type\":\"string\"},\"AWS_VPC_K8S_CNI_VETHPREFIX\":{\"type\":\"string\"},\"AWS_VPC_K8S_PLUGIN_LOG_FILE\":{\"type\":\"string\"},\"AWS_VPC_K8S_PLUGIN_LOG_LEVEL\":{\"type\":\"string\"},\"DISABLE_INTROSPECTION\":{\"format\":\"boolean\",\"type\":\"string\"},\"DISABLE_METRICS\":{\"format\":\"boolean\",\"type\":\"string\"},\"DISABLE_NETWORK_RESOURCE_PROVISIONING\":{\"format\":\"boolean\",\"type\":\"string\"},\"ENABLE_POD_ENI\":{\"format\":\"boolean\",\"type\":\"string\"},\"ENABLE_PREFIX_DELEGATION\":{\"format\":\"boolean\",\"type\":\"string\"},\"WARM_ENI_TARGET\":{\"format\":\"integer\",\"type\":\"string\"},\"WARM_PREFIX_TARGET\":{\"format\":\"integer\",\"type\":\"string\"}},\"title\":\"Env\",\"type\":\"object\"},\"HostPath\":{\"additionalProperties\":false,\"properties\":{\"path\":{\"type\":\"string\"}},\"title\":\"HostPath\",\"type\":\"object\"},\"Limits\":{\"additionalProperties\":false,\"properties\":{\"cpu\":{\"type\":\"string\"},\"memory\":{\"type\":\"string\"}},\"title\":\"Limits\",\"type\":\"object\"},\"Resources\":{\"additionalProperties\":false,\"properties\":{\"limits\":{\"$ref\":\"#/definitions/Limits\"},\"requests\":{\"$ref\":\"#/definitions/Limits\"}},\"title\":\"Resources\",\"type\":\"object\"},\"VpcCni\":{\"additionalProperties\":false,\"properties\":{\"cri\":{\"$ref\":\"#/definitions/Cri\"},\"env\":{\"$ref\":\"#/definitions/Env\"},\"resources\":{\"$ref\":\"#/definitions/Resources\"}},\"title\":\"VpcCni\",\"type\":\"object\"}}}"
    }

    输出是标准的 JSON 架构。

    以下是适用于上述架构的 JSON 格式的有效配置值示例。

    {
      "resources": {
        "limits": {
          "cpu": "100m"
        }
      }
    }

    以下是适用于上述架构的 YAML 格式的有效配置值示例。

      resources: 
        limits: 
          cpu: 100m    
  4. 确定该附加组件是否需要 IAM 权限。如果是,则需要(1)确定是否要使用 EKS 容器组身份或服务账户的 IAM 角色(IRSA),(2)确定要与附加组件一起使用的 IAM 角色的 ARN,以及(3)确定附加组件使用的 Kubernetes 服务账户的名称。您可以在文档中或使用 Amazon API 找到此信息,请参阅检索有关附加组件的 IAM 信息

  5. 创建 Amazon EKS 附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令:

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

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

    • version-number 替换为前面步骤的输出中返回的要使用的版本。

    • 如果附加组件不需要 IAM 权限,则删除 <service-account-configuration>

    • 如果附加组件(1)需要 IAM 权限,并且(2)您的集群使用 EKS 容器组身份,请将 <service-account-configuration> 替换为以下容器组身份关联。将 <service-account-name> 替换为附加组件使用的服务账户名称。将 <role-arn> 替换为 IAM 角色的 ARN。该角色必须拥有 EKS 容器组身份所需的信任策略。

      • --pod-identity-associations 'serviceAccount=<service-account-name>,roleArn=<role-arn>'
    • 如果附加组件(1)需要 IAM 权限,并且(2)您的集群使用 IRSA,请将 <service-account-configuration> 替换为以下 IRSA 配置。将 111122223333 替换为您的账户 ID,并将 role-name 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明,请参阅您正在创建的附加组件的文档。指定服务账户角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅 为集群创建 IAM OIDC 提供商

      • --service-account-role-arn arn:aws:iam::111122223333:role/role-name
    • 这些示例命令将覆盖附加组件的任何现有自行管理版本(如果有的话)的 --configuration-values 选项。将其替换为所需配置值,例如字符串或文件输入。如果不想提供配置值,请删除 --configuration-values 选项。如果您不希望 Amazon CLI 覆盖现有的自行管理附加组件的配置,请删除 --resolve-conflicts OVERWRITE 选项。如果您删除此选项,并且 Amazon EKS 附加组件需要覆盖现有的自行管理附加组件的配置,那么创建 Amazon EKS 附加组件将会失败,并显示一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。

    aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version version-number \ <service-account-configuration> --configuration-values '{"resources":{"limits":{"cpu":"100m"}}}' --resolve-conflicts OVERWRITE
    aws eks create-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version version-number \ <service-account-configuration> --configuration-values 'file://example.yaml' --resolve-conflicts OVERWRITE

    有关可用选项的完整列表,请参阅 Amazon EKS Command Line Reference(《Amazon EKS 命令行参考》)中的 create-addon

更新附加组件

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

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

eksctl
先决条件

您的设备或 Amazon CloudShell 上安装了 0.183.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

使用 eksctl 更新 Amazon EKS 附加组件
  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 替换为集群所在的 Amazon Web Services 区域。

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

      • 如果要更新到的版本早于最新版本,请将 latest 替换为上一步的输出中返回的适用版本号。一些附加组件有推荐版本。有关更多信息,请参阅您正在更新的附加组件的文档

      • 如果附加组件使用 Kubernetes 服务账户和 IAM 角色,请将 111122223333 替换为您的账户 ID,并将 role-name 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明,请参阅您正在创建的附加组件的文档。指定服务账户角色需要您的集群具有 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 文档中的 Addons(附加组件)。

Amazon Web Services Management Console
使用 Amazon Web Services Management Console 更新 Amazon EKS 附加组件
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择 Clusters(集群),然后选择要为其配置附加组件的集群的名称。

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

  4. 选择附加组件框右上角的框,然后选择 Edit(编辑)。

  5. Configure name of addon(配置 name of addon)页面上:

    • 选择您想使用的 Version(版本)。该附加组件可能有推荐版本。有关更多信息,请参阅您正在更新的附加组件的文档

    • 对于选择 IAM 角色,您可以使用节点的 IAM 角色(未设t)或为该附加组件创建的现有角色。如果没有可选择的角色,则表示没有现有角色。无论您选择哪个选项,请参阅您正在创建的附加组件(用于创建IAM 策略并将其附加到某个角色)的文档。选择 IAM 角色需要您的集群具有 IAM OpenID Connect(OIDC)提供程序。要确定您的集群是否具有此提供程序,或者要创建此提供程序,请参阅为集群创建 IAM OIDC 提供商

    • 对于 Code editor,请输入附加组件特有的任何配置信息。有关更多信息,请参阅您正在更新的附加组件的文档

    • 对于 Conflict resolution method(冲突解决方法),选择其中一个选项。如果您为附加组件设置设定了自定义值,我们建议选择 Preserve(保留)选项。如果您不选择此选项,Amazon EKS 会使用其默认值覆盖您的值。如果您使用此选项,那么我们建议您在更新生产集群上的附加组件之前,先测试非生产集群上所有更改的字段和值。

  6. 选择更新

Amazon CLI
先决条件

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

使用 Amazon CLI 更新 Amazon EKS 附加组件
  1. 查看已安装的附加组件列表。将 my-cluster 替换为您的集群名称。

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

    示例输出如下。

    { "addons": [ "coredns", "kube-proxy", "vpc-cni" ] }
  2. 查看要更新的附加组件的当前版本。将 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
  3. 您可以看到该附加组件的哪些版本可用于您的集群版本。将 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 的版本是创建附加组件时使用的版本。

  4. 更新您的附加组件。将以下命令复制到您的设备。根据需要对该命令进行以下修改,然后运行修改后的命令。

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

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

    • version-number 替换为上一步的输出中返回的要更新到的版本。一些附加组件有推荐版本。有关更多信息,请参阅您正在更新的附加组件的文档

    • 如果附加组件使用 Kubernetes 服务账户和 IAM 角色,请将 111122223333 替换为您的账户 ID,并将 role-name 替换为您创建的现有 IAM 角色的名称。有关创建角色的说明,请参阅您正在创建的附加组件的文档。指定服务账户角色需要您的集群具有 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
  5. 检查更新的状态。将 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 时更新完成。

删除附加组件

当您删除 Amazon EKS 附加组件时:

  • 附加组件提供的功能不停机。

  • 如果您使用的是服务账户的 IAM 角色(IRSA),并且附加组件有与其关联的 IAM 角色,则不会移除该 IAM 角色。

  • 如果您使用的是容器组身份,则附加组件拥有的任何容器组身份关联都将被删除。如果将 --preserve 选项指定为 Amazon CLI,则关联将被保留。

  • Amazon EKS 停止管理附加组件的设置。

  • 控制台停止通知您新版本何时可用。

  • 您无法使用任何 Amazon 工具或 API 更新附加组件。

  • 您可以选择将附加软件留在集群上,以便您自行管理,您也可以从集群中删除附加软件。只有当集群上没有资源依赖于附加组件提供的功能时,您才能从集群中删除附加软件。

您可以使用 eksctl、Amazon Web Services Management Console或 Amazon CLI 从集群中删除 Amazon EKS 附加组件。

eksctl
先决条件

您的设备或 Amazon CloudShell 上安装了 0.183.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

使用 eksctl 删除 Amazon EKS 附加组件
  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 vpc-cni v1.10.4-eksbuild.1 ACTIVE 0 [...]

    您的输出可能会有所不同,这取决于您的集群上安装的附加组件和版本。

  2. 删除附加组件。将 my-cluster 替换为您的集群名称,将 name-of-add-on 替换为上一步的输出中返回的要删除的附加组件名称。如果您删除了 --preserve 选项,则除了 Amazon EKS 不再管理附加组件外,附加软件也会从集群中删除。

    eksctl delete addon --cluster my-cluster --name name-of-addon --preserve
Amazon Web Services Management Console
使用 Amazon Web Services Management Console 删除 Amazon EKS 附加组件
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择 Clusters(集群),然后选择要删除其 Amazon EKS 附加组件的集群的名称。

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

  4. 选中附加组件框右上角的复选框,然后选择 Remove(删除)。如果您希望 Amazon EKS 停止管理附加组件的设置,但想要在集群上保留附加组件,以便您自行管理附加组件的所有设置,请选择 Preserve on the cluster(保留在集群上)。键入附加组件名称,然后选择 Remove(删除)。

Amazon CLI
先决条件

您的设备或 Amazon CloudShell 上安装了 0.183.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

使用 Amazon CLI 删除 Amazon EKS 附加组件
  1. 查看已安装的附加组件列表。将 my-cluster 替换为您的集群名称。

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

    示例输出如下。

    { "addons": [ "coredns", "kube-proxy", "vpc-cni", "name-of-addon" ] }
  2. 删除已安装的附加组件。将 my-cluster 替换为您的集群名称,将 name-of-add-on 替换为要删除的附加组件的名称。移除 --preserve 会从您的集群中移除附加组件软件。

    aws eks delete-addon --cluster-name my-cluster --addon-name name-of-addon --preserve

    简短的示例输出如下。

    { "addon": { "addonName": "name-of-add-on", "clusterName": "my-cluster", "status": "DELETING", [...]
  3. 检查删除的状态。将 my-cluster 替换为您的集群名称,将 name-of-addon 替换为您正在删除的附加组件的名称。

    aws eks describe-addon --cluster-name my-cluster --addon-name name-of-addon

    删除附加组件后,示例输出如下。

    An error occurred (ResourceNotFoundException) when calling the DescribeAddon operation: No addon: name-of-addon found in cluster: my-cluster

检索插件版本兼容性

使用 describe-addon-verisions API 列出 EKS 插件的可用版本,以及每个插件版本支持哪些 Kubernetes 版本。

检索插件版本兼容性(Amazon CLI)
  1. 验证 Amazon CLI 是否已安装并在使用 aws sts get-caller-identity。如果此命令不起作用,请了解如何开始使用 Amazon CLI。

  2. 确定要检索其版本兼容性信息的插件的名称,例如 amazon-cloudwatch-observability

  3. 确定集群的 Kubernetes 版本,例如 1.28

  4. 使用 Amazon CLI 检索与集群的 Kubernetes 版本兼容的插件版本。

    aws eks describe-addon-versions --addon-name amazon-cloudwatch-observability --kubernetes-version 1.29

    示例输出如下。

    { "addons": [ { "addonName": "amazon-cloudwatch-observability", "type": "observability", "addonVersions": [ { "addonVersion": "v1.5.0-eksbuild.1", "architecture": [ "amd64", "arm64" ], "compatibilities": [ { "clusterVersion": "1.28", "platformVersions": [ "*" ], "defaultVersion": true } ], [...]

    此输出显示插件版本 v1.5.0-eksbuild.1 与 Kubernetes 集群版本 1.28 兼容。