Kubernetes on Google Cloud Platform by Rancher ～Install & ‎Architecture～

Rancherのkubernetesテンプレートを利用して、簡単にk8s環境を構築してみたいと思います。

Rancherは、ホストを管理するRancher Serverと管理されるホストのRancher Agentが必要となり、
ServerとAgentはDockerイメージであるため、docker runコマンドを実行するだけで利用できます。

Rancher ServerとAgent環境を構築して、k8s環境も構築して、Rancherのk8sのArchitecutreを考えてみたいと思います。

# Rancher Server & Agent on GCP

今回は、Google Cloud Platformを利用して、Rancher Server 1台とAgentホスト 3台の環境を作成します。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/61606/25ecebbe-7d6c-d1cb-6c5c-786c6701b508.png)

※他のクラウドベンダー、オンプレミス環境でも構いません。

Compute Engineで以下の4インスタンスを作成します。

|項目               |入力概要        |
|:----------------------------------|:---------------------------------------------|
|ゾーン|asia-southeast1-a|
|マシンタイプ|vCPUx1|
|ブートディスク|Ubuntu 14.04 LTS|
|ファイアウォール|HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方をチェックします。|

GCPでは、デフォルトでファイアウォールが設定されていて、ホスト間でのコンテナの通信が行えないため、
設定を変更する必要があります。

GCPのダッシュボードで、「ネットワーキング」-「ファイアウォール」を選択して、ファイアウォールルールを作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/2dc3bc00-a862-a03f-e923-3782d6fb886c.png)

名前は任意名、ソースIPの範囲は0.0.0.0/0、プロトコルとポートは全て許可とします。
今回はお試しということで、全許可にしています。
最後に「作成」ボタンをクリックします。

## Rancher Serverの構築

### rootパスワードの設定
GCPではrootのパスワードがデフォルトでは設定されていないので、まずはrootのパスワードを設定します。
4インスタンスに任意のパスワードを設定します。

```lang:コマンド
$ sudo passwd root
```
### Dockerのインストール
Dockerをインストールします。Rancherとk8s環境ではDockerのバージョンがサポートしているものとそうでないものがあるので、[Support Version](http://docs.rancher.com/rancher/v1.5/en/hosts/#supported-docker-versions)で確認します。

今回は、[Rancher Labs公式Online Meetup](https://www.youtube.com/watch?v=YRmUu2YXj7w&t=823s)で1.12.6で行っているので、そのバージョンに合わせてみます。
4インスタンスにDockerをインストールします。

```lang:コマンド
$ curl https://releases.rancher.com/install-docker/1.12.6.sh | sh
.
.
.
Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   78d1802
 Built:        Tue Jan 10 20:26:30 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.4
 Git commit:   78d1802
 Built:        Tue Jan 10 20:26:30 2017
 OS/Arch:      linux/amd64
.
.
.
Remember that you will have to log out and back in for this to take effect!
```
### Rancher Serverのインストール
4インスタンスうちの1台に最新版のRancher Serverのコンテナをインストールします。
2017年6月現在Rancher Serverはv1.6.2となります。

```lang:コマンド
$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
```

対象のインスタンスの外部IPにポート8080でブラウザからアクセスします。

http://外部IPアドレス:8080/

![screencapture-35-186-144-37-8080-env-1a5-apps-stacks-1497185148604.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b5f2bf69-9d7f-5a6a-37f3-78ddc4273eba.png)

1.「Got it」をクリックします。

2.下部メニューの言語選択から「日本語」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/eec7c99a-2305-200f-88fe-2095bdf4daf7.png)

3.上部メニューの「管理者」-「アクセスコントロール」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/834031ec-63d3-b58e-fa2b-c5aaee5b3c5a.png)

4.「click here」をクリックします。

![rancher03.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c74846b5-38e2-397f-b95b-d84604efd234.png)

5.GitHubのログイン画面が表示されます。ログインします。
※GitHubのアカウントを持っていない場合は作成しましょう。

![rancher04.png](https://qiita-image-store.s3.amazonaws.com/0/61606/acc37357-3b8c-07b1-976b-bf186e122752.png)

6.「Register a new Application」ボタンをクリックします。
![rancher05.png](https://qiita-image-store.s3.amazonaws.com/0/61606/69ec7672-901a-74bf-5954-8e353a53fbcb.png)

7.赤枠箇所を入力し、「Register application」ボタンをクリックします。

![rancher06.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b213e3d4-be89-49eb-0fbe-8bfb25bc23bd.png)

8.「Client ID」および「Client Secret」が払い出されます。

![rancher07.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f6f4e1b7-f75e-d165-d5dc-876a22604c41.png)

9.GitHubから払い出された「クライアント ID」および「クライアント秘密キー」を入力して「保存」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/991dca71-9939-0169-85e0-5479e5b4df3a.png)

10.「GitHubアカウントで認証」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/d97956dc-83a6-423e-69f5-0953cc26cb36.png)

