TL;DR
- AWS EKSの新しいクラスターモード「EKS Auto Mode」を試す
- 既存のEKSがなるべくプレーンなk8sであるのと異なり、Forkされたk8sを提供してくれている
About
今までのEKSはプレーンなk8sの上にアドオンをインストールする形で作成をしてきた。
それを今回のアップデートでよりマネージドなk8sを使用する選択肢を提供してくれるようになった。
Announcing Amazon EKS Auto Mode - AWS
How to
Run workloads in EKS Auto Mode clusters - Amazon EKS
EKSの作成
GUI上から作成。
デフォルトのIAMを見てみると最初からELBの作成ポリシーが付いている。
EKSクラスターの作成に10分ほどかかった。
接続情報の設定
接続情報の取得
aws eks update-kubeconfig --region ap-northeast-1 --name <CLUSTER_NAME>
nodeとnodepoolの確認
デフォルトだと general-purpose
というものが作成され使用することが可能。
自前でnodepoolを作成しなくてもこれを使えばOKという形で、EKS作成時点は0台。
$ kubectl get nodepools NAME NODECLASS NODES READY AGE general-purpose default 0 True 20m system default 0 True 20m
Deploymentの作成
01-namespace.yaml
apiVersion: v1 kind: Namespace metadata: name: game-2048
02-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 5 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 resources: requests: cpu: "0.5"
kubectl apply -f 01-namespace.yaml kubectl apply -f 02-deployment.yaml
$ kubectl get pod,deploy -n game-2048 NAME READY STATUS RESTARTS AGE pod/deployment-2048-98ddb8c75-94sfj 1/1 Running 0 2m19s pod/deployment-2048-98ddb8c75-9gsfd 1/1 Running 0 2m19s pod/deployment-2048-98ddb8c75-lpg64 1/1 Running 0 2m19s pod/deployment-2048-98ddb8c75-smd6h 1/1 Running 0 2m19s pod/deployment-2048-98ddb8c75-xkvpd 1/1 Running 0 2m19s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/deployment-2048 5/5 5 5 2m19s
Deploymentを作成するとEKS作成時に選択したVPC上にnodeが1台立ち上がる(GUIから確認したところ c5a.xlarge
が立ち上がった)。
$ kubectl get nodepools NAME NODECLASS NODES READY AGE general-purpose default 1 True 23m
$ kubectl get node NAME STATUS ROLES AGE VERSION i-0cef3add0e01a4079 Ready <none> 2m30s v1.31.1-eks-1b3e656
クリーンアップ
namespaceごと削除
kubectl delete -f 01-namespace.yaml
一定時間後にNodeを確認してみると0台にスケールインしていることを確認できた。
$ kubectl get nodepool NAME NODECLASS NODES READY AGE general-purpose default 0 True 42m system default 0 True 42m