株式会社カミナシのエンジニア(まぁ当たり前か)の@nasum(id:Tomato-360)です。
以前個人でやってた活動で、Raspberry Pi 4でKubernetesクラスタを立てました。そのときは3台で、master 1台 worker 2台で構築しました。このときはKubernetesクラスタをただ動かしているだけで満足していました。
今回はより踏み込んで、masterを3台 workerも3台にして、Kubernetesをアップデートするときサービスを止めずに対応できる本格的なクラスタにチャレンジしていこうと思います。
Raspberry Piクラスタの組み立て
まずはハードウェアの選定です。選定したハードウェアは以下です
サーバー | Raspberry Pi 3 | 3台 |
電源 | Anker PowerPort Speed4 | 1台 |
hub | BUFFALO LSW6-GT-5EPL | 1台 |
後は必要なケーブル・SDカード等です。
今回使用するRaspberry Pi 3はmasterノードで使用します。masterノードはあまりリソースは消費しないため、比較的高性能なRaspberry Pi 4を使わず安価なRaspberry Pi 3で構築します。
workerノードは以前構築したクラスタを再利用します。
masterノードのクラスタを組み立てるとこんな感じになります。
黒いボディがかっこいいです。
Raspberry Pi に ArchLinuxをインストール
次にRaspberry piにさすmicro sdカードにOSをインストールします。
まずはfdiskでパーティションを切り、各パーティションをフォーマットしていきます。
# パーティションを切る $ sudo fdisk /dev/sdf # 各パーティションをフォーマットする $ sudo mkf.vfat /dev/sdf1 $ sudo mkf.ext4 /dev/sdf2
fdiskでパーティションを切るデバイスは自分の環境では /dev/sdf
でした。各環境によってこの値は変わります。パーティション1は200MB分作りパーティション2は残り全ての領域を使います。パーティション1はvfat、パーティション2はext4でフォーマットします。
詳しくは公式のHPが詳しいです。
次に各パーティションをマウントし、Arch Linuxをインストールします。
# Arch Linuxをダウンロード $ wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz # 各パーティションをマウント $ mkdir boot $ mkdir root $ sudo mount /dev/sdf1 boot $ sudo mount /dev/sdf2 root # Arch Linuxをインストール $ sudo bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root # bootのためのファイルをboot用パーティションに移動 $ sudo mv root/boot/* boot
ファイルを解凍するだけでインストールが完了するのをみると、Linuxもあくまでファイルなんだなと当たり前のことを思ったりします。これでインストールはほぼ完了です。次にキーの配置とネットワークの設定を追記します。
# sshでログインできるように自分のPCのキーを配置 $ cp ~/.ssh/id_rsa.pub root/home/alarm/.ssh/ # IPを固定するためにイーサネットの設定を編集 $ emacs root/etc/systemd/network/eth0.network
イーサネットの設定は次のように編集します。今回は 192.168.1.19
に固定します。
[Match] Name=eth0 [Network] Address=192.168.1.19/24 Gateway=192.168.1.1 DNS=8.8.8.8
鍵の設置とネットワークの設定を終えたらSDカードをRaspberry Piに差し、LANケーブルと電源を差し起動します。問題がなければ次のコマンドでログインできるはずです。
$ ssh -l alarm -i ~/.ssh/id_rsa -p 22 192.168.1.19
ArchLinuxのデフォルトのユーザ名は alarm
です。パスワードも alarm
です。ログインが確認できたらパスワードを変更します。
$ passwd
これで1つmasterノードが完成しました。あとはmaster2台とworker3台のセットアップです。気が遠くなりますね。
次回に続きます!