y-ohgi's blog

TODO: ここになにかかく

EKS Auto Modeでアプリケーションを動かす

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