WordPress
docker
GoogleCloudPlatform
kubernetes
rancher

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
ディスクサイズ80GB
ファイアウォール HTTP トラフィックを許可する、HTTPS トラフィックを許可するの両方をチェックします。

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

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

image.png

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

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

1.Dockerのインストール

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

コマンド
$ 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のインストール

コマンド
$ 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

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

image.png

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

screencapture-35-200-80-195-g-clusters-2018-04-22-11_29_02.png

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

image.png

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

image.png

GKEとの連携

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

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

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

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

image.png

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

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

image.png

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

image.png

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

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

image.png

4.kubernetes clusterの構築完了

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

screencapture-35-200-80-195-g-clusters-2018-04-22-11_49_00.png

GKE側でも確認できます。

screencapture-console-cloud-google-kubernetes-list-2018-04-22-11_50_19.png

5.リソース状況の確認

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

image.png

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

screencapture-35-200-80-195-c-cluster-fflcr-2018-04-22-11_51_48.png

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

1.カタログ設定

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

image.png

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

image.png

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

image.png

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

screencapture-35-200-80-195-p-cluster-fflcr-project-v8v5m-apps-catalog-2018-04-22-12_00_27.png

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

image.png

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

image.png

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

image.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

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

コマンド
> 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

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

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

image.png

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

screencapture-104-198-121-36-wp-admin-2018-04-22-12_20_48.png

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

クラスタの削除

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

image.png

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

image.png

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

screencapture-35-200-80-195-g-clusters-2018-04-22-12_25_40.png

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

screencapture-console-cloud-google-kubernetes-list-2018-04-22-12_26_24.png

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