Rancher2.0を使って超高速にkubernetesクラスタを構築した時のメモ

# はじめに
Rancher2.0が出たので、試してみた。
実際やってみて、超高速で環境が立ち上がって、
俺の中で激震が走ったので、書きたくなった。
※今回はEC2で作ってみたけど、
　別にEKSだとかに頼っていないので、
　リージョンや、クラウドサービス、仮想マシンか物理マシンかどうかには、
　影響を受けないやり方です。

# Rancherってなに?


**k8sをまとめて管理する**ことができるソフト。
ついでに手動構築すると **面倒くさいk8sのインストールを自動化** してくれる。

# 手順
ここからインストール手順に入ります。
参考にしたとこ：https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/

## 今回は、こんな構成で作ります。
![ノードインストール.png](https://qiita-image-store.s3.amazonaws.com/0/228730/c48b265c-47a2-84f5-83b7-45084a1a168d.png)

**Rancherサーバが一台。**
**controlplaneが三台**
**nodeが三台**


で作ります。
※ちょっと用語があやしいです。
　masterとcontrolplaneとcontrol、
　nodeとworker。
　kubernetesの考え方とイコールかどうか。。。


## まず仮想マシンを立てます。
仮想マシンを起動します。
OSはCentOS7.5にしました。
※公式を見るとRHELがサポートされ、CentOSが書かれていません。
　ま、Dockerのバージョンあってれば大丈夫でしょ。


## 次に各サーバーにDockerをインストールします。
```bash
sudo yum update -y 
sudo yum install docker -y 
sudo systemctl enable docker
sudo systemctl start docker
```

![Dockerインストール.png](https://qiita-image-store.s3.amazonaws.com/0/228730/3f76637a-19b1-e25d-37ed-692d55bcfacd.png)
※rancher,kubernetesはすべてコンテナで実行されるため、
　すべてのサーバーにDockerが入る。


## rancherをインストール

```bash
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
```
![Rancherインストール.png](https://qiita-image-store.s3.amazonaws.com/0/228730/1d5dd183-3fcb-681e-28a6-71b1a2d97462.png)





## rancherへログイン
https://${作ったサーバのIP}
※PWは適当に。

![初アクセス.png](https://qiita-image-store.s3.amazonaws.com/0/228730/ad1cf9e1-5399-0cfc-996a-dbea0a6aaad9.png)



ログイン時のサイトのURLを設定するように求められるが、
このURLはクラスタ構築時に、各サーバから接続するURLとして利用されます。
※今回、私は、AWSのEC2で作りました。
　管理画面へのアクセスはパブリックIPで行い、
　rancher-各サーバ間の通信はプライベートIPで行っています。


## クラスタを作る

**Add Clusterをクリック**
![クラスタ作成.png](https://qiita-image-store.s3.amazonaws.com/0/228730/8fbfcb7b-eea7-1d9b-c51d-26c94d1bf556.png)


**カスタムを選択してクラスタを作成。**

![クラスタ種別の指定.png](https://qiita-image-store.s3.amazonaws.com/0/228730/83604fd1-e4ce-6dbe-114f-0dd3143d49be.png)
![クラスタのパラメータ指定.png](https://qiita-image-store.s3.amazonaws.com/0/228730/7e8dd10b-ad15-5cb7-231a-e59eacd425d6.png)

Nextをクリックして次へ。

**まずはマスターを３台つくります。**
controlとetcdにチェック。
![コントローラのインストール.png](https://qiita-image-store.s3.amazonaws.com/0/228730/e98b4445-a1f0-d653-afc1-03ee36a09be9.png)

コマンドが表示されるので、コピペ

**各サーバでコマンドを実行する。**
多分、こんなコマンドになっている。
※サンプルなので、そのまま実行しないでください。

```bash
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.0.3 --server https://10.0.1.56 --token 8cjzm57csctrsqrmtnch24p6lhk9fbnv5gt94vf6snfvpbv2j2kzg5 --ca-checksum 94f790d48151dacd2d30640466584075fe10a4fdb7c4f686abcff2840ab85c81 --etcd --controlplane
```

コマンドを叩くと、ノードが登録された旨、画面に出る。
[Done]をクリック。


![コントールプレーンインストール.png](https://qiita-image-store.s3.amazonaws.com/0/228730/3ac44a25-27c5-31c9-3549-375bf25020f1.png)

今、コントロールプレーンがインストールされ、この画像の状態になっているはず。

**マスターできあがり**

## ノードの追加
**クラスタの変更をする**
Editをクリック
![クラスタの変更.png](https://qiita-image-store.s3.amazonaws.com/0/228730/4086faa7-7f42-fa37-d927-29aa9b5e26bf.png)

**ノードを追加する。**
workerのみにチェック。
![ノードの追加.png](https://qiita-image-store.s3.amazonaws.com/0/228730/461353b5-020c-9dd8-930c-4e49f75097cc.png)

コマンドが表示されるので、コピペ

**各サーバでコマンドを実行する。**
多分、こんなコマンドになっている。
※サンプルなので、そのまま実行しないでください。

```bash
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.0.3 --server https://10.0.1.56 --token 8cjzm57csctrsqrmtnch24p6lhk9fbnv5gt94vf6snfvpbv2j2kzg5 --ca-checksum 94f790d48151dacd2d30640466584075fe10a4fdb7c4f686abcff2840ab85c81 --worker
```

![ノードインストール.png](https://qiita-image-store.s3.amazonaws.com/0/228730/c48b265c-47a2-84f5-83b7-45084a1a168d.png)

今、ワーカーがインストールされ、この画像の状態になっているはず。
**nodeできあがり**


## 色々見てみる。
**nodeの登録はどうなっているのか。**

```bash
# Run kubectl commands inside here
# e.g. kubectl get all
>
> kubectl get nodes
NAME            STATUS    ROLES               AGE       VERSION
ip-10-0-1-133   Ready     worker              24m       v1.10.3
ip-10-0-1-193   Ready     controlplane,etcd   35m       v1.10.3
ip-10-0-1-197   Ready     controlplane,etcd   33m       v1.10.3
ip-10-0-1-202   Ready     worker              24m       v1.10.3
ip-10-0-1-227   Ready     controlplane,etcd   33m       v1.10.3
ip-10-0-1-65    Ready     worker              25m       v1.10.3
```

コントロールプレーン、ワーカーと関係無く、kubeletが動いており、
クラスタにノードとして登録されている。
ロールで役割を分けているのかな？

**なんとなくnginxを実行**

```bash
kubectl run nginx --image=nginx:latest --replicas=3
kubectl expose deployment/nginx --type=NodePort --port=80
```

portを確認

```
> kubectl get services
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.43.0.1       <none>        443/TCP        58m
nginx        NodePort    10.43.154.226   <none>        80:31904/TCP   2m
```

curlを叩くといい感じに返ってきた。

# 最後に
今回、わざわざGKEやEKSなどの自動化された方法を使わずに構築しました。
イケているかというと、NOですが、どんな環境にも適用できそうだと実感できます。

RancherにはAPIも存在しており、
どんな環境でも仮想マシン構築からクラスタ作成までを完全自動化できるような、
ポテンシャルを感じます。