Rancher2.0 v2.0.0でGKEにkubernetesクラスタ構築からWordPressデプロイまで

Rancher2.0 v2.0.0とGKEを利用して、RancherでGKEにkubernetesクラスタを構築して、Rancherのカタログ機能からWordPressをデプロイしてみたいと思います。

# Rancher2.0 v2.0.0環境の構築

## GCEの準備
Compute Engineで以下の1インスタンスを作成します。

|項目               |入力概要        |
|:----------------------------------|:---------------------------------------------|
|名前|rancher-server|
|ゾーン|asia-northeast1-b|
|マシンタイプ|vCPUx1|
|ブートディスク|Ubuntu 16.04 LTS<br>ディスクサイズ80GB|
|ファイアウォール|HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方をチェックします。|

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

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f77516b5-299b-2feb-f51b-4d4a395ee08b.png)

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

## Rancher2.0 v2.0.0のインストール

1.Dockerのインストール

1.12.6, 1.13.1, 17.03.2のいずれかのDockerをインストールします。

```lang:コマンド
$ curl https://releases.rancher.com/install-docker/17.03.2.sh | sh
・
・（省略）
・
+ sudo -E sh -c docker version
Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:31:19 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:31:19 2017
 OS/Arch:      linux/amd64
 Experimental: false

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker iyutaka2018

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.
```

2.Rancher2.0 v2.0.0のインストール

```lang:コマンド
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
Unable to find image 'rancher/rancher:latest' locally
latest: Pulling from rancher/rancher
68393378db12: Pull complete 
9e3366501e0e: Pull complete 
156ec05da9a5: Pull complete 
281cba1133d9: Pull complete 
0acdc2cc8ed1: Pull complete 
a8cef3d8a877: Pull complete 
3e968117f1c2: Pull complete 
cf62fef10dfd: Pull complete 
098edd097869: Pull complete 
77a837c0bf2d: Pull complete 
Digest: sha256:38839bb19bdcac084a413a4edce7efb97ab99b6d896bda2f433dfacfd27f8770
Status: Downloaded newer image for rancher/rancher:latest
4d1e31ba7166f2a2748689ade8e9308b933d2944a8d46bcad9e415bbe32fbf1e
```

3.ブラウザを起動して、UIにアクセスします。

https://外部IP/

デフォルトユーザであるadminユーザのパスワード設定。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/6eaffd00-5705-63b3-62c0-fd8fb36ef395.png)

「Save URL」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b8901729-adb7-2abd-b369-fe73291f1370.png)

ログイン完了となります。

![screencapture-35-200-80-195-g-clusters-2018-04-22-11_29_02.png](https://qiita-image-store.s3.amazonaws.com/0/61606/27e456c2-a1c4-db41-fcb2-796ed14fbfec.png)

上部メニューから「Catalogs」を選択し、「Helm stable」を「Enable」に変更します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/11b90c17-32a4-0dda-8bb3-0c58de634ee4.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/a480e04a-dda4-44da-5725-3efb09febf3a.png)


# GKEとの連携

## サービスアカウントの作成

GKEと連携するために、GCPでサービスアカウントを作成し、jsonファイルをエクスポートします。

1.「APIとサービス」-「認証情報」を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/eb8a6987-7b7f-ef0a-01ca-d3edd43515d2.png)

2.「認証情報を作成」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ad58555e-e9bd-f299-55cc-a7925d7a1397.png)

3.「サービスアカウントキー」を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ffc204d5-838e-fc31-e20e-87fe1b573d87.png)

4.「新しいサービスアカウント」を選択し、サービスアカウントに任意名を入力し、役割でProjectからオーナーを選択して、作成ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/1191fdc7-2712-c9d6-3d8a-19283e43d723.png)

5.jsonファイルがダウンロードされます。その後「閉じる」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/6645d149-3e71-a98e-a06e-0c1926be8137.png)

## クラスタ作成からWordPressデプロイ

1.「Add Cluster」ボタンを押下

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ab6d907c-bdc5-15ae-b81b-1e86c423466e.png)

2.jsonファイルを読み込み

「Cluster Name」に任意の名前を入力し、「Read from a file」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/971be589-743a-725a-b293-cc1bd983623d.png)

ダウンロードしたjsonファイルを選択して、「開く」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/e41d9c75-30d5-0d72-6e77-424dbfdd2fa6.png)

3.Rancherからkubernetesクラスタ構築設定

