LoginSignup
30
14

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-24

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とサブネットが作られます

  • 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利用したクラスタ構築のオプションもあるようです!試す!

30
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
14