Rancher2.0 v2.0.3でEKSにkubernetesクラスタ構築 

AWSのEKS(Amazon Elastic Container Service for Kubernetes)がGAとなり、Rancher2.0 v2.0.2で試したところこちらの[issue](https://github.com/rancher/rancher/issues/13857)の内容によりうまくいきませんでした。
v2.0.3で修正されたようなので早速試してみました。

[リリースノート](https://github.com/rancher/rancher/releases)

#Rancher2.0 v2.0.3環境の構築

## EC2の準備

EC2で以下の内容で1インスタンス作成します。

EKSは2018年6月現在ではus-east-1米国東部（バージニア北部）とus-west-2米国西部 (オレゴン)のみ利用可能なので、Rancherサーバもus-west-2米国西部 (オレゴン)に立てることにしました。
もちろんどのリージョンでも問題ありません。

|項目               |入力概要        |
|:----------------------------------|:---------------------------------------------|
|リージョン|us-west-2米国西部 (オレゴン)|
|インスタンスタイプ|t2.medium|
|ブートディスク|Ubuntu 16.04 LTS|

## Rancher2.0 v2.0.3のインストール

TeraTermやターミナルを使用して、SSHでログインします。
ちなみに、AWSでUbuntuサーバにログインする際のユーザ名はUbuntuで、
秘密鍵を利用したログインとなります。
秘密鍵はインスタンスを作成する際に新規または既存のものを利用できます。

1.Dockerのインストール

1.12.6, 1.13.1, 17.03.2のいずれかのDockerをインストールします。

```lang:コマンド
$ curl https://releases.rancher.com/install-docker/17.03.2.sh | sh
・
・（省略）
・
+ sudo -E sh -c docker version
Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:31:19 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:31:19 2017
 OS/Arch:      linux/amd64
 Experimental: false

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker iyutaka2018

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.
```

2.Rancher2.0 v2.0.0のインストール

```lang:コマンド
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
Unable to find image 'rancher/rancher:latest' locally
latest: Pulling from rancher/rancher
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
870d5b269ab8: Pull complete
a19a69d4b1f9: Pull complete
a6dcc0296365: Pull complete
3b0fc6158a0c: Pull complete
4313aa3e477c: Pull complete
Digest: sha256:d7ac3b1213f9388a32d57236ab630b61716c05a068967c35f14d2c1e80d07003
Status: Downloaded newer image for rancher/rancher:latest
ed35766b4e4a245f24fb22675c76766fa3076d57006244077ee2eddf573a30b0
```

3.ブラウザを起動して、UIにアクセスします。

事前にAWSのセキュリティグループのインバウンドでhttpとhttpsを許可しておきましょう。

https://パブリックIP/

デフォルトユーザであるadminユーザのパスワード設定。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/9dcea624-43c2-2e60-3bfd-8b17f6ccac42.png)


「Save URL」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c0fde213-a897-ab6f-2896-02f9bebdd344.png)

ログイン完了となります。

![screencapture-34-209-50-34-g-clusters-2018-06-23-23_11_23.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8ebc665b-993d-b349-66c8-ad018ac40773.png)

上部メニューから「Catalogs」を選択し、「Helm stable」を「Enable」に変更します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b5fa64e4-d4b0-971f-6ddb-196f17c64241.png)

上部メニューから「Global」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/4d7e7a40-f239-5ec8-5c3c-34d1936afad7.png)

## Rancher2.0 v2.0.3からEKSにクラスタ構築

「Add Cluster」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/692ab3de-9b6d-1853-95a7-c88bf3123a8f.png)

「In a hosted Kubernetes provide」で「Amazon EKS」を選択します。
「Cluster Name」に任意の名前を入力します。
「Region」で「us-west-2」を選択します。※「us-east-1」と「us-west-2」しか選択できないようになっています。（2018年6月現在）
「Access Key」と「Secret Key」はAWSのIAMで作成したものを入力します。
最後に「Next: Authenticate & configure nodes」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/4aef27fc-ebe4-5c62-14fa-2d7624f0853e.png)

「Instance Type」で「t2.medium」を選択します。
「Create」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/5bf5b0e6-7c35-133b-8a1b-d7cc5d1500fb.png)

10分ほどでクラスタが完成します。Activeステータスになったらクラスタ名をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c5bfb071-28d7-09c2-6788-ad221cc5e75b.png)

クラスタのリソースを確認できます。

![screencapture-34-209-50-34-c-c-jbgg5-2018-06-23-23_50_40.png](https://qiita-image-store.s3.amazonaws.com/0/61606/15d3d9e9-7343-96d5-6e16-eb4d6f7ec7b7.png)

## kubectlのインストールと設定

Rancherサーバにkubectlコマンドを実行できるようにします。

1.kubectl(linux用)をダウンロード

```lang:コマンド
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 52.5M  100 52.5M    0     0  34.5M      0  0:00:01  0:00:01 --:--:-- 34.5M
```

2.実行権限の付与

```lang:コマンド
$ chmod +x ./kubectl
```

3.kubectlファイルの移動

```lang:コマンド
$ sudo mv ./kubectl /usr/local/bin/kubectl
```

4.kubectlコマンドの実行

```lang:コマンド
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.5", GitCommit:"32ac1c9073b132b8ba18aa830f46b77dcceb0723", GitTreeState:"clean", BuildDate:"2018-06-21T11:46:00Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
```

5.Kubeconfig Fileの設定

「Kubeconfig File」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c612158b-24e9-2135-bc29-68456438a543.png)

「Copy to Clipboard」をクリックして、「Close」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/68818d5b-13b0-6487-5b92-a7bd9d69d885.png)

