Rancherを導入してコンテナをコントロールする準備～EHW2018「開発環境整備⑥」

# 概要

このエントリは、「Enterprise "hello, world" 2018 Advent Calendar 2018」の12/13向けのものです。このAdvent Calendarでは、複数個のエントリにまたがる話の流れも鑑みつつ、なるべく1エントリで１つのトピックをカバーできるようにする予定です。

このエントリで記載するトピックは、Rancherでコンテナをコントロールする準備です。

前日までのものと合わせて、下図のような世界になります。

|!![EHW2018DevEnv(1)(3).png](https://qiita-image-store.s3.amazonaws.com/0/65002/e411d8d2-6d0b-195c-039f-85831d679827.png)|
|:---:|


# 前提

## おことわり

- このEnterpfise "hello, world"シリーズは、ネタのためのエントリです。実環境でそのまま利用ことを目的とはしていません。
- 動かしやすさを優先してセキュリティを意図的に低くする設定など入れてありますのでご注意ください。

## 想定読者

「Enterprise "hello, world" 2018」的なネタとしては、下記のような状況を想定しています。

> GitリポジトリとIDEがそろったので、次はアプリをデプロイする先を作る準備をしなくてはいけない。

# Rancher

## Rancherとは

[Rancher](https://rancher.com/)は、本家サイトの言葉によれば「Multi-Cluster Kubernetes Management」ツールであり、パブリッククラウドの上でも、あるいはローカル環境でも、Kubernetesをいい感じにコントロールしてくれるツールです。

## docker-composeの用意

前日分までと同じ流れで用意します。全体を眺めたい方は[GitHub上にあげてあるもの](https://github.com/hrkt/enterprise-hello-world-2018/blob/master/second-dev-env/docker-compose.yml)をどうぞ。

### .env

```
HOST1_ADDR=10.0.2.15
(中略)
RANCHER_ADDR=192.168.3.221
```

### docker-compose.yml

[本家のdockerの説明](https://github.com/rancher/rancher)に沿って、docker-composeに記述します。ネットワークの設定は前日までのものに準じています。

```yaml
(前日分までの設定は省略)

  rancher:
    image: 'rancher/rancher'
    restart: unless-stopped
    networks:
      - extnet
    ports:
      - "${RANCHER_ADDR}:8080:80"
      - "${RANCHER_ADDR}:8443:443"
      - "${HOST1_ADDR}:38443:443"
    links:
      - samba
      - gitlab
      - jenkins
```

クラスターにノードを追加するには、ノードからアクセスできるrancher serverのアドレスが必要です。
本エントリでは、Virtual BoxのNAT Networkを使った状態で、ほかのノードからranher serverにアクセスできるよう、VMのNICのポート38443番を使い、rancherの443番をVMの外側に公開しています。

## 起動

Advent Calendar的には、すでに他のサービスが動いている状況なので、rancherだけupします。

```shell-session
$ sudo docker-compose rancher up 
```

コンテナが立ち上がった後、ネットワークからあれこれダウンロードしてきます。数十秒待つイメージです。

## サーバに接続

### ポート転送

前日までと同じく、SSHでポート転送をして、接続します。筆者は38443番を使いました。RancherのWeb UIは、80番ポートに接続しに行くと443番にリダイレクトされるため、お外からのポート転送は443番のほうだけで充分です。

![port-forward-38443.png](https://qiita-image-store.s3.amazonaws.com/0/65002/41c3dfdb-9ac7-c8be-dac4-b81784a8cdbf.png)

### WebUI

ここまでの流れがうまくいっていれば、下図のようなセットアップのための画面につながります。

![rancher-init.png](https://qiita-image-store.s3.amazonaws.com/0/65002/8a1040e0-4d45-8855-a589-d725f91e4468.png)

## 初期設定

「admin」ユーザのパスワードを適当日程して、

![rancher-pass.png](https://qiita-image-store.s3.amazonaws.com/0/65002/0cb4dffa-0275-4d9c-30ca-a653daf16b46.png)

次のダイアログのRancherのURLには「https://10.0.2.15:38443」を指定しました。（冒頭のネットワーク構成の都合上）

![rancher-address.png](https://qiita-image-store.s3.amazonaws.com/0/65002/3723f81d-5584-b7e7-a959-4dc30c7abb71.png)

情報収集のあたりは適当に流して、次に進むと、クラスタが何もないホーム画面となります。

![rancher-home.png](https://qiita-image-store.s3.amazonaws.com/0/65002/26cb56e8-e1d9-86ab-b3ff-4fad32abb02a.png)

## ノードを追加

「Add Cluster」を押して、クラスタのタイプの選択画面に移動します。

![rancher-cluster-custom.png](https://qiita-image-store.s3.amazonaws.com/0/65002/94fd206e-471f-7c0a-742f-4f79a583a356.png)

クラスタ名は"LocalCluster"とし、ネットワークの設定などはデフォルトのままとします(なので、原稿執筆時点ではNetwork Providerは"Canal")。

![rancher-cluster-setting.png](https://qiita-image-store.s3.amazonaws.com/0/65002/7d4bed95-8570-bc78-032b-4c6a4ff38be3.png)

「Next」で進んだ先の画面で、上側のペインにて役割などを指定すると、下側に追加したいカスタムホスト側で実行するコマンドが表示されます。

![rancher-cluster-add.png](https://qiita-image-store.s3.amazonaws.com/0/65002/0d1273f4-c538-2d9f-117f-a56562160aeb.png)

下側のコマンドのコピーボタンを押してクリップボードに保存し、追加したいノードのターミナルで実行します。

このエントリでは、下記マシンを追加します。

- OS: Alpine Linux 3.8.1
- IP: 10.0.2.4

> (補足) alpineは初期導入後、dockerが使えるように"# apk add docker; #rc-update add docker boot; #service docker start"した状態です。

```shell-session
Unable to find image 'rancher/rancher-agent:v2.1.3' locally
v2.1.3: Pulling from rancher/rancher-agent
32802c0cfa4d: Pull complete
da1315cffa03: Pull complete
fa83472a3562: Pull complete
f85999a86bef: Pull complete
5bf53f7eb665: Pull complete
b6dee6425e98: Pull complete
15612bde45d1: Pull complete
5bb137229af3: Pull complete
72fc31ea0fd1: Pull complete
Digest: sha256:c0c15e3fb32d516a16889765fe9ce62713617dc2f599a516c7d66620c737b705
Status: Downloaded newer image for rancher/rancher-agent:v2.1.3
20631fe028719850a5ea27944dde901f35a99f509cf92769d00b234d35bd9b94
```

ノードの追加には数分かかるので、たまに画面を眺めながら、待ちます。

![rancher-provisioning.png](https://qiita-image-store.s3.amazonaws.com/0/65002/2d405163-8b7e-a7f4-d218-53c7415f0fc1.png)

途中状態で、「ノードが見えない」などの文言も現れますが、一時的なものであればそのうち消えます。慌てずしばらく待ちましょう。

ノードが追加されました。

![rancher-provisioning-done.png](https://qiita-image-store.s3.amazonaws.com/0/65002/692d731c-a646-5c20-ffbc-8010f466b641.png)

> (補足)本Advent Calendarシリーズでは、Core i3@2GHz, Mem 16GiBのThinkPad 1台ですべて(ここまでのエントリのSamba, GitLab... )動かして書いているのですが、そろそろつらくなってきました（下図）…

![cpu-usage-day13.png](https://qiita-image-store.s3.amazonaws.com/0/65002/ee4b326e-28ca-c639-d93c-d98a086be8ca.png)

### おまけ Darkな色合い

設定で、Darkな色合いのテーマも選べます。かっこいいですね。

![rancher-dark-mode.png](https://qiita-image-store.s3.amazonaws.com/0/65002/381ec4d3-db08-14ba-5912-3d9bcdcb9743.png)

## ActiveDirectoryとの連携

参考:[Configuring Active Directory (AD)](https://rancher.com/docs/rancher/v2.x/en/admin-settings/authentication/ad/)

メニューから「Security」「Authentication」と進み、「Active Directory」を選択します。

![Screenshot_2018-12-31_07-28-15.png](https://qiita-image-store.s3.amazonaws.com/0/65002/492fdd91-3386-1dc5-7cef-fc92bf7e444c.png)

設定画面で、下図のような値を指定します。

![Screenshot_2019-01-02_08-44-00.png](https://qiita-image-store.s3.amazonaws.com/0/65002/06347b37-37e1-54a1-cb0e-d4fb3da9eece.png)

![Screenshot_2019-01-02_08-45-12.png](https://qiita-image-store.s3.amazonaws.com/0/65002/32b34a44-1207-8801-e72c-fc3dc943b9f0.png)



# まとめ

このエントリでは、「Enterprise "hello, world" 2018 Advent Calendar 2018」(EHW2018)の13日目として、Rancherでコンテナをコントロールする準備をトピックとして取り上げました。

EHW2018のネタとしては、そろそろデプロイしてもよいのではないかと考えてます。