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とサブネットが作られます
- eksctl-cluster-name-cluster/VPC
cloudformationが作られます
- eksctl-cluster-name-nodegroup-0
- eksctl-cluster-name-cluster
eks クラスタ(マスターノード)が作られます
- cluster-name
ec2 インスタンス(ワーカーノード)が作られます
- cluster-name-0-Node x2
ec2 セキュリティグループが作られます
- 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を見てみるとロードバランサが作成されていました。
External IP が作成されるまで待機して、ポート3000でアクセスします。
$ kubectl get services -o wide
掃除
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利用したクラスタ構築のオプションもあるようです!試す!