Edited at

eksctlを使って東京リージョンでEKSを試す

EKS使いたいけど東京リージョンないしなぁと思ってた方は多いんじゃないでしょうか?

Amazon EKS が 東京リージョンに対応しました。

Amazon EKS の使用開始を見ながら何がどうなってるか理解しながら進めるのもいいですが、

eksctlというツールで最速でEKS構築できるようなので早速試してみました。


eksctl インストール

$ brew install weaveworks/tap/eksctl

$ eksctl version
[ℹ] version.Info{BuiltAt:"", GitCommit:"", GitTag:"0.1.15"}


eksctlでクラスタ作成

$ eksctl create cluster \

--name cluster-name \
--region ap-northeast-1 \
--nodes 2 \
--nodes-min 1 \
--nodes-max 2 \
--node-type t2.medium \
--version=1.10 \
--tags environment=staging

10分くらいで完了!


何が作られた?

get cluster で作成されたクラスタとリージョンを確認できます。

$ eksctl get cluster

NAME REGION
cluster-name ap-northeast-1

kubernetesの環境も ~/.kube/config に書き出されていました。

$ cat ~/.kube/config

apiVersion: v1
clusters:
- cluster:
certificate-authority-data: xxxxxxxxxxxxx
server: https://xxxxxxxxxxxxxxxxxxxx.ap-northeast-1.eks.amazonaws.com
name: cluster-name.ap-northeast-1.eksctl.io
...

現在のkubectlの向き先が作成したeks宛に変更されています。

docker-for-mac kubernetesを使っている方は get-contexts で切り替わっている事を確認できます。

$ kubectl config get-contexts

CURRENT NAME CLUSTER
* account@cluster-name.ap-northeast-1.eksctl.io cluster-name.ap-northeast-1.eksctl.io
docker-for-desktop docker-for-desktop-cluster

ちなみに戻す際は use-context コマンドを利用します。

$ kubectl config use-context docker-for-desktop

$ kubectl config use-context account@cluster-name.ap-northeast-1.eksctl.io

実際にimageを動かすワーカーノードが指定した数作られていました。

$ kubectl get nodes

NAME STATUS ROLES AGE VERSION
ip-000-000-000-000.ap-northeast-1.compute.internal Ready <none> 11m v1.10.11
ip-000-000-000-000.ap-northeast-1.compute.internal Ready <none> 11m v1.10.11


aws上では

vpcとサブネットが作られます

https://ap-northeast-1.console.aws.amazon.com/vpc/home?region=ap-northeast-1


  • eksctl-cluster-name-cluster/VPC

cloudformationが作られます

https://ap-northeast-1.console.aws.amazon.com/cloudformation


  • eksctl-cluster-name-nodegroup-0

  • eksctl-cluster-name-cluster

eks クラスタ(マスターノード)が作られます

https://ap-northeast-1.console.aws.amazon.com/eks/home?region=ap-northeast-1#/clusters


  • cluster-name

ec2 インスタンス(ワーカーノード)が作られます

https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home


  • cluster-name-0-Node x2

ec2 セキュリティグループが作られます

https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#SecurityGroups


  • eksctl-cluster-name-nodegroup-0/SG

  • eksctl-cluster-name-cluster/ControlPlaneSecurityGroup


チュートリアルのゲストブックアプリケーションを起動する

Redis マスターレプリケーションコントローラーを作成

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-controller.json

replicationcontroller "redis-master" created

Redis マスターサービスを作成

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-service.json

service "redis-master" created

Redis スレーブレプリケーションコントローラーを作成

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-controller.json

replicationcontroller "redis-slave" created

Redis スレーブサービスを作成

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-service.json

service "redis-slave" created

ゲストブックレプリケーションコントローラーを作成

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-controller.json

replicationcontroller "guestbook" created

ゲストブックサービスを作成

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-service.json

service "guestbook" created

作成されたレプリケーションコントローラーとサービスを確認します。

$ kubectl get rc

NAME DESIRED CURRENT READY AGE
guestbook 3 3 3 25s
redis-master 1 1 1 2m
redis-slave 1 1 1 2m
$ kubectl get svc
guestbook LoadBalancer 10.100.58.17 xxx.ap-northe... 3000:32540/TCP 44s
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 32m
redis-master ClusterIP 10.100.72.41 <none> 6379/TCP 1m
redis-slave ClusterIP 10.100.240.246 <none> 6379/TCP 1m

guestbookはロードバランサを挟んでアクセスできるようになっており、ec2を見てみるとロードバランサが作成されていました。

https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#LoadBalancers

External IP が作成されるまで待機して、ポート3000でアクセスします。

$ kubectl get services -o wide

http://xxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com:3000


掃除

kubernetes上に作成したアプリケーションを削除

$ kubectl delete rc/redis-master rc/redis-slave rc/guestbook svc/redis-master svc/redis-slave svc/guestbook

作成したクラスタを削除

$ eksctl delete cluster \

--name cluster-name \
--region ap-northeast-1


感想

eksctlを使うとものすごく早くEKS構築できました。色々なオプションもあるのでいい感じです。

ただ、既存のVPCでEKS環境を作りたいのですが新たにVPC作成するので、eksctl使わずに手動で色々カスタマイズする事になりそう。


VPC Networking

By default, eksctl create cluster instatiates a dedicated VPC, in order to avoid interference with any existing resources for a variety of reasons, including security, but also because it's challenging to detect all the settings in an existing VPC

デフォルトでは、eksctl create clusterセキュリティを含むさまざまな理由で既存のリソースとの干渉を回避するためだけでなく、既存のVPCのすべての設定を検出するのは難しいため、専用のVPCを起動します


Amazon EKS の使用開始 も新たにVPC作成する手順なのと、いろいろハマりどころがあるので四苦八苦中。それについてはまたの機会に記事にします。


追記

既存VPC利用したクラスタ構築のオプションもあるようです!試す!