なんの話?

以前書きましたが、EKSクラスタの構築は非常にめんどうです。
https://cloudpack.media/41358

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立ち上げます。

$ 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にアクセスします。

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

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

あとは、ここ の手順通りEKSをセットアップします。

問題なくできました。

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

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にアクセスすることになります。

$ 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
$ 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用インスタンスはいらないよ
って話でした。
(この構成問題あるよとか情報あれば教えてください)

元記事はこちら

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