本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
插件
本主题介绍如何使用 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: '*'
您最多可以指定一个attachPolicy
、attachPolicyARNs
和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>
在创建插件期间,如果集群上已经存在插件的自我管理版本,则可以通过配置文件设置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.5
或1.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"
types
、owners
和 publishers
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 的集群,请在中明确指定并设置插件,如下所示: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 为联网插件引入了集群创建灵活性