[アップデート] EKSがマネジメントコンソールおよびCLIでのワーカーノードの作成・管理をサポートしました

EKS (Elastic Kubernetes Service) で、ワーカーノードの作成・管理がマネジメントコンソールやAWS CLIから行えるようになりました。
2019.11.22

みなさん、こんにちは! AWS事業本部の青柳@福岡オフィスです。

Amazon EKS において、ワーカーノードの作成・管理がマネジメントコンソールやAWS CLIから行えるようになりました。

Amazon EKS adds support for provisioning and managing Kubernetes worker nodes Extending the EKS API: Managed Node Groups | Containers

何が変わったのか?

これまで

今まで、EKSサービスに関して、マネジメントコンソールやAWS CLIで作成・管理できるのは「コントロールプレーン」のみでした。

ワーカーノードを作成する手順として公式に用意されていたのは、AWSから提供されている「ワーカーノード作成用CloudFormationテンプレート」を使用してEC2 Auto Scalingの「Launch Configulation」や「Auto Scaling Group」を作成し、起動したEC2インスタンスをワーカーノードとしてEKSクラスターに組み込むという方法でした。

この手順ですと、コントロールプレーンとワーカーノードを一連の流れで作成することができませんし、また、作成したワーカーノードをマネジメントコンソールの「EKSクラスター」から参照する (管理する) こともできませんでした。

一方、サードパーティが開発・提供している(※) eksctl コマンドラインツールを使用することで、コントロールプレーンとワーカーノードを一連の流れで作成することは可能でした。 (※ eksctlはサードパーティ製ツールではありますが、AWSも開発に参加しており、AWSドキュメントにも使用方法が掲載されています)

ただし、eksctlで作成したワーカーノードは、マネジメントコンソールやAWS CLIで作成した場合と同様に、マネジメントコンソールの「EKSクラスター」から管理することができませんでした。

今回のアップデート後

今回のアップデートによって、以下のようなことが行えるようになりました。

  • マネジメントコンソールの「EKSクラスター」画面から、ワーカーノードを作成できるようになった。
  • 作成したワーカーノードは「EKSクラスター」画面に表示され、管理が行えるようになった。
  • AWS CLIでも aws eks のサブコマンドとして create-nodegroupdescribe-nodegroupupdate-nodegroup-config などが新たに追加され、ワーカーノードの作成や管理が行えるようになった。

これによって、EKSクラスターの構成要素としてのワーカーノードが、より直感的に扱えるようになりました。

試してみた

マネジメントコンソール使用

まず、マネジメントコンソールを使用してワーカーノードを作成してみます。

前提として、VPC環境やEKSコントロールプレーンは作成済みとします。 また、EKSサービスが依存する各種リソースについても、予め作成しておく必要があります。

  • EC2キーペア
  • EKSサービスIAMロール
  • EKSノードIAMロール
  • コントロールプレーンセキュリティグループ
  • ワーカーノードセキュリティグループ

これらのリソースの作成方法については、以下のページなどを参考にしてください。

Amazon EKS サービス IAM ロール - Amazon EKS Amazon EKS ワーカーノード IAM ロール - Amazon EKS クラスターセキュリティグループの考慮事項 - Amazon EKS

では、ワーカーノードを作成します。

作成したコントロールプレーンの画面に「Add node group」ボタンがありますので、クリックします。 (「ノードグループ」は、「ワーカーノード」の集まりの単位です)

必須項目として、以下の項目を入力します。

  • ノードグループの名前
  • ノードIAMロール (前述したように予め作成しておく必要あり)

また、「Allow remote access to nodes」にチェックを入れると、作成したワーカーノードにSSH接続するための情報を指定することができます。

  • EC2キーペア
  • ワーカーノードへ適用するセキュリティグループ

セキュリティグループは、「All」を選択すると、任意のアドレス (0.0.0.0/0) からのTCP/22アクセスを許可するセキュリティグループがデフォルトで作成されます。 「Selected security groups」を選択すると、予め作成したセキュリティグループを適用することができます。

「All」を選択した場合でも、後からセキュリティグループのルールを追加・変更することができますので、ここでは「All」を選択することにします。

「Next」ボタンをクリックして次のステップへ進みます。

EC2インスタンスの諸元を入力します。

  • AMIタイプ
  • インスタンスタイプ
  • ディスクサイズ

「AMIタイプ」は、現時点では「Amazon Linux 2」「Amazon Linux 2 GPU Enabled」のみが選択できます。 選択したタイプによって、EKSクラスターのリージョンやKubernetesバージョンに応じた適切な EKS最適化AMI が選択されます。

「Next」ボタンをクリックして次のステップへ進みます。

Auto Scalingグループの諸元を入力します。

  • 最小ノード数
  • 最大ノード数
  • 希望するノード数 (初期ノード数)

