创建 Amazon EKS 附加组件 - Amazon EKS

帮助改进此页面

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

创建 Amazon EKS 附加组件

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

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

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

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

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

先决条件

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

过程

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

eksctl
使用 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 附加组件。复制该命令并替换 user-data,如下所示:

    • 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. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

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

  3. 选择要为其创建此附加组件的集群名称。

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

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

  6. Select add-ons(选择附加组件)页面上,选择要添加到集群的附加组件。您可以根据需要添加任意数量的 Amazon EKS 附加组件AWS Marketplace 附加组件

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

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

  7. 配置选定的附加组件设置页面上,执行以下操作:

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

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

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

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

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

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

      4. 对于冲突解决方法,请选择一个可用的选项。如果对于冲突解决方法,您选择了覆盖,则可能会用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项,并且与现有设置存在冲突,则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。

      5. 选择下一步

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

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

    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 命令。