「Zone」を「asia-northeast1-b」、 Machine Typeを「n1-standard-1(1 vCPU, 3.75 GB RAM)」に設定し、「Create」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ee4bb401-a401-2436-4e65-110cc5d3926f.png)

4.kubernetes clusterの構築完了

しばらくすると、構築が完了します。

![screencapture-35-200-80-195-g-clusters-2018-04-22-11_49_00.png](https://qiita-image-store.s3.amazonaws.com/0/61606/a0d37a62-3fa1-cce9-80d1-feb59d1dfebf.png)

GKE側でも確認できます。

![screencapture-console-cloud-google-kubernetes-list-2018-04-22-11_50_19.png](https://qiita-image-store.s3.amazonaws.com/0/61606/608c2b01-51e5-28b4-c645-38af1a4bf5f9.png)

5.リソース状況の確認

上部メニュー「Global」-「Cluster:gke-cluster」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/da1fa21d-141e-84c8-cf31-6eb22655eda1.png)

GKE上のkubernetesクラスタのリソース状況を確認できます。

![screencapture-35-200-80-195-c-cluster-fflcr-2018-04-22-11_51_48.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b5155837-a214-ca8a-1754-b7b7cddc850c.png)

# カタログ機能からWordPressをデプロイ

1.カタログ設定

上部メニュー「Global」-「Cluster:gke-cluster」-「Default」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b2f8fd1b-b537-5941-082c-c7762eb8b20f.png)

上部メニュー「Catalog App」を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/e9812577-0e82-6104-ca1c-ecf75105836e.png)

「Launch」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/bd6c9588-50ac-ad71-7ae5-648e6f5159b7.png)


カタログ一覧が表示されます。

![screencapture-35-200-80-195-p-cluster-fflcr-project-v8v5m-apps-catalog-2018-04-22-12_00_27.png](https://qiita-image-store.s3.amazonaws.com/0/61606/d65e520a-e1ee-1cb2-2d3e-9d9e7388b0d7.png)

WordPressの「View Details」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/1a76447d-4570-f158-2e6b-9ee4b6918001.png)

「Add Answer」ボタンを押下し、「Variable」に「wordpressPassword」、「Value」にWordPressログインユーザのパスワードを設定し、「Launch」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b44914b4-c9ed-95f1-68a3-cfeffaad59e0.png)

ちなみに、Configuretionについては、カタログ上部に詳細が記載されているので、初期ユーザやMySQLのDBパスワードなど設定できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/eb4cf369-c24d-eade-7c56-464672fa480b.png)


default設定の詳細は以下となります。

| ﻿Parameter                      | Description                                | Default                                      |
|:---------|:---------|:---------|
| image                          | WordPress image                            | bitnami/wordpress:{VERSION}                  |
| imagePullPolicy                | Image pull policy                          | IfNotPresent                                 |
| wordpressUsername              | User of the application                    | user                                         |
| wordpressPassword              | Application password                       | random 10 character long alphanumeric string |
| wordpressEmail                 | Admin email                                | `user@example.com`                           |
| wordpressFirstName             | First name                                 | FirstName                                    |
| wordpressLastName              | Last name                                  | LastName                                     |
| wordpressBlogName              | Blog name                                  | User's Blog!                                 |
| allowEmptyPassword             | Allow DB blank passwords                   | yes                                          |
| smtpHost                       | SMTP host                                  | nil                                          |
| smtpPort                       | SMTP port                                  | nil                                          |
| smtpUser                       | SMTP user                                  | nil                                          |
| smtpPassword                   | SMTP password                              | nil                                          |
| smtpUsername                   | User name for SMTP emails                  | nil                                          |
| smtpProtocol                   | SMTP protocol [tls, ssl]                   | nil                                          |
| mariadb.enabled                | Deploy MariaDB container(s)                | TRUE                                         |
| mariadb.mariadbRootPassword    | MariaDB admin password                     | nil                                          |
| mariadb.mariadbDatabase        | Database name to create                    | bitnami_wordpress                            |
| mariadb.mariadbUser            | Database user to create                    | bn_wordpress                                 |
| mariadb.mariadbPassword        | Password for the database                  | random 10 character long alphanumeric string |
| externalDatabase.host          | Host of the external database              | localhost                                    |
| externalDatabase.rootPassword  | DB Root users password (schema creation)   | nil                                          |
| externalDatabase.user          | Existing username in the external db       | bn_wordpress                                 |
| externalDatabase.password      | Password for the above username            | nil                                          |
| externalDatabase.database      | Name of the existing database              | bitnami_wordpress                            |
| externalDatabase.port          | Database port number                       | 3306                                         |
| serviceType                    | Kubernetes Service type                    | LoadBalancer                                 |
| healthcheckHttps               | Use https for liveliness and readiness     | FALSE                                        |
| ingress.enabled                | Enable ingress controller resource         | FALSE                                        |
| ingress.hosts[0].name          | Hostname to your WordPress installation    | wordpress.local                              |
| ingress.hosts[0].path          | Path within the url structure              | /                                            |
| ingress.hosts[0].tls           | Utilize TLS backend in ingress             | FALSE                                        |
| ingress.hosts[0].tlsSecret     | TLS Secret (certificates)                  | wordpress.local-tls-secret                   |
| ingress.hosts[0].annotations   | Annotations for this host's ingress record | []                                           |
| ingress.secrets[0].name        | TLS Secret Name                            | nil                                          |
| ingress.secrets[0].certificate | TLS Secret Certificate                     | nil                                          |
| ingress.secrets[0].key         | TLS Secret Key                             | nil                                          |
| persistence.enabled            | Enable persistence using PVC               | TRUE                                         |
| persistence.storageClass       | PVC Storage Class                          | nil (uses alpha storage class annotation)    |
| persistence.accessMode         | PVC Access Mode                            | ReadWriteOnce                                |
| persistence.size               | PVC Storage Request                        | 10Gi                                         |
| nodeSelector                   | Node labels for pod assignment             | {}                                           |

