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

时间:2020-05-11 07:37:40

标签: amazon-web-services kubernetes amazon-vpc amazon-eks 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创建的群集进行就地升级?谢谢。

2 个答案:

答案 0 :(得分:1)

我正在调查与您完全相同的问题。

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

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

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

第二,如this GitHub issueeksctl document中提到的,到目前为止eksctl upgrade nodegroup仅用于升级托管版本强> 节点组。

很遗憾,您必须创建一个新的节点组来应用您的更改、迁移您的工作负载/将您的流量切换到新的节点组并停用旧的。在您的情况下,没有必要取消整个集群并重新创建。

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

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

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

但是,不要失去希望。 active issue 中的 eksctl GitHub repository 已提交以添加 eksctl apply 选项。在这个阶段,它还没有发布。如果这能成真,那就太好了。

答案 1 :(得分:0)

要使用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