View a markdown version of this page

插件 - Eksctl 用户指南

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

插件

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

警告

从 eksctl v0.184.0(以及 metrics-server 的 v0.201.0)开始,eksctl 将默认插件(vpc-cni、coredns、kube-proxy、metrics-server)安装为 EKS 插件,而不是自行管理的插件。这意味着你应该使用eksctl update addon而不是eksctl utils update-*命令。

当你想使用替代 CNI 插件(如 Cilium 和 Calico)时,你可以创建没有任何默认网络插件的集群。

EKS Add-ons 现在支持通过 EKS Pod 身份协会接收 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: '*'

您最多可以指定attachPolicyattachPolicyARNs和中的一个serviceAccountRoleARN

如果未指定任何一项,则创建插件时将使用附加所有推荐策略的角色。

注意

要将策略附加到插件,您的集群必须已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>
eksctl create addon --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'
提示

使用该--namespace-config标志将插件部署到自定义命名空间而不是默认命名空间。

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

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

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

  • none-EKS 不会更改值。创建可能会失败。

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

  • preserve-EKS 不会更改值。创建可能会失败。(与更新插件类似none,但不同preserve于更新插件)。

列出已启用的插件

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

eksctl get addons --cluster <cluster-name>

或者

eksctl get addons -f config.yaml

设置插件的版本

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

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

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

发现插件

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

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标志是可选的,可以一起指定或单独指定以筛选结果。

发现插件的配置架构

发现插件和版本后,您可以通过获取其 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

使用自定义命名空间

在创建插件期间,可以在配置文件中提供自定义命名空间。一旦创建了插件,命名空间就无法更新。

使用配置文件

addons: - name: aws-ebs-csi-driver version: latest namespaceConfig: namespace: custom-namespace

使用 CLI 标志

或者,您可以使用--namespace-config标志指定自定义命名空间:

eksctl create addon --cluster my-cluster --name aws-ebs-csi-driver --namespace-config 'namespace=custom-namespace'

get 命令还将检索插件的命名空间值

- ConfigurationValues: "" IAMRole: "" Issues: null Name: aws-ebs-csi-driver NamespaceConfig: namespace: custom-namespace NewerVersion: "" PodIdentityAssociations: null Status: ACTIVE Version: v1.47.0-eksbuild.1

更新插件

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

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

一旦创建了插件,命名空间配置就无法更新。该--namespace-config标志仅在插件创建期间可用。

与创建插件类似,更新插件时,您可以完全控制之前可能应用于该插件的配置更改。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 的集群,请在中addons明确指定插件并进行设置,如下所示:addonsConfig.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 为联网插件引入了集群创建灵活性