AWS EKSに入門してみたのでメモ。
自分はGCP GKEをライトユーザーという感じで利用していた。 クローラが取得した画像を解析するweb API(Nodeのオートスケールにも対応)を構築して運用していた経験があるが、そのほかはCloud Composerなどを介して触ったり、大規模バッチ処理をJob機能で動かす技術検証を少ししていたくらい。
EKSクラスターの作成
AWS公式のeksctlコマンドを使うと簡単にEKSクラスターを作成できる。
このコマンドはGKEのgcloud container clusters create
相当。
$ eksctl create cluster
クラスターの作成が完了したら下記コマンドでクラスター名を取得できる。
$ eksctl get cluster
NAME REGION EKSCTL CREATED
wonderful-rainbow-1613008907 ap-northeast-1 True
クラスターさえ作成できてしまえば、その後の操作の多くはK8sを管理するコマンドkubectl
が担ってくれるため、GKEかEKSかを意識しないといけないシーンは大きく減る。
とりあえず、 kubectl コマンドがこのクラスターにアクセスしているかを確認するとうまく動いていた。
$ kubectl get nodes
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-45-221.ap-northeast-1.compute.internal Ready <none> 65m v1.18.9-eks-d1db3c
ip-192-168-70-250.ap-northeast-1.compute.internal Ready <none> 65m v1.18.9-eks-d1db3c
もし違うクラスターにアクセスしている場合は kubectl が利用する認証情報を更新する必要がある。
これは次のように aws eks update-kubeconfig で行う。
このコマンドはGKEのgcloud container clusters get-credentials
相当。
# 違うクラスターへアクセスしている
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready master 21d v1.19.3
$ aws eks update-kubeconfig --name wonderful-rainbow-1613008907
Added new context arn:aws:eks:ap-northeast-1:123456789:cluster/wonderful-rainbow-1613008907 to /Users/rhoboro/.kube/config
# EKSのクラスターにアクセスしている
$ kubectl get nodes
kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-192-168-45-221.ap-northeast-1.compute.internal Ready <none> 65m v1.18.9-eks-d1db3c
ip-192-168-70-250.ap-northeast-1.compute.internal Ready <none> 65m v1.18.9-eks-d1db3c
これで無事 kubectl コマンドが利用できるようになった。 これ以降はK8sを使ったことがあれば迷うことは少ないはず。
webコンソール上での表示
GKEのときはwebコンソール画面からポチポチしてGKEクラスターを作ることも多かったため、EKSでもwebコンソールを確認してみたがなんとNode一覧が表示されなかった。
調べてみると、EKSクラスターの初期状態ではクラスターを作成したユーザーのみがそのクラスターにアクセスできるようになっているらしい。
自分はawsコマンド用にCLI専用のユーザーを用意している。 そのため、webコンソールでアクセスしているのは必然的に非クラスター作成アカウントになる。 したがって、強い権限を持っているからといってもNodeが表示されることはなかった。
ということで、 system:masters グループに自分がwebコンソールのアクセスに利用しているアカウントを追加した。
# 現在の設定を確認
$ eksctl get iamidentitymapping --cluster wonderful-rainbow-1613008907
ARN USERNAME GROUPS
arn:aws:iam::123456789:role/eksctl-wonderful-rainbow-16130089-NodeInstanceRole-1COHYLVD2TC7P system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
# 自分のユーザーをsystem:mastersグループに追加
$ eksctl create iamidentitymapping \
--cluster wonderful-rainbow-1613008907 \
--arn arn:aws:iam::123456789:user/ReiSuyama \
--username ReiSuyama \
--group system:masters
# 追加されていることを確認
$ eksctl get iamidentitymapping --cluster wonderful-rainbow-1613008907
ARN USERNAME GROUPS
arn:aws:iam::123456789:role/eksctl-wonderful-rainbow-16130089-NodeInstanceRole-1COHYLVD2TC7P system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
arn:aws:iam::123456789:user/ReiSuyama ReiSuyama system:masters
これにより、無事webコンソールでもNodeの一覧が表示されるようになった。
クラスターの削除
EKSやGKEでクラスターを維持するのは無視できない金額がかかるため、一時的な利用なら忘れずに削除することが大切。
EKSなら下記のようにクラスターを削除できる。
このコマンドはGKEのgcloud container clusters delete
相当。
$ eksctl delete cluster --name wonderful-rainbow-1613008907