上部メニューから「Workloads」を選択して、デプロイできたことを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/9f7a1ec5-0ef6-4b10-b48e-8709501981de.png)

2.Google Cloud SDK ShellでEXTERNAL-IPの確認

```lang:コマンド
> gcloud container clusters get-credentials gke-cluster --zone asia-northeast1-b --project 対象のproject名
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-fflcr.
> kubectl get -n wordpress services
NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
wordpress-mariadb     ClusterIP      10.35.249.117   <none>           3306/TCP                     6m
wordpress-wordpress   LoadBalancer   10.35.248.193   104.198.121.36   80:32538/TCP,443:32302/TCP   6m
```

ブラウザを起動して、http://EXTERNAL-IP/ にアクセスします。

※EXTERNAL-IPが取得できない場合は、再度1.0のwordpressをカタログからデプロイして、デプロイ後に最新版のwordpressにRancherサーバからアップグレードすることで解決できます。

![screencapture-104-198-121-36-2018-04-22-12_17_19.png](https://qiita-image-store.s3.amazonaws.com/0/61606/e60c8537-6837-71b7-dd67-4d22cbe82e32.png)

WordPressのダッシュボードにアクセスします。http://EXTERNAL-IP/wp-login.php

初期ユーザ名の「user」とデプロイ時に設定した「wordpress12345」のパスワードでログインします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/cdf16b0b-9d57-c7d0-2a93-ffa6734561f3.png)

ログイン完了となります。

![screencapture-104-198-121-36-wp-admin-2018-04-22-12_20_48.png](https://qiita-image-store.s3.amazonaws.com/0/61606/06479382-4a7c-db1a-ef90-871f3724f0af.png)

GKEの場合は、EXTERNAL-IPが振られますが、kubeadmやRKE等でクラスタを作成した場合は、Ingressで外部のエンドポイントを設定する必要があると思われます。Rancher2.0ではその設定もUIからできます。

## クラスタの削除

上部メニュー「Global」を選択し、「gke-cluster」の左にあるチェックボックスにチェックを入れて、「Delete」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c1259a13-d79f-4125-6387-8eeafc7765f0.png)

「Delete」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/b5e7f30d-7a2c-ecae-0ac0-5bd64b70f3b9.png)

削除されると以下の画面になります。

![screencapture-35-200-80-195-g-clusters-2018-04-22-12_25_40.png](https://qiita-image-store.s3.amazonaws.com/0/61606/061ca52e-7164-38b2-63b2-58bdeaf503f3.png)

GKE側でも削除されていることを確認します。

![screencapture-console-cloud-google-kubernetes-list-2018-04-22-12_26_24.png](https://qiita-image-store.s3.amazonaws.com/0/61606/4757249d-c115-d91d-7117-f97886ce5d5d.png)

今回は、GKEでやってみました。Rancher2.0 v2.0.0では他のクラウドベンダーのkubernetesマネージドサービス、オンプレミスの既存のkubernetesクラスタをImport,Create,Manageができるので、同様のことも可能と思われます。