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.15
    1.22 eks.10
    1.23 eks.6
    1.24 eks.4
    1.25 eks.1

您可以使用 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 policy。您可以创建 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.23.x-eksbuild.y,并且您想要更新到 1.25.x-eksbuild.y,则必须首先更新到 1.24.x-eksbuild.y,再更新到 1.25.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 节点上的网络规则。它可以实现与容器组(pod)的网络通信。默认情况下,在集群中的每个 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.25,kube-proxy 次要版本不能低于 1.23。

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

  • 名称aws-ebs-csi-driver

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

  • 所需的 IAM 权限 – 此附加组件使用 Amazon EKS 的 服务账户的 IAM 角色 功能。您必须使用 GitHub 示例策略中的权限创建 IAM policy。您可以创建 IAM 角色,将其中一个策略附加到该角色,并使用以下命令为附加组件使用的 Kubernetes 服务账户添加注释。将 my-cluster 替换为集群名称,将 AmazonEKS_EBS_CSI_DriverRole 替换为角色名称,并将 AmazonEBSCSIDriverPolicy 替换为您创建的策略名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色、将策略附加到该角色并为 Kubernetes 服务账户添加注释,请参阅 配置 Kubernetes 服务账户以代入 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/AmazonEBSCSIDriverPolicy --approve
  • 其他信息 – 要了解有关驱动程序的更多信息,请参阅 GitHub 上的 Amazon EBS CSI driver(Amazon EBS CSI 驱动程序)。您可以从 GitHub 部署用于测试目的的示例

  • 名称adot

  • 描述Amazon Distro for OpenTelemetry(ADOT)是 OpenTelemetry 项目的安全、受 Amazon 支持的生产就绪型发行版。

  • 所需的 IAM 权限 – 此附加组件使用 Amazon EKS 的 服务账户的 IAM 角色 功能。AmazonPrometheusRemoteWriteAccessAWSXrayWriteOnlyAccessCloudWatchAgentServerPolicy Amazon 托管策略中的权限。您可以创建 IAM 角色,将托管策略附加到该角色,并使用以下命令为附加组件使用的 Kubernetes 服务账户添加注释。将 my-cluster 替换为集群名称,并将 AmazonEKS_ADOT_Collector_Role 替换为角色名称。此命令要求您为您的设备安装 eksctl。如果您需要使用其他工具来创建角色、将策略附加到该角色并为 Kubernetes 服务账户添加注释,请参阅 配置 Kubernetes 服务账户以代入 IAM 角色

    eksctl create iamserviceaccount --name adot-collector --namespace default --cluster my-cluster --role-name "AmazonEKS_ADOT_Collector_Role" \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess \ --attach-policy-arn arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess \ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy --approve
  • 其他信息 – 有关更多信息,请参阅 Amazon Distro for OpenTelemetry 文档中的通过 EKS 附加组件开始使用 Amazon Distro for OpenTelemetry