Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

ca-adv
サイバーエージェントグループの一員としてコミュニティサービス、ゲーム、スマートフォン向けサービス、インターネット広告など最先端のインターネットサービスに関わる事業
https://www.ca-adv.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away