11.Rancher側の画面が切り替わり「GitHubは有効です」と表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/976213c6-e67e-7f88-ec43-b3d8e99174f4.png)

## k8s環境テンプレートの作成

1.上部メニュー「環境管理」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/07ca1298-8eff-d4a7-2b98-2b750f8e1122.png)

2.「環境追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/cd5760e8-d4f0-626a-c164-2f4bfd16eb91.png)

3.「名前」に任意の名前を入力します。ここでは「k8s」とします。「環境のテンプレート」でkubernetesのアイコンを選択します。「作成」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/3affd69e-96d3-56e3-e827-d222fdda6256.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/2c18b93e-c51b-c2b5-a2ee-1b565c784159.png)

5.「ホストを追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/a84d2a7b-bd08-d2ac-2c6a-bb2039bc3ada.png)

## Rancher Agentのインストール

1.赤枠のコマンドをコピーして、残り3台のまず1台にペーストし、「閉じる」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/67900845-196e-3377-b8d4-93bbfa00e4bc.png)

```lang:コマンド
$ sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.2 http://RancherServer外部IP:8080/v1/scripts/053345DA35CBEE8144B6:1483142400000:2cehkwGGXulEgYZV0uD3NIRIRk
```

2.上部メニュー「インフラストラクチャー」から「ホスト」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/9763da22-a158-c953-6313-db72fb78549a.png)

3.Rancher ServerとRancher Agentが連携し、約5分以内にk8s環境が構築されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/36c06ddb-160d-8aa9-eafe-d521eb718ee0.png)

4.残り2台のインスタンスにも1のコマンドをペーストして実行すると、2台のホストが追加されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c228a798-f2a5-0dea-6b2d-ac30630c82de.png)

以下の構成となります。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/61606/6c2d9ec6-5894-ae16-69af-cdcfb60fbef7.png)

これでk8sの環境構築は完了となります。

# k8s dashboard

1.上部メニュー「KUBERNETES」-「ダッシュボード」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/e3e34d17-dd34-7fad-5cc9-a3a35d39fa1a.png)

2.「kubernetes UI」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/7e063b67-5ab8-def2-00ff-6a13ecc2294f.png)

3.新規にブラウザのタブが開いて、kubernetes dashboardが利用できます。

![screencapture-35-186-144-37-8080-r-projects-1a7-kubernetes-dashboard-9090-1497192117508.png](https://qiita-image-store.s3.amazonaws.com/0/61606/037bc6e0-ee7a-3e4f-9f7e-8174ce651301.png)

# k8s Architecture of Rancher

Rancherのk8s環境では各ホストで以下のコンテナ構成が自動で構築されます。HOST1にあるkubernetes-1がAPI Serverと思われます。kubernetes-controller-manager-1、kubernetes-etcd-1、kubernetes-scheduler-1が主にMasterに必要となるコンポーネントコンテナになります。

## HOST1
|対象ホスト               |スタック名        |コンテナ名|
|:-----------------------|:----------------|:---------|
|HOST1|kubernetes|kubernetes-addon-starter-1|
|HOST1|kubernetes|kubernetes-controller-manager-1|
|HOST1|kubernetes|kubernetes-etcd-1|
|HOST1|kubernetes|kubernetes-kubectld-1|
|HOST1|kubernetes|kubernetes-1|
|HOST1|kubernetes|kubernetes-kubernetes-kube-hostname-updater-1(sidekicks)|
|HOST1|kubernetes|kubernetes-proxy-1|
|HOST1|kubernetes|kubernetes-rancher-ingress-controller-1|
|HOST1|kubernetes|kubernetes-rancher-kubernetes-agent-1|
|HOST1|kubernetes|kubernetes-scheduler-1|

|対象ホスト               |スタック名        |コンテナ名|
|:-----------------------|:----------------|:---------|
|HOST1|kube-system|monitoring-grafana|
|HOST1|kube-system|kubernetes-dashboard|
|HOST1|kube-system|tiller-deploy|
|HOST1|kube-system|heapster|
|HOST1|kube-system|monitoring-influxdb|
|HOST1|kube-system|kube-dns|

## HOST2
|対象ホスト               |スタック名        |コンテナ名|
|:-----------------------|:----------------|:---------|
|HOST2|kubernetes|kubernetes-proxy-2|
|HOST2|kubernetes|kubernetes-kubelet-2|
|HOST2|kubernetes|kubernetes-etcd-2|

## HOST3
|対象ホスト               |スタック名        |コンテナ名|
|:-----------------------|:----------------|:---------|
|HOST3|kubernetes|kubernetes-proxy-3|
|HOST3|kubernetes|kubernetes-kubelet-3|
|HOST3|kubernetes|kubernetes-etcd-3|

ホストを追加するごとに構成としては、HOST2,HOST3と同じ構成が作成されると思われます。

引き続き、それぞれのRancherのk8sとしての各コンポーネントコンテナの意味合いやPodを作成するとどうなるかなど、検証しながら更新していきたいと思います。