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のダッシュボードで、「ネットワーキング」-「ファイアウォール」を選択して、ファイアウォールルールを作成します。
名前は任意名、ソース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 |
次に初期パスワード変更を求められますので、任意のパスワードを入力します。
ログイン完了となります。
GKEとの連携
サービスアカウントの作成
GKEと連携するために、GCPでサービスアカウントを作成し、jsonファイルをエクスポートします。
1.「APIとサービス」-「認証情報」を選択
2.「認証情報を作成」を選択します。
3.「サービスアカウントキー」を選択
4.「新しいサービスアカウント」を選択し、サービスアカウントに任意名を入力し、役割でProjectからオーナーを選択して、作成ボタンをクリックします。
5.jsonファイルがダウンロードされます。その後「閉じる」を選択します。
クラスタ作成からWordPressデプロイ
1.「Add Cluster」ボタンを押下
2.jsonファイルを読み込み
「Cluster Name」に任意の名前を入力し、「Read from a file」ボタンを押下します。
ダウンロードしたjsonファイルを選択して、「開く」ボタンを押下します。
3.Rancherからkubernetesクラスタ構築設定
「Zone」を「asia-northeast1-b」に設定し、「Create」ボタンを押下します。
4.kubernetes clusterの構築完了
しばらくすると、構築が完了します。
GKE側でも確認できます。
5.リソース状況の確認
上部メニュー「Global」-「Cluster:gke-cluster」を選択します。
GKE上のkubernetesクラスタのリソース状況を確認できます。
カタログ機能からWordPressをデプロイ
1.カタログ設定
上部メニュー「Global」-「Cluster:gke-cluster」-「Default」を選択します。
上部メニュー「Catalog App」を選択
「Launch」ボタンを押下します。
カタログ一覧が表示されます。
WordPressの「View Details」ボタンを押下します。
「Add Answer」ボタンを押下し、ログインユーザのパスワードを設定し、「Launch」ボタンを押下します。
ちなみに、Configuretionについては、カタログ上部に詳細が記載されているので、初期ユーザやMySQLのDBパスワードなど設定できます。
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 | {} |
デプロイできたことを確認します。
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/ にアクセスします。
WordPressのダッシュボードにアクセスします。http://EXTERNAL-IP/wp-login.php
初期ユーザ名の「user」とデプロイ時に設定した「wordpress12345」のパスワードでログインします。
ログイン完了となります。
GKEの場合は、EXTERNAL-IPが振られますが、kubeadmやRKE等でクラスタを作成した場合は、Ingressで外部のエンドポイントを設定する必要があると思われます。Rancher2.0ではその設定もUIからできます。
クラスタの削除
上部メニュー「Global」を選択し、「gke-cluster」の左にあるチェックボックスにチェックを入れて、「Delete」ボタンを押下します。
削除されると以下の画面になります。
GKE側でも削除されていることを確認します。
今回は、GKEでやってみました。Rancher2.0 Tech Preview2 alpha21からMicrosoft AzureのAKS(Azure Container Service)との連携もサポートされましたので、同じことがAKSでも可能と思われます。
k8s上にカタログからデプロイできる様子を見るとRancherらしくなってきました。GAももうすぐではないでしょうか。