<p>I am using <code>eksctl</code> to create our <code>EKS</code> cluster. </p>

<p>For the first run, it works out good, but if I want to upgrade the <code>cluster-config</code> later in the future, it's not working. </p>

<p>I have a <code>cluster-config</code> file with me, but any changes made to it are not reflect with <code>update</code>/<code>upgrade</code> command. </p>

<p>What am I missing?</p>

<p>Cluster.yaml : </p>

<pre><code>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
</code></pre>

<p>Now, if in the future, I would like to make change to instance.type or replicas, I have to destroy entire cluster and recreate...which becomes quite cumbersome. </p>

<p>How can I do in-place upgrades with clusters created by <code>EksCtl</code>? Thank you.</p>

We are Borg
<p>I'm looking into the exact same issue as yours.</p>
<p>After a bunch of searches against the Internet, I found that it is not possible yet to in-place upgrade your existing node group in EKS.</p>
<p>First, <code>eksctl update</code> has become deprecated. When I executed <code>eksctl upgrade --help</code>, it gave a warning like this:</p>
<pre><code>DEPRECATED: use 'upgrade cluster' instead. Upgrade control plane to the next version.
</code></pre>
<p>Second, as mentioned in <a href="https://github.com/weaveworks/eksctl/issues/3006#issuecomment-752903704" rel="nofollow noreferrer">this GitHub issue</a> and <a href="https://eksctl.io/usage/eks-managed-nodes/#upgrading-managed-nodegroups" rel="nofollow noreferrer">eksctl document</a>, up to now the <code>eksctl upgrade nodegroup</code> is used only for upgrading the <strong>version</strong> of <strong>managed</strong> node group.</p>
<p>So unfortunately, you'll have to create a new <strong>node group</strong> to apply your changes, migrate your workload/switch your traffic to new node group and decommission the old one. In your case, it's not necessary to nuke the entire <strong>cluster</strong> and recreate.</p>
<p>If you're seeking for seamless upgrade/migration with minimum/zero down time, I suggest you try <a href="https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html" rel="nofollow noreferrer">managed node group</a>, in which the graceful draining of workload seems promising:</p>
<pre><code>Node updates and terminations gracefully drain nodes to ensure that your applications stay available.
</code></pre>
<p>Note: in your config file above, if you specify <code>nodeGroups</code> rather than <code>managedNodeGroups</code>, an unmanaged node group will be provisioned.</p>
<p>However, don't lose hope. An <a href="https://github.com/weaveworks/eksctl/issues/2774" rel="nofollow noreferrer">active issue</a> in <a href="https://github.com/weaveworks/eksctl" rel="nofollow noreferrer">eksctl GitHub repository</a> has been lodged to add <code>eksctl apply</code> option. At this stage it's not yet released. Would be really nice if this came true.</p>
