最近 k8s を勉強しはじめたのと EKS が東京きたのもあって EKS を使うためにチュートリアル的なのをやっていた
一通りやってみた結果コマンドラインで kubectl
をうつまでがちょっと長いなぁと思った。
具体的には EKS のサービスロールを作って VPC 作ってサブネット、セキュリティーグループを作ってクラスター作って、 kubeconfig を更新してやっと kubectl
が使えるようになる。
そんな時に次の資料を見て eksctl
を知った。
どうやら良い感じにクラスターを作ってくれるっぽい。
チュートリアルのステップ1, 2を1コマンドで完了できる。
www.slideshare.net
eksctl
eksctlはEKSのクラスタを構築するCLIツールで、Goで書かれてます。
AWSのリソースは CloudFormation を使用して作っています。
k8s の API をたたくために必要な認証情報は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 や 環境変数 などを設定しておく必要があります。
クラスタの作成
AWS の VPC や 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
最後に
eksctl便利〜〜