はじめに
業務でオンプレ環境にk8sクラスタを構築する必要があり、その候補のひとつとしてKublrが上がっていたのでインストールしてみた。
kublr v1.11.2 をdockerコンテナで稼働させてk8sクラスタを構築するところまでをやっています。
kublrとは
Enterprise Readyなコンテナ管理プラットフォーム。機能的にもManaged Kubernetesと同等なのかな?Rancher と近いものがあると思う。マルチクラスタを作成・管理することができ、各ノードにエージェントを入れてコントロールプレーンで統合管理する。
準備
- Kublrのアカウントを作成して、自分のKublr Licenseを取得する。
- GCPアカウント
- VM (ubuntu 16.04 LTS): 3 インスタンス
スペックは公式の推奨をちゃんと見たほうがいいです。
ノード | vCPU | Memory | Volume | |
---|---|---|---|---|
管理用 | 1 | 2GB | 10GB | ここにkublr-in-a-boxを入れる |
マスター | 2 | 4GB | 10GB | マスターとワーカーは一緒でもできるのかもしれないが、なぜかできなかったので分けている。公式にもできるとは書いていない(と思う) |
ワーカー | 4 | 16GB | 200GB |
参考
https://docs.kublr.com/quickstart/kublr-in-a-box/
https://docs.kublr.com/quickstart/onpremise/
インストール
kublrのインストール
主にGCPのブラウザからsshでターミナルを起動して管理用ノードを操作する。別にローカルマシンからsshで入ってもいい。
管理用ノードに docker をインストール
(*) Rancherのインストーラを拝借してインストールしました。
$ curl https://releases.rancher.com/install-docker/18.09.sh | sh
docker コマンドをsudo なしで実行できるようにしておく。(任意でいい)
でユーザ名を確認
$ whoami
<user name>
$ sudo usermod -aG docker <user name>
# 一回セッションを終わらせる
$ exit
kublr-in-a-boxをインストール
$ docker run --name kublr -d --restart=unless-stopped -p 9080:9080 -e KUBLR_HOST=<HOST_IP>:9080 -e KUBLR_LICENSE=<your-license> kublr/kublr:1.11.2
ブラウザで http://<HOST_IP>:9080
にアクセスするとKublrのコンソールが開く。
Username, Passwordは登録時にメールで届いているものを入力するとコンソールが表示される。
デフォルトは多分みんな同じ。
kublrの設定
sshで公開鍵認証を使用して他のノードにアクセスするための鍵を作成する。
$ whoami
<user name>
$ ssh-keygen -b 4096 -C <user name>
kublrの画面で設定に使用する秘密鍵を準備
$ cat ~/.ssh/id_rsa
画面に表示される秘密鍵をコピーして覚えておく。
次にkublrのUIから"Credentials"を選択し、"+ ADD CREDENTIALS"ボタンをして秘密鍵を登録しておく。
CREDENTIALS TYPE: "SSH Private Key"
NAME: 任意の名前
SSH Private Key: コピーした秘密鍵をペースト
入力が終わったら保存して終わり。
マスター、ワーカーノードの設定
いずれのノードも管理用ノードからSSHで接続するため、公開鍵認証によって接続できるようにしておく。
管理用ノードで公開鍵をコピーする
$ cat ~/.ssh/id_rsa.pub
画面に表示される公開鍵をコピーして覚えておく。
GCPのインスタンスの設定編集から公開鍵を登録する。
- ナビゲーションメニュー => Compute Engine => VM インスタンス
- 該当するノードの詳細画面を開き、編集。
- "SSH 認証鍵" のセクションで公開鍵をペーストして保存
マスター、ワーカーに公開鍵認証にて接続できることを確認しておく。
k8s クラスタの構築
kublrのUIから"Clusters"を選択し、"+ ADD CLUSTER" ボタンをして設定画面を開く。
設定項目名 | 設定値 | |
---|---|---|
Cluster Name | any name | 自分がクラスタにつけたい名前。なんでもいい |
Provider | BARE-METAL | 今回は手動にてIaaS上にクラスタを作成するため |
Masters | 1 node | |
Installation Type | Automated using SSH | 公開鍵をコピーしておいたのはこのため |
User Name | your-username |
whoami で取得したユーザ名 |
SSH Key Name | Credentialsで作成した秘密鍵の名前 | この鍵と各ノードに設定した公開鍵が対になっている必要がある |
IP/DNS of Master 1 | マスターノードの IP | |
Create Nodes | ||
> InstanceGroup 1 | ||
> > Installation Type | Automated using SSH | 公開鍵をコピーしておいたのはこのため |
> > User Name | 上のと同じ | |
> > SSH Key Name | 上のと同じ | |
> > Add IP/DNS Addresses | ワーカーノードの IP | |
その他の設定 | 好みで有効にしてみてください |
"CONFIRM AND INSTALL" を押すとクラスタの構築が開始する。
ちょっと待つと"Congratulation"的なメッセージが出るが、そこからすべての機能が立ち上がるまで結構時間がかかる。
最終的にClusterのステータス画面で、
Overall Status
Cluster is ready
と表示されるとクラスタ構築が完了。
失敗したことなど
- 社内の強固なproxy&FW環境下にあるデバッグ用サーバーにインストールしようとしたが、外部に何度かアクセスする処理があり、失敗。情報システム部と連携してインストールする必要がありそうなので途中でやめた。
- offlineでインストールはできないっぽい。
- 1VMインスタンスにシングルノード構成でクラスタ構築しようとしたところ、途中でdockerを再起動する処理があり、kublrコンテナも再起動され、script内で行っていた認証情報をすべて忘れてしまい、インストール途中で認証エラーになって止まる。結果、中途半端な状態でクラスタが構成されて何度もやり直す&デバッグする羽目に。。。