Rancher 2.3 を使って GKE を構築してみた


トップゲートのインフラエンジニア兼プロジェクトマネージャをやっています堤です。

私は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」を以下のように変更する。

/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-basia-northeast1-cのチェックを入れます。

そして、Node Countのところに「1」を選択します。こうすることで、上で選択したZoneに対して一つずつ配備する形になります。そして一番下にあるCreateを押して、しばらく待ちます。

最終的には、クラスタができて、以下のようになります。

GCPのGKEコンソール画面の「ノードゾーン」を参照すると、asia-northeast1-a〜cにノードができていることがわかります。

次は、Rancherを使ってアプリケーションのデプロイをやってみたいと思います。