```lang:コマンド
$ mkdir .kube
$ vim .kube/config
-----------------------------
apiVersion: v1
kind: Config
clusters:
- name: "eks-cluster"
  cluster:
    server: "https://34.209.50.34/k8s/clusters/c-jbgg5"
    api-version: v1
    certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM3akNDQ\
      WRhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFvTVJJd0VBWURWUVFLRXdsMGFHVXQKY\
      21GdVkyZ3hFakFRQmdOVkJBTVRDV05oZEhSc1pTMWpZVEFlRncweE9EQTJNak14TXpVNE1EbGFGd\
      zB5T0RBMgpNakF4TXpVNE1EbGFNQ2d4RWpBUUJnTlZCQW9UQ1hSb1pTMXlZVzVqYURFU01CQUdBM\
      VVFQXhNSlkyRjBkR3hsCkxXTmhNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ\
      0tDQVFFQXBsTStMV1AwUGtsUmxWYUkKc3l0dDVYZXlVOVcrbUpwYXVmMXRab1Jrb1JKdC9vNmpBR\
      zhrdGlUYmlPSkh6WDJzTTV0cDkwNWI0NXVRMkJEQgpyc0Z3a0lMbjZnalJZbUtqZ2xnSndGN1VCZ\
      kZYdVdjUzlVMFp6a0ZEcGRVNkJ1YmhPYUh0SFNidGFBQm0xZ04vCkRrTHR0c3RNWkRZUGJUUmpGW\
      S9rL2owWXZCYitMQzRHcG5LNzNZMkxlWWhjMFA5bmZPRDk0b3daWFNRSDVJZnYKMUhSZnRVdStIQ\
      kEwM1lsZVV2UzExZEpUQzdZNGpqdFJtZUNOTzFVU3BzS3JvZ2J4SG5MNTlKcDR4dk5rQU9OdQpzV\
      FJJL1pzdlhGaEFDLzkzNDFiYklWU1dTOGJGYnhIckc2bmtvcUlNaVd4bnB4YUdXZTVXYzlBSElvZ\
      XpIbFlnCjdsREpJUUlEQVFBQm95TXdJVEFPQmdOVkhROEJBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRS\
      C9CQVV3QXdFQi96QU4KQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBTEtOd1E3WjZjcFhhMGxjTGZwQ\
      Tg0TDVGMHlOZWk3elBXTnN1bGk2bQpHQWtyZEV0TFJRMzBvUThGRCtOT3V3SUJKK1FhNjdDdHMra\
      DhmVSthL0d5VitEQ2ZnTlg0OHdCTS9MaFgvM0hwClhENkxINkxsTFRuMVZPWVZnMmlKSjh0N20ve\
      VJ5S2piT1NoTm9vUnUxNnNNNUI3d05aekxwK05KM3lUR2VpQXIKcDVxZk13dVUvTnRGTDQ4QVpUO\
      W1uQUhCRHdmYVZ6YTd1L0N2NjkzTWo0VEFqNkxvaGhHaGlRdWdON0REOVlwcQp0azRGYWVaUGFCb\
      kV6THJCT2FTbnRzZlprYTFJU2FEUmUxRjM5ZVhQNkY2U3VxYzhYSExTZEdpNlZHNUdMN1lhCnN3V\
      2NsSGdSSSt5QSs5SXRIVXV2a0F6R3pXVWswdnRqazRuN3RVZkFpOVJVV1E9PQotLS0tLUVORCBDR\
      VJUSUZJQ0FURS0tLS0tCg=="

users:
- name: "user-kbcwm"
  user:
    token: "kubeconfig-user-kbcwm:5pxd4hmm8mfk54gn7zgvdrvbkxjshfdfm2tsx7zxmlmll59gs6dl88"

contexts:
- name: "eks-cluster"
  context:
    user: "user-kbcwm"
    cluster: "eks-cluster"

current-context: "eks-cluster"
-----------------------------
:wq
```

6.kubectlコマンドでノードを確認します。

```lang:コマンド
$ kubectl get nodes
NAME                                            STATUS    ROLES     AGE       VERSION
ip-192-168-126-237.us-west-2.compute.internal   Ready     <none>    19m       v1.10.3
ip-192-168-179-17.us-west-2.compute.internal    Ready     <none>    19m       v1.10.3
ip-192-168-251-193.us-west-2.compute.internal   Ready     <none>    19m       v1.10.3
```

7.AWSのダッシュボードからもクラスタが構築できていることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/cd34ce71-0f9c-f0b9-5e0f-d3ed0264b537.png)

## Rancher2.0 v2.0.3からEKSにクラスタを削除

対象のクラスタにチェックを入れて、「Delete」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/62fb76c5-58c6-95a7-5fdd-af71b8031332.png)

「Delete」ボタンを押下します。

![screencapture-34-209-50-34-g-clusters-2018-06-24-00_20_48.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f1fe92b9-c6e9-fb3e-eda2-cdc3e6caa042.png)

削除されたことを確認します。

![screencapture-34-209-50-34-g-clusters-2018-06-24-00_23_14.png](https://qiita-image-store.s3.amazonaws.com/0/61606/5ef48ec3-1a14-2fad-a1d5-5a2cabfb1776.png)


AWSのダッシュボードからもクラスタが削除されていることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/6813caf3-47be-a6ad-4dee-b05e3245a899.png)


特に問題なく簡単にEKSクラスタを作成することができました。
ただ、事前に一度、EKSにCLIでクラスタを構築したことがあり、VPC等作成済みだったこともあると思います。
一度[こちらのサイト](https://dev.classmethod.jp/cloud/aws/eks-getting-started/)を参考にしてEKSクラスタを作成してから実施する必要があるかもしれません。