トップゲートのインフラエンジニア兼プロジェクトマネージャをやっています堤です。
私は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
のパスワードを設定して、ログインすると以下の画面が立ち上がります。
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
を選択します。
次に、Google GKE
を選びます。
先程生成したサービスアカウントの鍵rancher-key.json
を読み込みます。認証にパスしますと、ノードの設定画面が自動的にロードされます。
以下のようにクラスタを構成したいと思います。
- ノードの数: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
のチェックを入れます。
そして、Node Countのところに「1」を選択します。こうすることで、上で選択したZoneに対して一つずつ配備する形になります。そして一番下にあるCreate
を押して、しばらく待ちます。
最終的には、クラスタができて、以下のようになります。
GCPのGKEコンソール画面の「ノードゾーン」を参照すると、asia-northeast1-a〜cにノードができていることがわかります。
次は、Rancherを使ってアプリケーションのデプロイをやってみたいと思います。