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

Amazon EKS 附加组件

附加组件是为 Kubernetes 应用程序提供辅助操作功能的软件,但并不特定于应用程序。这包括可观测性代理或 Kubernetes 驱动程序等软件,这些软件允许集群与用于联网、计算和存储的底层 Amazon 资源进行交互。附加组件软件通常由 Kubernetes 社区、Amazon 等云提供商或第三方供应商构建和维护。Amazon EKS 会自动为每个集群安装自我管理的附加组件,例如 Amazon VPC CNI plugin for Kubernetes、kube-proxy 和 CoreDNS。您可以更改附加组件的默认配置并在需要时加以更新。

Amazon EKS 附加组件为 Amazon EKS 集群的一组经策管附加组件提供安装和管理。Amazon EKS 附加组件包含最新的安全补丁、错误修复,并经 Amazon 验证能够与 Amazon EKS 一起使用。Amazon EKS 附加组件允许您始终如一地确保您的 Amazon EKS 集群安全稳定,并减少您在安装、配置和更新上所需执行的工作量。如果是类似于 kube-proxy 的自我管理附加组件,若已在您的集群上运行并且可作为 Amazon EKS 附加组件使用,那么您便可以安装 kube-proxy Amazon EKS 加载项开始享受 Amazon EKS 附加组件的功能所带来的益处。

您可以通过 Amazon EKS API 为 Amazon EKS 附加组件更新特定的 Amazon EKS 托管配置字段。在附加组件启动后,您还可以直接在 Kubernetes 集群中修改并非由 Amazon EKS 管理的配置字段,包括在适用时为附加组件定义特定的配置字段。Amazon EKS 不会覆盖您所做的这些更改。使用 Kubernetes 服务器端应用功能可以实现这一点。有关更多信息,请参阅 Kubernetes 字段管理

您可以将 Amazon EKS 附加组件与任何 Amazon EKS 节点类型配合使用。

注意事项
  • 要为集群配置附加组件,您的 IAM 主体必须具有 IAM 权限,以使用附加组件。如需了解更多信息,请参阅 Amazon Elastic Kubernetes Service 定义的操作 中的名称中带有 Addon 的操作。

  • Amazon EKS 附加组件能在您为集群预置或配置的节点上运行。节点类型包括 Amazon EC2 实例和 Fargate。

  • 您可以修改并非由 Amazon EKS 管理的字段以自定义 Amazon EKS 附加组件的安装。有关更多信息,请参阅 Kubernetes 字段管理

  • 如果您使用 Amazon Web Services Management Console 创建集群,则 Amazon EKS kube-proxy、Amazon VPC CNI plugin for Kubernetes 和 CoreDNS Amazon EKS 附加组件会自动添加到您的集群中。如果您借助 eksctl 使用 config 文件创建集群,则 eksctl 还可以使用 Amazon EKS 附加组件创建集群。如果使用不带有 config 文件的 eksctl 或使用任何其他工具创建集群,则自我管理的 kube-proxy、Amazon VPC CNI plugin for Kubernetes 和 CoreDNS 附加组件将会安装,而不会安装 Amazon EKS 附加组件。您可以自行管理,也可以在集群创建后手动添加 Amazon EKS 附加组件。

  • eks:addon-cluster-admin ClusterRoleBindingcluster-admin ClusterRole 绑定到 eks:addon-manager Kubernetes 身份。该角色拥有 eks:addon-manager 身份所需的权限,可以创建 Kubernetes 命名空间并将附加组件安装到命名空间中。如果删除 eks:addon-cluster-admin ClusterRoleBinding,Amazon EKS 集群将继续运行,但 Amazon EKS 将无法再管理任何附加组件。以下平台版本开头的所有集群都使用新的 ClusterRoleBinding

    Kubernetes 版本 EKS 平台版本
    1.20 eks.12
    1.21 eks.14
    1.22 eks.9
    1.23 eks.5
    1.24 eks.3

您可以使用 Amazon EKS API、Amazon Web Services Management Console、Amazon CLI 和 eksctl 添加、更新或删除 Amazon EKS 附加组件。有关更多信息,请参阅 管理 Amazon EKS 附加组件。您也可以使用 Amazon CloudFormation 创建 Amazon EKS 附加组件。

Amazon EKS 提供的可用 Amazon EKS 附加组件

可在您的集群上创建以下 Amazon EKS 附加组件。您可以随时使用 eksctl、Amazon Web Services Management Console 或 Amazon CLI 查看可用附加组件的最新列表。要查看所有可用附加组件或安装附加组件,请参阅 创建附加组件。如果附加组件需要 IAM 权限,则集群必须具有 IAM OpenID Connect(OIDC)提供商。要确定是否具有一个提供商,还是创建一个提供商,请参阅 为集群创建 IAM OIDC 提供商。安装附加组件后,您可以对其进行更新删除

