管理 Amazon EKS 附加组件 - Amazon EKS

帮助改进此页面

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

管理 Amazon EKS 附加组件

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

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

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

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

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

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

先决条件

创建附加组件

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

eksctl
先决条件

您的设备或 AWS 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 还是 AWS Marketplace 附加组件。AWS Marketplace 具有第三方附加组件,需要您完成额外的步骤才能创建附加组件。

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

    如果未返回输出,则该附加组件是 Amazon EKS。如果返回输出,则该附加组件是 AWS Marketplace 附加组件。以下输出适用于名为 teleport_teleport 的附加组件。

    "ProductUrl": "https://aws.amazon.com/marketplace/pp?sku=3bda70bb-566f-4976-806c-f96faef18b26"

    您可以通过返回的 URL 在 AWS Marketplace 中了解有关该附加组件的更多信息。如果该附加组件需要订阅,您可以通过 AWS Marketplace 对其进行订阅。如果您要从 AWS Marketplace 创建附加组件,则用于创建附加组件的 IAM 主体必须具有创建 AWSServiceRoleForAWSLicenseManagerRole 服务相关角色的权限。有关向 IAM 实体分配权限的更多信息,请参阅《IAM 用户指南》中的添加和移除 IAM 身份权限

  4. 创建 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(附加组件)。

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

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

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

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

  5. 选择要添加到集群的附加组件。您可以根据需要添加任意数量的 Amazon EKS 附加组件AWS Marketplace 附加组件

    对于 AWS Marketplace 附加组件,用于创建附加组件的 IAM 主体必须有权从 AWS LicenseManager 读取附加组件的权限。AWSLicenseManager 需要 AWSServiceRoleForAWSLicenseManagerRole 服务相关角色(SLR),该角色允许 AWS 资源代表您管理许可证。SLR 是每个账户的一次性要求,您无需为每个附加组件或每个集群创建单独的 SLR。有关向 IAM 主体分配权限的更多信息,请参阅《IAM 用户指南》中的添加和移除 IAM 身份权限

    如果未列出要安装的 AWS Marketplace 附加组件,则可以通过在搜索框中输入文本来搜索可用的附加组件。在筛选选项中,您也可以按类别供应商定价模式进行搜索,然后从搜索结果中选择附加组件。选择要安装的附加组件后,选择 Next(下一步)。

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

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

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

    • 如果您选择的所有附加组件在 Status(状态)下都有 Requires subscription(需要订阅)的字样,请选择 Next(下一步)。创建集群后,您在订阅这些附加组件之前无法进一步配置此类附加组件。对于 Status(状态)下没有 Requires subscription(需要订阅)字样的附加组件:

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

      • 选择 Optional configuration settings(可选配置设置)。

        • 如果附加组件需要配置,请在 Configuration values(配置值)框中输入相应的值。要确定附加组件是否需要配置信息,请参阅您正在创建的附加组件的文档

        • Conflict resolution method(冲突解决方法)选择一个可用的选项。

      • 选择下一步

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

  8. 如果您安装的任何附加组件需要订阅,请完成以下步骤:

    1. 选择该附加组件右下角的 Subscribe(订阅)按钮。您将转到该附加组件在 AWS Marketplace 中的页面。阅读有关该附加组件的信息,例如其 Product Overview(产品概述)和 Pricing Information(定价信息)。

    2. 选择附加组件页面右上角的 Continue to Subscribe(继续订阅)按钮。

    3. 通读 Terms and Conditions(条款和条件)。如果您同意这些条款和条件,请选择 Accept Terms(接受条款)。处理订阅可能需要几分钟的时间。在处理订阅时,Return to Amazon EKS Console(返回 Amazon EKS 控制台)按钮将显示为灰色。

    4. 订阅处理完成后,Return to Amazon EKS Console(返回 Amazon EKS 控制台)按钮将不再显示为灰色。选择此按钮返回集群的 Amazon EKS 控制台 Add-ons(附加组件)选项卡。

    5. 对于您已订阅的附加组件,请选择 Remove and reinstall(删除并重新安装),然后选择 Reinstall add-on(重新安装附加组件)。安装该附加组件可能需要几分钟的时间。安装完成后,您可以配置该附加组件。

