トップゲートのインフラエンジニア兼プロジェクトマネージャをやっています堤です。
私はDockerやKubernetesなどのコンテナ技術が好きで、2年ぐらい前から触っています。
昨今、Kubernetesがとても注目されていますが、結構扱うにはハードルが高いプロダクトではないかと思います。特に自前でKubernetesクラスタを構築/管理するとなると、かなり大変で骨が折れる。まあ、そこでGKEなどのマネージドなKubernetesサービスがクラウド各社からリリースされているものの、それでもkubectlなどのコマンドを使ったオペレーションが必要になってきます。
そこで、Rancherの登場です。Rancherは、GUIでクラスタ構築から、アプリケーションのデプロイまでやってくれるプロダクトです。日本国内でも熱くなっているプロダクトですが、実は中国ではバリバリ使われている製品です。
さて、ここでは、Rancherを使ってGKEクラスタを作成するところまでガイドしたいと思います。
1. 下準備
1-1. GCEを構築する
- OS: Ubuntu 18.04
- インスタンス: n1-standard-1(vCPU x 1、メモリ 3.75 GB)
- ストレージ: 100GB
1-2. Dockerをインストールする
Rancherを構築するには、Dockerが必要です。ここでは Docker のインストール方法の詳細は書きませんので、以下のドキュメントを参考に構築してください。
あと、GCEでDockerをインストールしてdocker info
を実行すると、なぜか以下のNo Swap Limit Support
が表示される。
$ docker info
Client:
Debug Mode: false
Server:
Containers: 0
<中略>
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No swap limit support
この警告を回避するには、「/etc/default/grub.d/50-cloudimg-settings.cfg」を以下のように変更する。
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0.1
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0.1
# GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
GRUB_RECORDFAIL_TIMEOUT=0
GRUB_TERMINAL=console
編集が完了したら、update-grubを実行してサーバを再起動する。
sudo update-grub
sudo reboot
2. Rancherのインストール
Rancherのインストールはとても簡単です。今回はLet's EncrpytでSSL証明書を自動取得します。予めCloud DNSでRancherサーバのAレコードを登録しておきます。
$ sudo docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest \
--acme-domain RANCHER.YOURDOMAIN.ORG
しばらくするとコンテナが立ち上がり、https://RANCHER.YOURDOMAN.ORG
で接続できるようになります。接続するとadmin
のパスワードを設定して、ログインすると以下の画面が立ち上がります。
![Rancher Console](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2Fc5f0cd48-0f6f-2d9e-5c4e-44ba9184ba20.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e6392a9e61c3c4ba6fc0bf89047866a9)
3. GKE クラスタ登録
3-1. サービスアカウントの作成
まず、RancherからGKEクラスタを操作させるためのサービスアカウントを作成します。
$ gcloud iam service-accounts create rancher \
--description "Rancher server" \
--display-name "rancher"
Created service account [rancher].
次に作成したサービスアカウントに対してロールを割り当てます。割り当てるロールは下記4つです。gcloud projects add-iam-policy-binding
コマンドでは、一つずつしかroleが割り当てられないので、4回コマンドを実行する必要があります。
- roles/compute.viewer
- roles/viewer
- roles/container.admin
- roles/iam.serviceAccountUser
$ gcloud projects add-iam-policy-binding <PROJECT-NAME> \
--member serviceAccount:rancher@<PROJECT-NAME>.iam.gserviceaccount.com \
--role roles/compute.viewer
$ gcloud projects add-iam-policy-binding <PROJECT-NAME> \
--member serviceAccount:rancher@<PROJECT-NAME>.iam.gserviceaccount.com \
--role roles/viewer
$ gcloud projects add-iam-policy-binding <PROJECT-NAME> \
--member serviceAccount:rancher@<PROJECT-NAME>.iam.gserviceaccount.com \
--role roles/container.admin
$ gcloud projects add-iam-policy-binding <PROJECT-NAME> \
--member serviceAccount:rancher@<PROJECT-NAME>.iam.gserviceaccount.com \
--role roles/iam.serviceAccountUser
そして、サービスアカウントキーを生成します。
gcloud iam service-accounts keys create ~/rancher-key.json \
--iam-account rancher@<PROJECT-NAME>.iam.gserviceaccount.com
3-2. GKEクラスタの作成
次に、RancherでGKEクラスタを構成したいと思います。まずは、Clusters→Add Cluster
を選択します。
![ScreenShot 2019-11-08 15.38.17.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2F9f9fcbe3-21a3-b036-fc2c-a9e518cfe3e3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=bb815376eaf49b8a3caba208a9c12826)
次に、Google GKE
を選びます。
![ScreenShot 2019-11-08 15.39.30.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2Ff180f9ea-b56e-d7c1-0676-7d2b8063022d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=15ef060b8e29c28a85fbbf5f2b196174)
先程生成したサービスアカウントの鍵rancher-key.json
を読み込みます。認証にパスしますと、ノードの設定画面が自動的にロードされます。
![ScreenShot 2019-11-11 18.44.49.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2F428940a0-2b21-b7fe-9b3e-0491da19a3a7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5a8cfd9e62322d6ea41b4be1c7fbdde2)
以下のようにクラスタを構成したいと思います。
- ノードの数:3つ
- ゾーン: asia-northeast1-a, asia-northeast1-b, asia-northeast1-c
- OS: Container-Optimized OS
各ゾーンに1つずつノードを配置するパターンです。まず、Zoneのところにasia-northeast1-a
を選択して、Additional Zoneにasia-northeast1-b
とasia-northeast1-c
のチェックを入れます。
![ScreenShot 2019-11-11 14.45.25.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2Fbb31080c-3b8c-4dec-e6e3-f67fd94ddb37.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f6729b74782b68a3091389504622f0c5)
そして、Node Countのところに「1」を選択します。こうすることで、上で選択したZoneに対して一つずつ配備する形になります。そして一番下にあるCreate
を押して、しばらく待ちます。
![ScreenShot 2019-11-11 14.45.55.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2F9123266b-82e6-8f98-a809-af72cf1f1cca.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0a213189a66229957f9400893b4ec5b3)
最終的には、クラスタができて、以下のようになります。
![ScreenShot 2019-11-11 18.49.50.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2Fbe342a25-ce7d-7394-4b2b-ced292c6fb13.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6ed3b50ca8b5d2ca9179f0e90d96a3bf)
GCPのGKEコンソール画面の「ノードゾーン」を参照すると、asia-northeast1-a〜cにノードができていることがわかります。
![ScreenShot 2019-11-11 14.54.05.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F92726%2Fb06adf8b-b66a-d807-3782-0baae980ae5d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b00bcc89ca14f9b5f5c0a5458ca4eaaa)
次は、Rancherを使ってアプリケーションのデプロイをやってみたいと思います。