选择一个附加组件以了解有关该附加组件及其安装要求的更多信息。

  • 名称vpc-cni

  • 描述 – 为集群提供本机 VPC 联网的 Kubernetes 容器网络接口(CNI)插件。默认情况下,在每个 Amazon EC2 节点上安装自行管理的或托管类型的附加组件。

  • 必需的 IAM 权限 – 此附加组件使用 Amazon EKS 的服务账户的 IAM 角色功能。如果集群使用 IPv4 系列,则需要 AmazonEKS_CNI_Policy 中的权限。如果集群使用 IPv6 系列,则必须使用 IPv6 模式中的权限创建 IAM 策略。您可以创建 IAM 角色,将其中一个策略附加到该角色,并使用以下命令为附加组件使用的 Kubernetes 服务账户添加注释。

    my-cluster 替换为您的集群的名称,并将 AmazonEKSVPCCNIRole 替换为您的角色的名称。如果集群使用 IPv6 系列,则将 AmazonEKS_CNI_Policy 替换为您创建的策略名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色、将策略附加到该角色并为 Kubernetes 服务账户添加注释,请参阅 配置 Kubernetes 服务账户以分派 IAM 角色

    eksctl create iamserviceaccount --name aws-node --namespace kube-system --cluster my-cluster --role-name AmazonEKSVPCCNIRole \ --role-only --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy --approve
  • 其他信息 – 要了解有关附加组件可配置设置的更多信息,请参阅 GitHub 上的 aws-vpc-cni-k8s。要了解有关插件的更多信息,请参阅提议:通过 Amazon VPC 进行 Kubernetes 联网的 CNI 插件。有关如何创建附加组件的更多信息,请参阅 创建 Amazon EKS 附加组件

  • 更新信息 – 您一次只能更新一个次要版本。例如,如果当前版本为 1.27.x-eksbuild.y,并且您想要更新到 1.29.x-eksbuild.y,则必须首先更新到 1.28.x-eksbuild.y,再更新到 1.29.x-eksbuild.y。有关更新附加组件的更多信息,请参阅 更新 Amazon EKS 附加组件

  • 名称coredns

  • 描述 – 一个灵活、可扩展的 DNS 服务器,可用作 Kubernetes 集群 DNS。默认情况下,创建集群时会安装自行管理或托管类型的附加组件。当您启动具有至少一个节点的 Amazon EKS 集群时,无论集群中部署的节点数量如何,预设情况下都会部署 CoreDNS 镜像的两个副本。这些 CoreDNS Pods 为集群中的所有 Pods 提供名称解析。如果集群包含命名空间与 CoreDNS deployment 的命名空间相匹配的 Amazon Fargate 配置文件,则可以将 CoreDNS Pods 部署到 Fargate 节点。

  • 所需的 IAM 权限 – 此附加组件不需要任何权限。

  • 其他信息 – 要了解有关 CoreDNS 的更多信息,请参阅 Kubernetes 文档中的 Using CoreDNS for Service Discovery(使用 CoreDNS 进行服务发现)和 Customizing DNS Service(自定义 DNS 服务)。

  • 名称kube-proxy

  • 描述 – 维护每个 Amazon EC2 节点上的网络规则。它可以实现与 Pods 的网络通信。默认情况下,在集群中的每个 Amazon EC2 节点上安装自行管理或托管类型的附加组件。

  • 所需的 IAM 权限 – 此附加组件不需要任何权限。

  • 其他信息 – 要了解有关 kube-proxy 的更多信息,请参阅 Kubernetes 文档中的 kube-proxy

  • 更新信息 – 在更新当前版本之前,请考虑以下要求:

    • Amazon EKS 集群上的 Kube-proxy 具有与 Kubernetes 相同的兼容性和偏斜策略

    • Kube-proxy 必须与您的Amazon EC2 节点上的 kubelet 具有相同的次要版本。

    • Kube-proxy 不能高于集群控制面板的次要版本。

    • Amazon EC2 节点上的 kube-proxy 版本不能比控制面板的版本低两个以上的次要版本。例如,如果您的控制面板正在运行 Kubernetes 1.29,则 kube-proxy 次要版本不能低于 1.27。

    • 如果您最近将集群更新到新的 Kubernetes 次要版本,请将 Amazon EC2 节点更新到相同的次要版本,然后再将 kube-proxy 更新到与节点相同的次要版本。

  • 名称aws-ebs-csi-driver

  • 描述 – 为集群提供 Amazon EBS 存储的 Kubernetes Container Storage Interface(CSI)插件。

  • 必需的 IAM 权限 – 此附加组件使用 Amazon EKS 的服务账户的 IAM 角色功能。AmazonEBSCSIDriverPolicy Amazon 托管策略中的权限是必需的。您可以使用以下命令创建 IAM 角色并将托管策略附加到其上。将 my-cluster 替换为您的集群的名称,并将 AmazonEKS_EBS_CSI_DriverRole 替换为您的角色的名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具或需要使用自定义 KMS 密钥进行加密,请参阅 创建 Amazon EBS CSI 驱动程序 IAM 角色

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
  • 其他信息 – 要了解有关附加组件的更多信息,请参阅 Amazon EBS CSI 驱动程序

