退屈なことはMAAS(Metal as a Service)にやらせよう
はじめに
Kubernetesクラスタ作りたいけど、OSのインストールめんどくさいな~って人を対象にしています。
MAAS(Metal as a Service)とはなんぞや?
Ubuntuの開発元、Canonicalが開発しているOSデプロイツール。
仮想マシンをツールから簡単に作れるように、ネットワーク上の物理マシンにOSをデプロイできるすぐれもの。すごいね。(なんと仮想マシンにも使えたりする)
デプロイできるOSはUbuntu, Windows, CentOS, VMWareESXi, Red Hat, RHELです。
インストールしよう
構成
今回は図のような構成で行っています。
インストール
本番用の手順に従います。
前準備
$ sudo apt update -y
$ sudo apt install -y postgresql
$ sudo snap install --channel=3.2 maas
$ export MAAS_DBUSER=maasadmin
$ export MAAS_DBPASS=maasadmin
$ export MAAS_DBNAME=maasdb
$ export HOSTNAME=localhost #もしPostgreSQLと同じマシンにインストールするならlocalhostでおk
PostgreSQLの準備
$ sudo -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\" WITH ENCRYPTED PASSWORD '$MAAS_DBPASS'"
$ sudo -u postgres createdb -O "$MAAS_DBUSER" "$MAAS_DBNAME"
下の内容を/etc/postgresql/14/main/pg_hba.conf
に追記します。(14の部分はインストールされたPostgreSQLのバージョンに合わせてください)
$MAAS_DBNAME
と$MAAS_DBUSER
は実際の値に置き換えてください。
また、0/0
となってるCIDRは、あなたのいいように書き換えちゃってください(私は127.0.0.1/32
にしました)。
host $MAAS_DBNAME $MAAS_DBUSER 0/0 md5
MAASの初期化
$ sudo maas init region+rack --database-uri "postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME"
するとブラウザからMAASにアクセスする時のURLを聞かれますが、よくわからない方はそのままEnterをッターンしてください。
ブラウザからMAASにアクセスして↓の画像のようになればひとまずインストール成功です。
お疲れ様でした。一旦寝ましょう。
MAASの初期設定
おはようございます。
MAASにアクセスすると、「管理者ユーザー作れ」と言われるので、作りましょう。
下のコマンドを実行します。
$ sudo maas createadmin
ユーザー名とパスワード、メールアドレスを聞かれますので、よしなにしてください。
その後Import SSH keysと、LaunchPadまたはGitHubのアカウント名を聞かれますが、今回は使いませんので、そのままEnterをッターンしてください。
ブラウザに戻り、Retryボタンを押すとログイン画面になるので、先程設定したユーザー名とパスワードでログインします。
色々聞かれますが、デフォルト設定で進めて大丈夫です。
最後にもう一度SSHキーを聞かれるので、クラスタにSSHでアクセスする予定のPCで鍵を発行して、それを貼り付けましょう。
これで初期設定は終わりです。
DHCPの有効化
DHCPの設定をします。Subnetsタブを開き、VLAN列のuntaggedを開きます。
少しスクロールしてConfigure DHCPをクリックします。
Select Rack Controllerとなっているところからmaasを選択します。そしてConfigure DHCPをクリックするとDHCP機能がオンになり、ネットワークブートさせることができるようになります。
ちなみに、DHCPの範囲はReserved rangesを変更することで行なえます。
さあ、退屈なことをやらせよう
Machineの登録
まず、登録したいPCのBIOS設定から、起動順序の一番上にPXE IPv4を設定しておいてください。
設定を保存してシャットダウンしておきます。
登録したいPCのLANをMAASと同じネットワークに接続したら、電源オン!!!!!!!!!!
しばらくしたら、Machinesタブに登録したいPCが現れます。
↓
次にマシン名をクリックして、Power type> をクリックしてください。ここでは電源タイプを設定します。
登録したいPCに合った電源タイプにしましょう。私はめんどくさいのでManualを選びました(ぉ
電源タイプを設定したら、右上のTake actionからCommission...をクリックし、Start commissioning for machineをクリックします。先程設定した電源タイプがManual以外なら自動でPCが起動しているはずです。Manualに設定したあなたは自分でPCの電源を入れに行きましょう。
しばらくしたらステータスがReadyになります。
もうOSはDeployできるのですが、Kubernetesクラスタを作るためにIPアドレスを固定します。
IPアドレスを固定したい場合は、マシン名をクリックしてNetworkタブを開きます。IPアドレスを設定したいNICの右端にある﹀から、Edit Physicalをクリックします。
右下のIP modeをStatic assignにし、IP address欄を好みのIPアドレスにします。
IPアドレスを設定したら、右上のTake actionからAllocate...をクリックし、Allocate machineをクリックします。
・・・みたいなことを計4回繰り返した結果がこれ↓です。いよいよクラスタを作ります。
クラスタの構築
今回使用するディストリビューションはK3sです。選んだ理由はクラスタの構築が簡単すぎるからです。
Cloud-init user-data...にチェックをいれ、下の欄にcloud-configを記述していきます。
下に記述例を載せておきます。参考にどうぞ。
#cloud-config
package_update: true
pakcage_upgrade: true
runcmd:
- apt-get update -y
- curl -sfL https://get.k3s.io | sh -
cloud-configの記述が終わったら、Start deployment for machineをクリック!!!!!!例によって電源タイプManualのあなたは電源を入れに行ってください。
Deployが始まりました。温かい目で見守ってあげてください。
無事デプロイ出来ました(一回Failedになったのは内緒)。
後のやり方はもう察してください
先程デプロイしたPCにSSHでアクセスして、K3sのトークンをゲットしましょう。
$ sudo cat /var/lib/rancher/k3s/server/node-token
ワーカーノードにしたいPCにチェックを入れ、サーバーノードと同じようにデプロイします。
そのとき、cloud-configはワーカーノード用に変更しておきます。
#cloud-config
package_update: true
pakcage_upgrade: true
runcmd:
- apt-get update -y
- curl -sfL https://get.k3s.io | K3S_URL=https://172.13.100.1:6443 K3S_TOKEN=ここにトークン sh -
無事にすべてのPCにデプロイが完了しました。
マスターノードにログインしてkubectl get nodes
してみましょう。
やったぜ。
お疲れ様でした。あとは煮るなり焼くなり好きにしてください。
最後に
「結局退屈でめんどくさかったよ」って思いましたか?思いましたよね?私も思ってます
初回は大変ですが、一度構築するとクラスタの規模を大きくしたいときに楽ちんです。
これを機にMAASを使ってくれる人が増えればいいなと思っています。ちなみにMAASの競合にForemanというものがありますので、どなたか記事を書いてください(ぉ
別件ですが今回初めてZennの記事を書きました、結構しんどかったです。
これからもめげずに記事を書いていこうと思います。
参考文献
Discussion
NodeのプライベートIPアドレスには突っ込まないでください・・・(後で知って恥ずかしい)