EksCtl :通过群集配置文件更新节点定义不起作用



我正在使用eksctl来创建我们的EKS集群。

对于第一次运行,效果很好,但如果我想在将来晚些时候升级cluster-config,它不起作用。

我有一个cluster-config文件,但对它所做的任何更改都不会通过update/upgrade命令反映出来。

我错过了什么?

Cluster.yaml :

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata: 
name: supplier-service
region: eu-central-1
vpc:
subnets:
public: 
eu-central-1a: {id: subnet-1}
eu-central-1b: {id: subnet-2}
eu-central-1c: {id: subnet-2}
nodeGroups:
- name: ng-1
instanceType: t2.medium
desiredCapacity: 3
ssh: 
allow: true
securityGroups:
withShared: true
withLocal: true
attachIDs: ['sg-1', 'sg-2']
iam:
withAddonPolicies:
autoScaler: true

现在,如果将来我想对 instance.type 或副本进行更改,我必须销毁整个集群并重新创建......这变得非常麻烦。

如何使用EksCtl创建的群集进行就地升级?谢谢。

我正在研究与您的完全相同的问题。

在对互联网进行了大量搜索后,我发现尚无法在 EKS 中就地升级您现有的节点组。

首先,eksctl update已被弃用。当我执行eksctl upgrade --help时,它给出了这样的警告:

DEPRECATED: use 'upgrade cluster' instead. Upgrade control plane to the next version.

其次,如本 GitHub 问题和 eksctl 文档中所述,到目前为止,eksctl upgrade nodegroup仅用于升级托管节点组的版本

因此,不幸的是,您必须创建一个新的节点组来应用更改,迁移工作负载/将流量切换到新节点组并停用旧节点组。在您的情况下,没有必要对整个集群进行核弹并重新创建。

如果您正在寻求以最短/零停机时间进行无缝升级/迁移,我建议您尝试托管节点组,其中工作负载的正常排出似乎很有希望:

Node updates and terminations gracefully drain nodes to ensure that your applications stay available.

注意:在上面的配置文件中,如果您指定nodeGroups而不是managedNodeGroups,则将置备非托管节点组。

但是,不要失去希望。eksctl GitHub 存储库中已提交一个活动问题以添加eksctl apply选项。现阶段尚未发布。如果这成真,那就太好了。

要使用 eksctl 升级集群,请执行以下操作:

  1. 升级控制平面版本
  2. 升级 coredns、kube-proxy 和 aws-node
  3. 升级工作器节点

如果您只想更新节点组并保持相同的配置,则只需更改节点组名称,例如将 -v2 附加到名称中。[0]

如果要更改节点组配置"实例类型",只需创建一个新的节点组:eksctl create nodegroup --config-file=dev-cluster.yaml[1]

[0] https://eksctl.io/usage/cluster-upgrade/#updating-multiple-nodegroups-with-config-file

[1] https://eksctl.io/usage/managing-nodegroups/#creating-a-nodegroup-from-a-config-file