插件 - Eksctl 用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

插件

本主题介绍如何使用 eksctl 管理亚马逊 EKS 集群的 Amazon EKS 插件。EKS Add-Ons 是一项允许您通过 EKS API 启用和管理 Kubernetes 操作软件的功能,从而简化了安装、配置和更新集群插件的过程。

警告

eksctl 现在将默认插件(vpc-cni、coredns、kube-proxy)安装为 EKS 插件,而不是自行管理的插件。这意味着对于使用 eksctl v0.184.0 及更高版本创建的集群,您应该使用eksctl update addon而不是eksctl utils update-*命令。

当你想使用 Cilium 和 Calico 等其他 CNI 插件时,可以在没有任何默认网络插件的情况下创建集群。

EKS 插件现在支持通过 EKS Pod Identity Associations 接收 IAM 权限,允许他们连接集群外的 AWS 服务

创建插件

Eksctl 为管理集群插件提供了更大的灵活性:

在配置文件中,您可以指定所需的插件以及(如果需要)要附加到这些插件的一个或多个策略:

apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: example-cluster region: us-west-2 iam: withOIDC: true addons: - name: vpc-cni # all below properties are optional version: 1.7.5 tags: team: eks # you can specify at most one of: attachPolicyARNs: - arn:aws:iam::account:policy/AmazonEKS_CNI_Policy # or serviceAccountRoleARN: arn:aws:iam::account:role/AmazonEKSCNIAccess # or attachPolicy: Statement: - Effect: Allow Action: - ec2:AssignPrivateIpAddresses - ec2:AttachNetworkInterface - ec2:CreateNetworkInterface - ec2:DeleteNetworkInterface - ec2:DescribeInstances - ec2:DescribeTags - ec2:DescribeNetworkInterfaces - ec2:DescribeInstanceTypes - ec2:DetachNetworkInterface - ec2:ModifyNetworkInterfaceAttribute - ec2:UnassignPrivateIpAddresses Resource: '*'

您最多可以指定一个attachPolicyattachPolicyARNsserviceAccountRoleARN

如果未指定这些策略,则将使用附加所有推荐策略的角色创建插件。

注意

要将策略附加到插件,您的集群必须已OIDC启用。如果未启用,我们将忽略任何附加的政策。

然后,你可以在集群创建过程中创建以下插件:

eksctl create cluster -f config.yaml

或者在集群创建后使用配置文件或 CLI 标志显式创建插件:

eksctl create addon -f config.yaml
eksctl create addon --name vpc-cni --version 1.7.5 --service-account-role-arn <role-arn>

在创建插件期间,如果集群上已经存在插件的自我管理版本,则可以通过配置文件设置resolveConflicts选项来选择如何解决潜在的configMap冲突,例如

addons: - name: vpc-cni attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy resolveConflicts: overwrite

对于插件创建,该resolveConflicts字段支持三个不同的值:

列出已启用的插件

你可以通过运行以下命令来查看集群中启用了哪些插件:

eksctl get addons --cluster <cluster-name>

eksctl get addons -f config.yaml

设置插件的版本

设置插件的版本是可选的。如果该version字段留空,eksctl将解析插件的默认版本。有关哪个版本是特定插件的默认版本的更多信息,可以在有关 EKS 的 AWS 文档中找到。请注意,默认版本不一定是可用的最新版本。

插件版本可以设置为。latest或者,也可以使用指定的 EKS 构建标签来设置版本,例如v1.7.5-eksbuild.1v1.7.5-eksbuild.2。也可以将其设置为插件的发行版本,例如v1.7.51.7.5eksbuild后缀标签将被发现并为您设置。

有关如何发现可用插件及其版本的信息,请参阅以下部分。

发现插件

你可以通过运行以下命令来发现哪些插件可以安装在你的集群上:

eksctl utils describe-addon-versions --cluster <cluster-name>

这将发现你的集群的 kubernetes 版本并对其进行过滤。或者,如果你想查看特定的 kubernetes 版本有哪些插件可用,你可以运行:

eksctl utils describe-addon-versions --kubernetes-version <version>

