2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

M1 Mac + Raspberry Pi 4でk3s

Posted at

はじめに

先日こちらの記事で、Mac上でk3sのmasterノードをセットアップする手順を試してみました。
シングルノード構成をしても何も面白くないので、
今回Raspberry Piを購入し、master-workerの2ノード構成のクラスタを構築してみようと思います。

Raspberry Piのセットアップ

こちらからMac用のRaspberry Pi Imagerをダウンロードし、予めフォーマットしておいたmicroSDカードにOSイメージを書き込みます。
Screen Shot 2021-12-19 at 17.18.51.png
これが結構時間が掛かる……(時間は計りませんでしたが、10分以上は掛かった気がします)
その間にRaspberry Pi本体とケースの組み立てを行いました。

SSHとWi-fiの初期設定

今回は、Raspberry Pi用のキーボードやモニタを用意せずに、Macのみを使ってヘッドレスセットアップするため、起動時にWi-Fiに自動的に接続されることと、sshdが有効化されている必要がありました。

まずはWi-Fiの設定。以下の内容のファイルをmicroSDカードに書き込みます。

touch /Volumes/boot/wpa_supplicant.conf
/Volumes/boot/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
    ssid="ここに接続先のssid"
    psk="ここに接続キー"
    key_mgmt=WPA-PSK
    priority=2
}

sshdの有効化は、以下の空ファイル設置のみでOKです。

touch /Volumes/boot/ssh

SSH接続

準備ができたら、microSDカードをRaspberry Piに挿し、電源を入れれば起動します。

% ssh pi@raspberrypi.local

初期パスワードはraspberryです。ログインしたら変更しておきましょう。

k3sインストール

まずはk3s起動時に必要になるため以下の設定を行います。

pi@raspberrypi:~ $  sudo vi /boot/cmdline.txt

# 末尾に追加(改行を入れずに既存行の末尾に追加すること)
# cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

# 再起動
pi@raspberrypi:~ $  sudo reboot

母艦Macの方でmaster起動(先日の記事参照)

# masterのIPアドレス確認
% multipass list
Name                    State             IPv4             Image
k3s-master              Running           192.168.64.3     Ubuntu 20.04 LTS

Ubuntu上でIPフォワードを有効化する。

/etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_forward=1

そして、k3sをmasterとして起動。

# Raspberry pi→Mac→Ubuntuで接続できるようにExternal IPを設定
K3S_EXTERNAL_IP=192.168.64.3
ubuntu@k3s-master:~$ export INSTALL_K3S_EXEC="--node-ip=$K3S_EXTERNAL_IP --node-external-ip=$K3S_EXTERNAL_IP"
# k3s masterインストール&起動
ubuntu@k3s-master:~$ curl -sfL https://get.k3s.io | sh -

# node tokenを取得
ubuntu@k3s-master:~$ sudo cat /var/lib/rancher/k3s/server/node-token

今回は、Raspberry pi→Mac→Ubuntuの経路でagent→masterの接続を行うため、Macのポート開放を設定。

/etc/ssh/sshd_config
# コメントを外して有効化
AllowTcpForwarding yes
% echo "
rdr pass on lo0 inet proto tcp from any to self port 6443 -> 192.168.64.3 port 6443
rdr pass on en0 inet proto tcp from any to any port 6443 -> 192.168.64.3 port 6443
rdr pass on en1 inet proto tcp from any to any port 6443 -> 192.168.64.3 port 6443
" | sudo pfctl -ef -

最後に、Raspberry piでk3s agentを起動します。

% ssh pi@raspberrypi.local
# agentとしてk3sを起動するための設定
pi@raspberrypi:~ $ export K3S_TOKEN={master側で取得したnode tokenを貼り付け}
pi@raspberrypi:~ $ export K3S_URL={https://<MacのIP>:6443}

# 上記環境変数を設定しておくと、自動的にagentとして起動してくれる
pi@raspberrypi:~ $ curl -sfL https://get.k3s.io | sh -

注意点として、k3sではmDNSが使えないため、xxx.localの名前解決はできず、K3S_URLにはIPを直接指定する必要があります。
上記が完了すれば、無事master側からもagent nodeが認識されます。

ubuntu@k3s-master:~$ sudo kubectl get nodes
NAME          STATUS   ROLES                  AGE   VERSION
raspberrypi   Ready    <none>                 10m   v1.22.5+k3s1
k3s-master    Ready    control-plane,master   13m   v1.22.5+k3s1

# 試しにDeployment作成
ubuntu@k3s-master:~$ sudo kubectl create deploy my-dep --image=nginx --replicas=

# raspberrypiにもPodが作成されていることが分かる
ubuntu@k3s-master:~$ sudo kubectl get po -owide
NAME                      READY   STATUS      RESTARTS   AGE     IP          NODE          NOMINATED NODE   READINESS GATES
my-dep-5b7868d854-chm2n   1/1     Running     0          6m19s   10.42.0.7   k3s-master    <none>           <none>
my-dep-5b7868d854-hlw6s   1/1     Running     0          6m20s   10.42.1.3   raspberrypi   <none>           <none>
my-dep-5b7868d854-n6bmt   1/1     Running     0          6m19s   10.42.1.4   raspberrypi   <none>           <none>

シャットダウン

Raspberry piをシャットダウンするときは、以下のコマンドを打ってから電源を落としましょう。

sudo shutdown -h now

おわりに

今回は、とりあえずRaspberry piを使ってk3sのマルチノードクラスタを構築してみました。
今後は、Raspberry pi用のカメラモジュールも購入してあるので、Raspberry piだからこそできるEdgeコンピューティングに挑戦してみようと計画中。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?