Amazon EKS Starter: Docker on AWS EKS with Kubernetes 受けてみた①

##はじめに
本記事では、Udemy にて Stephane Maarek 氏 が提供している「[Amazon EKS Starter: Docker on AWS EKS with Kubernetes](https://www.udemy.com/amazon-eks-starter-kubernetes-on-aws/)」 について紹介したいと思います。

※注意
本コースでは、様々な AWS サービスを利用することになるので、請求金額には気をつけておく必要があります（コース内で Stephan 氏自身も、請求金額には気をつけるようにと述べております）。そのため、使わなくなったサービスやインスタンスの停止や削除、サービスの稼働時間をなるべく短くするなどして、本コースに取り組んで頂けたらと思います。

##Introduction
Amazon EKS はマネージド型のサービスで、AWS 内で Kubernetes を実行することが可能となるサービスです。
Amazon EKS のユースケースとしては、以下が考えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/869fdcba-251a-0cb0-dc32-d6c59d02ba2b.png)

- ユースケース毎にクラスターを作成
- コンテナ内にマイクロサービスを用意
- オンプレクラスターからクラウド Kubernetes クラスターへ移行
- ML クラスターの用意

##Set Up
それでは、 AWS EKS を利用する環境の準備をしていきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/bd8b1394-a803-1d70-4078-9d71b4264cb2.png)
環境自体は、図のように3つの AZ を準備し、それぞれの AZ に対して Master Node、Etcd、K8s worker node を用意します。
また、それ以外にも IAM ユーザなども用意する必要があります。

###IAM User
本コース用の IAM ユーザを作成します。基本的には root アカウントではなく、個別に作成した IAM ユーザを利用しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/2b029293-0188-e02c-f468-6e8443a755b8.png)
作成するIAMユーザには「AdministratorAccess」というポリシーをアタッチすることで、AWS 環境の全サービスを利用することができます。

作成が完了したら、作成した IAM User の「Security Credentials」を選択すると、「Create access key」という項目が表示されるので、そちらをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/d3856589-94f2-cfc3-27e6-9d743f74064d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/8200a082-e9ec-9c3e-e824-b094460eaeee.png)
「Create access key」をクリックしたら、csvファイルをダウンロードします。csvファイルはくれぐれも無くさないようにお願いします。

###IAM Role
次に IAM Role を作成します。K8s がAWS リソースを作成できるようにするためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/e16c2ad6-920c-56c2-0a81-7392234f2f05.png)
「Roles」を選択したら、「Create role」をクリックして作成に移りましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/248accdd-544c-6acb-65d0-db1fda5253d7.png)
「EKS」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/eb5c2d94-c8f3-a02e-515c-99a5c9640c87.png)
「Role name」「Role description」を入力したら、「Create role」を選択します。
これで IAM Role の作成完了です。

###SSH
次に、SSH キーペアの作成を行います。
コンソール画面より EC2 の画面に移動して、「Key Pairs」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/b355a231-99da-b51b-97e7-ec67af1bc29f.png)

「Create Key Pair」を選択して、キーペアの作成を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/34ba934e-84f8-0a87-3362-aa7e60965673.png)
作成が完了すると、pem ファイルがダウンロードされるので、ちゃんと保管しましょう。

##VPC
次は、VPCを作成したいと思います。図は、今回作成する AWS の全体構成図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/d5170fd3-d400-d1e3-0e37-6cc8b29e8089.png)

- VPC：リージョンは us-east-1 を指定
- Subnet：3つ用意し、全て同じ VPC 内に用意
- Security Group：共通の内容で、IGW への接続が可能

###CloudFormation
今回は、 CloudFormation を利用して上記の AWS 構成図を用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/80ca5b2e-67b9-9907-35c7-11e60e4ebd73.png)
コンソール画面より CloudFormation を選択し、「Create Stack」から作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/c417a00d-565d-53de-9daa-b0dfc282fe19.png)
テンプレートは、本コースを受講することでダウンロードが可能となるファイルの中に用意されているので、そちらを利用します。ファイル名は「eks-course-vpc.yaml」です。

ここでは、作成したスタックの名前を決めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/46a942c0-ca2b-826b-504f-11e20c258d9c.png)
スタック名を入力したら、Option は飛ばしていただき、Review で作成するスタックの内容を最終確認して、「Create」を選択します。これで、作成完了です。

##EKS Control Plane
次は、EKS 制御 Plane を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/dbf19245-d7ae-db98-4562-54349429f7df.png)

AWS コンソール画面より「EKS」を選択します。EKS の画面に飛んだら、「クラスター」を選択し、「クラスターの作成」を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/14a3113d-ed53-fef6-e5bc-8bbc8cf95b80.png)
クラスター作成時には、以下の項目を埋めていきます。

- クラスター名：任意
- Kubernetes のバージョン：最新バージョンを使用
- VPC（サブネットも自動的に選択されます）：CloudFormation で作成した VPC を選択
- ロール名：先程作成したものを選択
- セキュリティグループ：先程作成したものを選択

項目を全部埋めたら、「Create」を選択して作成完了です。

##Command line Cli tools の準備
次は Kubectl のセットアップを行います。
kubectl のインストールを行う際には、MobaXterm を利用するのがオススメですので、ぜひ利用してみて下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/bb9d6e62-d7a2-9a4c-7136-4423953bc9b5.png)
インストールする項目は以下となります。それぞれ、AWS 公式より OS 毎に手順が用意されておりますので、そちらをご参照ください。

- [kubectl のインストール](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/install-kubectl.html)
- [aws-iam-authenticatior のインストール](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/install-aws-iam-authenticator.html)
- [kubeconfig のインストール](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-kubeconfig.html)


##Worker node の準備
Amazon EKS ワーカーノードはスタンダードな Amazon EC2 インスタンスです。

EKS ワーカーノードを CloudFormation で作成します。
マネジメントコンソールから、CloudFormation を検索し、「Create Stack 」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/74eb9f6c-da92-4b8d-b4c9-44ee49f13a35.png)
本コースでダウンロードしたコードファイルから、「eks-course-nodegroup.yaml」を選択して、アップロードします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/30360935-ce8a-e630-1348-a7be5eb6d240.png)
後は、インスタンスタイプなどを選択し、確認画面で内容を確認したら「Create」を選択して作成完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/5c8a4a36-3625-6f19-e87a-3a141d505fdd.png)
EC2画面に移ると、3台のワーカーノードが作成されたのが確認できます。

###おわりに
これで、無事に環境を用意することができました。
次回は、EKS のより詳しい内容についてお話しして行きたいと思います。