meta = { post: "2022/03/08" updated: "" authors: ["山D"] };

ラズパイでk0sクラスタ構築

やったのでメモ.

ラズパイのセットアップ

自動化って何

まず,SDカードを用意し,raspi.debian.netから適切なイメージのxzアーカイブをダウンロードする. ここでは11(bullseye)を使用する.

1. イメージをSDカード(/dev/sd$x$)に焼く・$\dag\mathrm{rootfs}\dag$のマウント

# dd if=20220121_raspi_2_bullseye.img of=/dev/sdx status=progress
# mount /dev/sdx2 /mnt

2. ネットワークの設定

注意して適宜読み替えること.

まず,IPを固定する.

/mnt/etc/network/interfadces.d/eth0inetautoからstaticに変更する :

auto eth0
iface eth0 inet static
  address 192.168.hoge.fuga/24
  gateway 192.168.hoge.1
iface eth0 inet6 auto

無線接続を考えているのであればwpa_supplicant.confを用意すればよさげ.

次に,resolv.confを置く. raspbianとかを使ってるなら必要無いかも.

/mnt/etc/resolv.confを次のようにする :

nameserver 192.168.hoge.1
nameserver 1.1.1.1

最後に,hostnameを設定する. これはシェルで操作する時にわかりやすくするため.

/mnt/etc/hostnameを編集する.

3. sshの設定

今回はrootでもsshが使えるように設定していく.

まず,/mnt/etc/ssh/sshd_configを編集する :

--- /mnt/etc/ssh/sshd_config
+++ new
@@ -15 +15 @@
-#Port 22
+Port 22
@@ -34 +34 @@
-#PermitRootLogin prohibit-password
+PermitRootLogin prohibit-password

次に,公開鍵を登録する. 鍵の作成方法については各自ggること.

# mkdir -p /mnt/root/.ssh
# echo "ssh-xxxx xxxxxxxxxxxxxxxx" >> /mnt/root/.ssh/authorized_keys

4. sshdを有効化する

最初に$\dag\mathrm{rootfs}\dag$をアンマウントしている.

# umount /mnt
# mount /dev/sdx1 /mnt
# touch /mnt/ssh
# umount /mnt

これで,もうこのSDカードにしがらみは存在しない. PCからぶっこ抜く.

5. その他設定

  • tmpfsとかをいい感じに設定する

6. 起動・接続

ラズパイのローカルIPを固定しsshdを有効化したので,(とくにトラブらない限り)完全にヘッドレス運用が可能. ということでSDカードとLANケーブルを刺して電源を投入.

しばらく待ってpingが通るようであれば,sshで接続する.

% ssh -i /path/to/priv_key -p 22 [email protected]

クラスタの構築(k0sctl)

これを使うと楽らしい.(実際楽だった)

まだ完全な理解に至っていないのでいろいろ不正確かも.

1. 作業用PCにk0sctlを入れる

実際にやるときはgithub(k0sproject/k0sctl)を参照のこと.

現状,goが動く環境で

% go install github.com/k0sproject/k0sctl@latest

とするとよい(らしい).

2. 設定する

ここからはラズパイ(マスターノードを含む)ではなく,作業用の環境で実行する.

実際にやるときはdocs.k0sproject.ioを参照.

% k0sctl init > k0sctl.yaml

でk0sctlの設定の雛形が吐かれるので,これを編集する. このファイルはk0sのノード毎の設定とは別物なので注意.

できたら実機にデプロイする.

% k0sctl apply --config k0sctl.yaml

しばらく(プロンプトが帰ってくるまで)待つ.

終わったらkubeconfigを吐かせる. これによってkubectlが使えたりする.

% k0sctl kubeconfig > kubeconfig

蛇足

ノードを作り直すときは

  • /etc/k0s
  • /var/lib/k0s
  • /etc/systemd/system/k0s*

を消すといいかも.

ノードを全てラズパイで構築した場合,k0sctl applyでそこそこ時間がかかった.