WordPress
docker
GoogleCloudPlatform
kubernetes
rancher

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

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

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

image.png

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

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

1.Dockerのインストール

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

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

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

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

screencapture-35-200-92-0-login-2018-03-13-12_28_29.png

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

screencapture-35-200-92-0-g-clusters-2018-03-13-12_29_31.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」に設定し、「Create」ボタンを押下します。

image.png

4.kubernetes clusterの構築完了

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

screencapture-35-200-92-0-g-clusters-2018-03-13-13_15_08.png

GKE側でも確認できます。

screencapture-console-cloud-google-kubernetes-list-2018-03-13-13_15_41.png

5.リソース状況の確認

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

image.png

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

screencapture-35-200-92-0-c-cluster-qgd2w-2018-03-13-13_18_13.png

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

1.カタログ設定

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

image.png

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

image.png

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

image.png

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

screencapture-35-200-92-0-p-cluster-qgd2w-project-2qzq8-apps-catalog-2018-03-13-13_32_45.png

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

image.png

「Add Answer」ボタンを押下し、ログインユーザのパスワードを設定し、「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 {}

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

screencapture-35-200-92-0-p-cluster-qgd2w-project-2qzq8-workloads-2018-03-13-14_13_05.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 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

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

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

screencapture-35-200-80-195-wp-login-php-2018-03-13-15_39_23.png

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

screencapture-35-200-80-195-wp-admin-2018-03-13-15_39_57.png

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

クラスタの削除

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

image.png

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

screencapture-35-200-92-0-g-clusters-2018-03-13-15_50_15.png

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

screencapture-console-cloud-google-kubernetes-list-2018-03-13-15_51_22.png

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

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