重要

Amazon EFS 驱动程序在此 Amazon Web Services 区域中仅支持自行管理安装。有关如何将其添加为自行管理安装的说明,请参阅 GitHub 上的 安装

  • 名称aws-efs-csi-driver

  • 描述 – 为集群提供 Amazon EFS 存储的 Kubernetes 容器存储接口(CSI)插件。

  • 必需的 IAM 权限 – 此附加组件使用 Amazon EKS 的服务账户的 IAM 角色功能。AmazonEFSCSIDriverPolicy Amazon 托管策略中的权限是必需的。您可以使用以下命令创建 IAM 角色并为其附加托管式策略。将 my-cluster 替换为您的集群的名称,并将 AmazonEKS_EFS_CSI_DriverRole 替换为您的角色的名称。这些命令要求您的设备事先安装 eksctl。如果您需要使用其他工具,请参阅 创建 IAM 角色

    export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $role_name \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --approve TRUST_POLICY=$(aws iam get-role --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \ sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/') aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"
  • 其他信息 – 要了解有关附加组件的更多信息,请参阅 Amazon EFS CSI 驱动程序

  • 名称aws-mountpoint-s3-csi-driver

  • 描述:一个 Kubernetes 容器存储接口(CSI)插件,可为集群提供 Amazon S3 存储。

  • 必需的 IAM 权限 – 此附加组件使用 Amazon EKS 的服务账户的 IAM 角色功能。创建的 IAM 角色需要一个允许访问 S3 的策略。创建策略时,请遵循 Mountpoint IAM 权限建议。或者,您可以使用 Amazon 托管策略 AmazonS3FullAccess,但此托管策略授予的权限超出了 Mountpoint 所需的权限。

    您可以使用以下命令创建 IAM 角色,并为其附加策略。将 my-cluster 替换为集群的名称,将 region-code 替换为正确的 Amazon Web Services 区域 代码,将 AmazonEKS_S3_CSI_DriverRole 替换为角色的名称,将 AmazonEKS_S3_CSI_DriverRole_ARN 替换为角色 ARN。这些命令要求您的设备事先安装 eksctl。有关如何使用 IAM 控制台或 Amazon CLI 的说明,请参阅 创建 IAM 角色

    CLUSTER_NAME=my-cluster REGION=region-code ROLE_NAME=AmazonEKS_S3_CSI_DriverRole POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN eksctl create iamserviceaccount \ --name s3-csi-driver-sa \ --namespace kube-system \ --cluster $CLUSTER_NAME \ --attach-policy-arn $POLICY_ARN \ --approve \ --role-name $ROLE_NAME \ --region $REGION \ --role-only
  • 其他信息 – 要了解有关附加组件的更多信息,请参阅 适用于 Amazon S3 的 Mountpoint CSI 驱动程序

  • 名称snapshot-controller

  • 描述:容器存储接口(CSI)快照控制器允许在兼容的 CSI 驱动程序(例如 Amazon EBS CSI 驱动程序)中使用快照功能。

  • 所需的 IAM 权限 – 此附加组件不需要任何权限。

  • 其他信息 – 要了解有关附加组件的更多信息,请参阅 CSI 快照控制器

  • 名称eks-pod-identity-agent

  • 描述:Amazon EKS 容器组身份提供管理应用程序凭证的功能,类似于 Amazon EC2 实例配置文件为 EC2 实例提供凭证的方式。

  • 所需的 IAM 权限:此插件的用户权限来自 Amazon EKS 节点 IAM 角色

  • 更新信息 – 您一次只能更新一个次要版本。例如,如果当前版本为 1.27.x-eksbuild.y,并且您想要更新到 1.29.x-eksbuild.y,则必须首先更新到 1.28.x-eksbuild.y,再更新到 1.29.x-eksbuild.y。有关更新附加组件的更多信息,请参阅 更新 Amazon EKS 附加组件