Raspberry PiでKubernetesクラスタを作る〜準備編〜

f:id:kaminashi-developer:20210331224100j:plain 株式会社カミナシのエンジニア(まぁ当たり前か)の@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ノードのクラスタを組み立てるとこんな感じになります。

f:id:kaminashi-developer:20210331224507j:plain

黒いボディがかっこいいです。

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台のセットアップです。気が遠くなりますね。

次回に続きます!