您还可以通过筛选插件来发现插件。type owner and/or publisher例如,要查看特定所有者和类型的插件,你可以运行:

eksctl utils describe-addon-versions --kubernetes-version 1.22 --types "infra-management, policy-management" --owners "aws-marketplace"

typesownerspublishers flags 是可选的,可以一起指定,也可以单独指定以筛选结果。

发现插件的配置架构

发现插件和版本后,您可以通过获取其 JSON 配置架构来查看自定义选项。

eksctl utils describe-addon-configuration --name vpc-cni --version v1.12.0-eksbuild.1

这将返回此插件可用的各种选项的 JSON 架构。

使用配置值

ConfigurationValues可以在创建或更新插件期间在配置文件中提供。仅支持 JSON 和 YAML 格式。

例如。 ,

addons: - name: coredns configurationValues: |- replicaCount: 2
addons: - name: coredns version: latest configurationValues: "{\"replicaCount\":3}" resolveConflicts: overwrite
注意

请记住,修改插件配置值时,会出现配置冲突。

Thus, we need to specify how to deal with those by setting the `resolveConflicts` field accordingly. As in this scenario we want to modify these values, we'd set `resolveConflicts: overwrite`.

此外,get 命令现在也将检索ConfigurationValues插件。例如

eksctl get addon --cluster my-cluster --output yaml
- ConfigurationValues: '{"replicaCount":3}' IAMRole: "" Issues: null Name: coredns NewerVersion: "" Status: ACTIVE Version: v1.8.7-eksbuild.3

更新插件

您可以通过运行以下命令将插件更新到新版本并更改附加的政策:

eksctl update addon -f config.yaml
eksctl update addon --name vpc-cni --version 1.8.0 --service-account-role-arn <new-role>

与创建插件类似,在更新插件时,您可以完全控制之前可能在该插件上应用的配置更改。configMap具体而言,您可以保留或覆盖它们。此可选功能可通过相同的配置文件字段获得resolveConflicts。例如,

addons: - name: vpc-cni attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy resolveConflicts: preserve

对于插件更新,该resolveConflicts字段接受三个不同的值:

  • none-EKS 不会更改该值。更新可能会失败。

  • overwrite-EKS 会将所有配置更改改回 EKS 默认值。

  • preserve-EKS 会保留该值。如果您选择此选项,我们建议您在更新生产集群上的插件之前,先在非生产集群上测试任何字段和值的更改。

删除插件

你可以通过运行以下命令删除插件:

eksctl delete addon --cluster <cluster-name> --name <addon-name>

这将删除插件以及与之关联的任何 IAM 角色。

当您删除集群时,与插件关联的所有 IAM 角色也会被删除。

为默认网络插件灵活创建集群

创建集群后,EKS 会自动安装 VPC CNI、CoreDNS 和 kube-proxy 作为自管插件。为了禁用此行为以使用其他 CNI 插件,例如 Cilium 和 Calico,eksctl 现在支持创建没有任何默认网络插件的集群。要创建这样的集群,请进行设置addonsConfig.disableDefaultAddons,如下所示:

addonsConfig: disableDefaultAddons: true
eksctl create cluster -f cluster.yaml

要创建只有 CoreDNS 和 kube-proxy 而不是 VPC CNI 的集群,请在中明确指定并设置插件,如下所示:addonsaddonsConfig.disableDefaultAddons

addonsConfig: disableDefaultAddons: true addons: - name: kube-proxy - name: coredns
eksctl create cluster -f cluster.yaml

作为此更改的一部分,如果未addonsConfig.disableDefaultAddons明确设置为 true,eksctl 现在会在集群创建期间将默认插件安装为 EKS 插件,而不是自行管理的插件。因此,不能再使用eksctl utils update-*命令更新使用 eksctl v0.184.0 及更高版本创建的集群的插件:

  • eksctl utils update-aws-node

  • eksctl utils update-coredns

  • eksctl utils update-kube-proxy

相反,现在eksctl update addon应该使用。

要了解更多信息,请参阅 Amazon EKS 为联网插件引入了集群创建灵活性