Docker for Mac上のRancherでEKSクラスタをつくる

## なんの話？
以前書きましたが、EKSクラスタの構築は非常にめんどうです。
https://qiita.com/taishin/items/a32b4ac2c3f73cd02abb

Rancherの2系はEKSのデプロイもサポートしています。が、リリース当初はぜん
先日リリースされたv2.0.3でちゃんとデプロイできるようになりました。
https://qiita.com/cyberblack28/items/d444015edd99cab1ba43

Rancherを使えば、よく分からないEKS用kubectlやHeptio Authenticator AWSといったもののセットアップも不要、ノード登録のためのConfigMapなんかも不要で、かなり簡単にEKSクラスタをつくることができます。

Rancherを使う場合、Rancherサーバ用インスタンスが必要になるよねーって話になるんですが、自分のMac上のDocker for MacにRancherサーバのコンテナをデプロイすればインスタンスいらないのでは？ という話です。

## 手順
Docker for Mac がインストールされたMacで普通にRancher立ち上げます。

```bash:
$ docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS
       NAMES
5080491358e1        rancher/rancher     "rancher --http-list…"   24 seconds ago      Up 23 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443
/tcp   stupefied_bhabha
```
起動しました。

ブラウザでhttps://localhostにアクセスします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/27ed5ce6-ed04-5d39-1fb4-24230ebaac42.png)

見れました。
ログインします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/54e8f3da-2f9a-cd9a-fed6-5ca461173929.png)

Server URL がlocalhostでいいのか？ ホストがアクセスできないんじゃないの？ って言われますけど、そのまま進みます。
EC2でクラスタつくる場合は、EC2からRancherのServer URLにアクセスできないといけなかったような気がしましたが、EKSはAPI叩ければそれでいいような気がします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/688a409d-86fc-20a0-836f-498962205269.png)

あとは、[ここ](https://qiita.com/cyberblack28/items/d444015edd99cab1ba43) の手順通りEKSをセットアップします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3246/e23fe9dc-ab4b-b54b-412d-778444e6cc09.png)

問題なくできました。

この環境だとkubeconfigはこんな感じです。

```yaml:
apiVersion: v1
kind: Config
clusters:
- name: "eks-1"
  cluster:
    server: "https://localhost/k8s/clusters/c-pjgr6"
    api-version: v1
    certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM3akNDQ\
  (略)
```

serverがlocalhostなので、kubectlはローカルのRancherにアクセスすることになります。

```bash:
$ kubectl get all                                                                                        NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   10m
$ kubectl get nodes
NAME                                            STATUS    ROLES     AGE       VERSION
ip-192-168-152-186.us-west-2.compute.internal   Ready     <none>    4m        v1.10.3
ip-192-168-212-16.us-west-2.compute.internal    Ready     <none>    4m        v1.10.3
ip-192-168-66-200.us-west-2.compute.internal    Ready     <none>    4m        v1.10.3
```

```bash:
$ kubectl run nginx --image=nginx --port=80
deployment.apps "nginx" created

$ kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
nginx-768979984b-6jqv4   1/1       Running   0          49s

$ kubectl expose deployment nginx --type="LoadBalancer"
service "nginx" exposed

$ kubectl get svc
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP        PORT(S)        AGE
kubernetes   ClusterIP      10.100.0.1      <none>             443/TCP        14m
nginx        LoadBalancer   10.100.19.166   aeb2a89ff7916...   80:31789/TCP   1m
```

いまのところ問題なく使えてます。

## まとめ

EKSはRancherでつくるのが楽だよ
Docker for MacでRancherつくれはRancher用インスタンスはいらないよ
って話でした。
(この構成問題あるよとか情報あれば教えてください)