「Next」ボタンをクリックして最後のステップへ進みます。

設定した内容に間違いが無いことを確認して、「作成」をクリックします。

コントロールプレーンの画面に戻ると、ノードグループが作成されています。 (作成完了までしばらく待つ必要があります)

ノードグループ名をクリックすると、ノードグループの情報を参照することができます。

「Edit」ボタンをクリックすると、ノードグループの設定を変更することができます。

現時点で、変更が可能なのは「ノード数 (最小、最大、希望)」および「リソースタグ」「Kubernetesラベル」のみとなっています。

なお、ノードグループは、内部では「Launch Template」と「Auto Scaling Group」によって構成されています。 (以前のCloudFormationを使用した構築手順では「Launch Configulation」でしたので、違いに注意してください) これらのリソースがどのような設定になっているのか、気になる方は確認してみてください。

最後に、作成したノードグループを kubectl コマンドを使用して確認します。

$ kubectl get nodes
NAME                                                 STATUS   ROLES    AGE     VERSION
ip-192-168-110-195.ap-northeast-1.compute.internal   Ready    <none>   2d17h   v1.14.7-eks-1861c5
ip-192-168-186-193.ap-northeast-1.compute.internal   Ready    <none>   2d17h   v1.14.7-eks-1861c5

2つのワーカーノードが作成されていることが確認できました。

AWS CLIを使用

今度は、AWS CLIを使用してワーカーノード (ノードグループ) を作成してみます。

ノードグループを作成するコマンド aws eks create-nodegroup の使い方・オプションは以下リンク先を参照してください。 https://docs.aws.amazon.com/cli/latest/reference/eks/create-nodegroup.html

マネジメントコンソールで作成した時と同様の構成で作成するには、以下のようにオプションを指定します。

aws eks create-nodegroup \
  --cluster-name example-cluster \
  --nodegroup-name nodegroup-2 \
  --scaling-config minSize=2,maxSize=2,desiredSize=2 \
  --disk-size 20 \
  --subnets subnet-XXXXXXXXXXXXXXXXX subnet-XXXXXXXXXXXXXXXXX subnet-XXXXXXXXXXXXXXXXX subnet-XXXXXXXXXXXXXXXXX \
  --instance-types t3.medium \
  --ami-type AL2_x86_64 \
  --remote-access ec2SshKey=eks-workernodes-key \
  --node-role arn:aws:iam::123456789012:role/NodeInstanceRole

AWS CLIで作成したノードグループは、マネジメントコンソールの画面でも確認することができます。

ノードグループに関するコマンドは他に以下のようなものが用意されています。

  • list-nodegroups
  • describe-nodegroup
  • delete-nodegroup
  • update-nodegroup-config
  • update-nodegroup-version

最初の4つは、実際に使ってみて動きを確認してみるとよいでしょう。

最後の update-nodegroup-version コマンドは、ノードグループのEKS-Optimazed AMIのバージョンをアップデートする際に使用します。 (ノードグループのアップデートに関しては、別の機会に試したいと思います)

「eksctl」との関係性

今回のアップデートは、マネジメントコンソールやAWS CLIのみのアップデートではなく、EKSのAPIレベルで実装されたものになっています。 https://docs.aws.amazon.com/eks/latest/APIReference/Welcome.html https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html

これまでEKSの環境構築・管理に使える高機能なツールとして eksctl コマンドが提供されていましたが、eksctlは主にCloudFormationを用いてリソースを作成する手法で実装されており (AWS APIやKubernetes APIも利用されています)、今回のアップデートにeksctlが取り込まれたという訳ではなさそうです。

ただし、eksctl側でも今回のアップデートに対応しており、eksctl create cluster コマンドや eksctl create nodegroup コマンドの実行時に --managed オプションを付与することにより、作成されたノードグループがマネージメントコンソール上で表示・管理できるようになります。 (逆に、--managed を付けなければマネージメントコンソール上で表示・管理ができませんので注意してください)

実行例:

eksctl create cluster \
  --name eksctl-cluster \
  --version 1.14 \
  --nodegroup-name eksctl-nodegroup \
  --node-type t3.large \
  --nodes 2 \
  --nodes-min 2 \
  --nodes-max 2 \
  --managed

おわりに

つい先月、「eksctl」コマンドを使用したEKS環境構築についてご紹介したばかりということもあり、今回のアップデートには正直驚きました。

eksctl コマンドは非常に高機能であり使い方も分かり易いツールですので、現時点ではマネージメントコンソールやAWS CLIを使ってEKS環境を構築するよりもeksctlを使った方が便利な場面も多いかもしれません。

しかし、今回のアップデートがAWS APIレベルで実装されたものであることから、EKSを使う上では押さえておくべきものだと思います。 今後の機能拡充にも期待したいところです。