AWS CLI
先决条件

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

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

    aws eks describe-addon-versions --kubernetes-version 1.30 \ --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output table

    示例输出如下。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------
    |                                                                 DescribeAddonVersions                                                                 |
    +---------------------------------------------------------------+-------------------------------+------------------+--------------+---------------------+
    |                     MarketplaceProductUrl                     |             Name              |      Owner       |  Publisher   |        Type         |
    +---------------------------------------------------------------+-------------------------------+------------------+--------------+---------------------+
    |  None                                                         |  aws-ebs-csi-driver           |  aws             |  eks         |  storage            |
    |  None                                                         |  coredns                      |  aws             |  eks         |  networking         |
    |  None                                                         |  kube-proxy                   |  aws             |  eks         |  networking         |
    |  None                                                         |  vpc-cni                      |  aws             |  eks         |  networking         |
    |  None                                                         |  adot                         |  aws             |  eks         |  observability      |
    |  https://aws.amazon.com/marketplace/pp/prodview-brb73nceicv7u |  dynatrace_dynatrace-operator |  aws-marketplace |  dynatrace   |  monitoring         |
    |  https://aws.amazon.com/marketplace/pp/prodview-uhc2iwi5xysoc |  upbound_universal-crossplane |  aws-marketplace |  upbound     |  infra-management   |
    |  https://aws.amazon.com/marketplace/pp/prodview-hd2ydsrgqy4li |  teleport_teleport            |  aws-marketplace |  teleport    |  policy-management  |
    |  https://aws.amazon.com/marketplace/pp/prodview-vgghgqdsplhvc |  factorhouse_kpow             |  aws-marketplace |  factorhouse |  monitoring         |
    |  [...]                                                        |  [...]                        |  [...]           |  [...]       |  [...]              |
    +---------------------------------------------------------------+-------------------------------+------------------+--------------+---------------------+

    您的输出可能会有所不同。在此输出示例中,有三个不同的 networking 类型的附加组件和五个发布者类型为 eks 的附加组件。Owner 列中值为 aws-marketplace 的附加组件可能需要订阅才能安装。您可以访问相应的 URL 以了解有关该附加组件的更多信息并进行订阅。

  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 服务账户的名称。您可以在文档中或使用 AWS 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 选项。如果您不希望 AWS 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如果您创建的附加组件在前面步骤的 Owner 列中的值为 aws-marketplace,那么创建可能会失败,您可能会收到与以下错误类似的错误消息。

    { "addon": { "addonName": "addon-name", "clusterName": "my-cluster", "status": "CREATE_FAILED", "addonVersion": "version", "health": { "issues": [ { "code": "AddonSubscriptionNeeded", "message": "You are currently not subscribed to this add-on. To subscribe, visit the AWS Marketplace console, agree to the seller EULA, select the pricing type if required, then re-install the add-on" [...]

    如果您收到的错误与之前输出中的错误类似,请访问前面步骤的输出中的 URL,以订阅附加组件。订阅后,再次运行 create-addon 命令。

更新附加组件

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

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

eksctl
先决条件

您的设备或 AWS 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 替换为集群所在的 AWS 区域。

      • 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(附加组件)。

AWS Management Console
使用 AWS 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. 选择更新

AWS CLI
先决条件

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

使用 AWS 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 选项指定为 AWS CLI,则关联将被保留。

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

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

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

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

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

eksctl
先决条件

您的设备或 AWS 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
AWS Management Console
使用 AWS 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(删除)。

AWS CLI
先决条件

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

使用 AWS 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 版本。

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

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

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

  4. 使用 AWS 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 兼容。