eksctl で AMI を指定してノードグループを作成する

※この記事は 2021/4/14 現在の情報です。適時最新の情報を取得するようにしてください。

EKS クラスターのバージョン 1.18 から 1.19 に更新をおこなった際使用していたマネージドノードグループも更新をするのですがEKSのマネージドノードの更新は eksctl upgrade nodegroup コマンドを使用した際に EKS に最適化された最新の AMI を使用します。 Node に対して Pod が40台前後スケジュールされると Node のステータスが NotReady になる現象が起きていて困っていました。

https://github.com/awslabs/amazon-eks-ami/issues/648

この Github の issue をみていると一つ前の世代のバージョンの AMI を使用することで問題の回避ができそうだったので eksctl を使用して AMI を指定したノードグループの作成の方法を記事にしようと思います。

前提知識

今回の記事は前提の知識として以下のものを要求します。

  • AWS 及び EKS の基本的な知識
  • kubernetes の Node や Pod というものについての簡単な知識
  • eksctl コマンドについて知っている

環境

筆者の環境は以下のような形になっています。 必ずしも揃える必要はないです。

$ eksctl version
0.43.0

今回は kubectl などは使わないので特に触れません。

実際のコード

実際のコード設定はこのようになります。

今回は AMI を amazon-eks-node-1.19-v20210322 のものに指定してノードグループを作成したいと思います。

あくまでサンプルで実際に使用する際にはご自身の要件に合わせて設定してください。

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: test-cluster
  region: ap-northeast-1
  version: "1.19"

managedNodeGroups:
  - name: test-managed-ng
    desiredCapacity: 2
    ami: ami-09260ed97289b9a8d # amazon-eks-node-1.19-v20210322
    minSize: 2
    maxSize: 2
    instanceType: t3.small
    volumeSize: 20
    privateNetworking: true
    iam:
      instanceRoleARN: "<your role arn>"
    overrideBootstrapCommand: |
      #!/bin/bash
      /etc/eks/bootstrap.sh test-cluster --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=test-managed-ng,eks.amazonaws.com/nodegroup-image=ami-09260ed97289b9a8d'

特に AMI などを指定しないと eksctl で作成されるノードグループは最新の AMI を Launch Template に指定して起動します。 そこを overrideBootstrapCommand を使用することで指定の AMI でノードグループを追加することができます。

コマンド自体は同じように eksctl コマンドで実行してもらえれば大丈夫です。

$ eksctl create nodegroup -f cluster.yaml

非常に簡単に作成することができましたが初見だとドキュメントも薄くなかなかつまづく部分も多かったので記事にしました。 実際にはカスタム AMI を作成して起動時に色々な処理をさせることなどができると思うのですが今回は単純に AMI のバージョンを指定したかっただけなのでこのような記事の構成になりました。

また今回の EKS の問題もすぐに修正版がリリースされそうなので特に今後、使うことはないかもしれません。。。

もし今EKSを更新してつまづいてしまっていたらこの記事が一つの参考になれば幸いです。