eksctlを作ってEKSのチュートリアルをやってみる

最近 k8s を勉強しはじめたのと EKS が東京きたのもあって EKS を使うためにチュートリアル的なのをやっていた

docs.aws.amazon.com

一通りやってみた結果コマンドラインkubectl をうつまでがちょっと長いなぁと思った。
具体的には EKS のサービスロールを作って VPC 作ってサブネット、セキュリティーグループを作ってクラスター作って、 kubeconfig を更新してやっと kubectl が使えるようになる。

そんな時に次の資料を見て eksctl を知った。
どうやら良い感じにクラスターを作ってくれるっぽい。
チュートリアルのステップ1, 2を1コマンドで完了できる。

www.slideshare.net

eksctl

github.com

eksctlはEKSのクラスタを構築するCLIツールで、Goで書かれてます。
AWSのリソースは CloudFormation を使用して作っています。

k8sAPI をたたくために必要な認証情報はeksctlではなく aws-iam-authenticator が行なってくれていて homebrewでいれると一緒に入ってきます!

事前準備

インストールは Mac で homebrew を使っていれば brew install weaveworks/tap/eksctl でインストールすることができます。

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

eksctl は内部で aws の提供する Go の SDK を使用しています。
そのため Credential Files環境変数 などを設定しておく必要があります。

クラスタの作成

AWSVPC や SG などの作成からEKSのクラスターは次のコマンドでぜーんぶやってくれます!!

$ eksctl create cluster \
  --name test-cluster \
  --region ap-northeast-1 \
  --nodes 2 \
  --nodes-min 1 \
  --nodes-max 2 \
  --node-type t2.small \
  --version=1.11

便利だ!!

アプリケーションをデプロイする

kubectl が使えるようになったので、後は kubectl apply しながらアプリケーションを起動していくだけ!!

# 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

ブラウザからアクセス

しばらくするとEXTERNAL-IPがでてくるはずなのでそのホストからport:3000でアクセスをする

$ kubectl get services guestbook -o=jsonpath='{.status.loadBalancer.ingress[0].hostname}'
aaaaaaaaaa-111111.ap-northeast-1.elb.amazonaws.com

f:id:hatappi1225:20181231110727p:plain

最後に

eksctl便利〜〜