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

Rancher2.0 TechPreview2からカタログ機能がHelm対応されて、GKE等のkubernetesクラスタをRancher側にインポートした後、Rancherのカタログ機能からデプロイできるようになりました。まずは、GKEで試してみたいと思います。

# Rancher2.0 Tech Preview2 alpha21環境の構築

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

|項目               |入力概要        |
|:----------------------------------|:---------------------------------------------|
|名前|rancher-server|
|ゾーン|asia-northeast1-b|
|マシンタイプ|vCPUx1|
|ブートディスク|Ubuntu 16.04 LTS<br>ディスクサイズ80GB|
|ファイアウォール|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、プロトコルとポートは全て許可とします。
今回はお試しということで、全許可にしています。
最後に「作成」ボタンをクリックします。

## Rancher2.0 Tech Preview2 alpha21のインストール

1.Dockerのインストール

最新版のDockerをインストールします。

```lang:コマンド
$ curl -fsSL https://get.docker.com/ | sh
# Executing docker install script, commit: 02d7c3c
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
+ sudo -E sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial edge" > /etc/apt/sources.list.d/docker.list
+ [ ubuntu = debian ]
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sudo -E sh -c docker version
Client:
 Version:       18.02.0-ce
 API version:   1.36
 Go version:    go1.9.3
 Git commit:    fc4de44
 Built: Wed Feb  7 21:16:33 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      18.02.0-ce
  API version:  1.36 (minimum version 1.12)
  Go version:   go1.9.3
  Git commit:   fc4de44
  Built:        Wed Feb  7 21:15:05 2018
  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 cyberblackvoom

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 Tech Preview2 alpha21のインストール

```lang:コマンド
$ sudo docker run -d -p 80:80 -p 443:443 rancher/server:preview
Unable to find image 'rancher/server:preview' locally
preview: Pulling from rancher/server
c3b9c0688e3b: Pull complete 
e9fb5affebb0: Pull complete 
0f1378f511ad: Pull complete 
96a961dc7843: Pull complete 
16564141bc83: Pull complete 
e58cffa0cb0e: Pull complete 
ae52f3198700: Pull complete 
226b9ead1a79: Pull complete 
c6d73e35a6a4: Pull complete 
05529e6df84b: Pull complete 
Digest: sha256:b997803f07db1ae22ab47f513a43c70bb39c054aac8aebca4a6cfb0fc908300f
Status: Downloaded newer image for rancher/server:preview
4113f312bf487f372f5909059b13a6fb015cd50ac0e45f29091efddf3fe21e96
```

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

https://外部IP/

以下の初期Usernameと初期Passwordでログインします。

|項目               |入力概要        |
|:----------------------------------|:---------------------------------------------|
|Username|admin|
|Password|admin|

![screencapture-35-200-92-0-login-2018-03-13-12_24_40.png](https://qiita-image-store.s3.amazonaws.com/0/61606/99e8a535-c979-6e3c-fb52-a430865e0ef3.png)

次に初期パスワード変更を求められますので、任意のパスワードを入力します。

![screencapture-35-200-92-0-login-2018-03-13-12_28_29.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c2553f5d-c2ec-f24b-1489-2b7ecb0378de.png)

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

![screencapture-35-200-92-0-g-clusters-2018-03-13-12_29_31.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ffb64b5b-c226-2e23-cb1f-b9ef30a84e5c.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/8d2f03ec-88d2-8e6b-e3ab-6bd102fb8b1a.png)

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

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/eeb8e98e-c7b9-10e5-71f5-6830c03853fa.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」に設定し、「Create」ボタンを押下します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/18fbd88b-034c-3ddf-0090-04905ec865d2.png)

4.kubernetes clusterの構築完了

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

![screencapture-35-200-92-0-g-clusters-2018-03-13-13_15_08.png](https://qiita-image-store.s3.amazonaws.com/0/61606/ee0bd3b3-86a4-eb6c-52b4-cfceef906807.png)

GKE側でも確認できます。

![screencapture-console-cloud-google-kubernetes-list-2018-03-13-13_15_41.png](https://qiita-image-store.s3.amazonaws.com/0/61606/4260bc15-2970-6273-4f12-6e9385420958.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-92-0-c-cluster-qgd2w-2018-03-13-13_18_13.png](https://qiita-image-store.s3.amazonaws.com/0/61606/f06f9ac6-e9d1-a938-bede-619f60807ea7.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/e12a3590-8a29-f42a-fb27-952d91e7b8a1.png)

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

![screencapture-35-200-92-0-p-cluster-qgd2w-project-2qzq8-apps-catalog-2018-03-13-13_32_45.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8d2ee365-623a-4a6b-0062-db0e3a5ea31b.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/8f239abb-084a-3d3c-d456-8207a77f84aa.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/3a356998-5454-d2a4-4ff3-4b79aa6772e7.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/61606/54bddd44-ff39-a56c-b345-4fb39fc12ac7.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             | {}                                           |

デプロイできたことを確認します。

![screencapture-35-200-92-0-p-cluster-qgd2w-project-2qzq8-workloads-2018-03-13-14_13_05.png](https://qiita-image-store.s3.amazonaws.com/0/61606/310f174f-babd-5b4e-9c15-6442ebf5ee56.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 gke-cluster.
> kubectl get -n wordpress services
NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
wordpress-mariadb     ClusterIP      10.59.241.199   <none>          3306/TCP                     9m
wordpress-wordpress   LoadBalancer   10.59.255.28    35.200.80.195   80:32097/TCP,443:31543/TCP   9m
```

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

![screencapture-35-200-80-195-2018-03-13-15_37_04.png](https://qiita-image-store.s3.amazonaws.com/0/61606/659532c5-16b4-671b-4c2f-2e17074cd296.png)

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

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

![screencapture-35-200-80-195-wp-login-php-2018-03-13-15_39_23.png](https://qiita-image-store.s3.amazonaws.com/0/61606/9aa28941-e35b-af17-fb04-f9abc9f8eff5.png)

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

![screencapture-35-200-80-195-wp-admin-2018-03-13-15_39_57.png](https://qiita-image-store.s3.amazonaws.com/0/61606/bbf75edb-3b6c-7961-5d04-329bb5e5458f.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/bc63a005-9c0e-1dff-6f61-cc9be48cec52.png)

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

![screencapture-35-200-92-0-g-clusters-2018-03-13-15_50_15.png](https://qiita-image-store.s3.amazonaws.com/0/61606/84934fb2-b121-6002-fd6b-1b23b0d0c752.png)

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

![screencapture-console-cloud-google-kubernetes-list-2018-03-13-15_51_22.png](https://qiita-image-store.s3.amazonaws.com/0/61606/c668f039-8e3a-c36c-ce3c-87de4b3e8297.png)

今回は、GKEでやってみました。Rancher2.0 Tech Preview2 alpha21からMicrosoft AzureのAKS(Azure Container Service)との連携もサポートされましたので、同じことがAKSでも可能と思われます。

k8s上にカタログからデプロイできる様子を見るとRancherらしくなってきました。GAももうすぐではないでしょうか。