· raspberrypi · 6 min read
Raspberry Pi 5にk3sを入れる
kubernetesの軽量バージョンであるk3sをラズパイに入れます

前回はラズパイのセットアップまでを行いました。 今回はこれにk3sを入れます。
k3s構成
端末
ノード | 種別 |
---|---|
Raspi1 | Server |
Raspi2 | Agent |
Raspi2 | Agent |
ネットワーク
各端末ともWi-Fiに接続していますが(固定IP)、3台とも有線でそれぞれスイッチングHUBを仲介して接続しています(それも固定IP)。
補足
k3sはデフォルトの「データストア」として組み込みのsqliteが使用できます。軽量ではありますが単一ファイルで運用されるので、可用性の点で劣ります。k8sで使用されているetcdも使用可能ですが、今回はsqliteで構築します。
etcd以外には、PostgreSQLとMySQLも使用できるようです。
なお、可能性を高めるならk3sサーバーを複数台で構成するのがベストプラクティスです(最低3台以上の奇数台構成)。
その上でロードバランサーをサーバーの前段に配置するのがよいですが……今回はそこまではしません。
サーバー/エージェントともに行う作業
以下はmaster, workerともに各ノード共通の作業です
cgroups有効化
デフォルトではcgroupsが有効化されていないので有効にします
cd /boot/firmware
sudo vi cmdline.txt
cmdline.txt末尾に以下を追加
cgroup_memory=1 cgroup_enable=memory
OSを再起動します。
sudo reboot
k3sインストール
これはサーバーのみで実施する作業です。
以下のコマンドを実行するだけでOKです。
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
k3sでは状態管理のデフォルトのデータストアとして、SQLiteが使用されています。で、SQLiteは単一ファイルのDBで複数サーバー構成には対応していません。単一障害点になりうるので、可用性対策として、組み込みetcdもしくはPostgreSQL, MySQLの使用が望ましいです。ただ、今回は自宅のラズパイ環境なので軽量なSQLiteでインストールしてみます。
クラスタデータストア: https://docs.k3s.io/ja/datastore
後でetcdに切り替えることができるみたいなので、後日試してみるとします。
デフォルトの組み込みSQLiteデータベースを使用している既存のクラスターがある場合、K3sサーバーを—cluster-initフラグで再起動するだけでetcdに変換できます。
高可用性組み込みetcd: https://docs.k3s.io/ja/datastore/ha-embedded
なお、インストールコマンドの--write-kubeconfig-mode 644
がないとk3s.yamlが読めない警告が出るようです。
WARN[0000] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode or --write-kubeconfig-group to modify kube config permissions
pi@rp51:/boot/firmware $ curl -sfL https://get.k3s.io | sh -
[INFO] Finding release for channel stable
[INFO] Using v1.32.3+k3s1 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.32.3+k3s1/sha256sum-arm64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.32.3+k3s1/k3s-arm64
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Finding available k3s-selinux versions
sh: 416: [: k3s-selinux-1.6-1.el9.noarch.rpm: unexpected operator
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] Host iptables-save/iptables-restore tools not found
[INFO] Host ip6tables-save/ip6tables-restore tools not found
k3sの状態を確認してみます。
systemctl status k3s
active状態なので大丈夫でしょう。
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-05-03 01:41:55 JST; 1min 0s ago
Docs: https://k3s.io
ノードの状態を確認してみます。
kubectl get nodes
うまく出来てそうですね。
NAME STATUS ROLES AGE VERSION
rp51 Ready control-plane,master 5m8s v1.32.3+k3s1
エージェントのインストール
以下はエージェントとなるラズパイで実施する作業です。
まずはサーバーにログインし、以下のファイルを参照してトークンを控えます。
エージェントのインストールに必要となります。
/var/lib/rancher/k3s/server/token
エージェントとなるラズパイで以下のインストールスクリプトを実行します。
curl -sfL https://get.k3s.io | K3S_URL=https://<MasterのIPアドレス>:6443 K3S_TOKEN=<上のトークンテキスト> sh -
Masterノードのラズパイで、ノードを確認してみます。
k3s kubectl get nodes
追加されてるっぽいですね。
NAME STATUS ROLES AGE VERSION
rp51 Ready control-plane,master 18m v1.32.3+k3s1
rp52 Ready <none> 2m2s v1.32.3+k3s1
rp53 Ready <none> 31s v1.32.3+k3s1
kubectl get nodes -o wide
で詳細が出力可能です。
pi@rp51:/etc/rancher/k3s $ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
rp51 Ready control-plane,master 13h v1.32.3+k3s1 192.168.20.20 <none> Debian GNU/Linux 12 (bookworm) 6.12.20+rpt-rpi-2712 containerd://2.0.4-k3s2
rp52 Ready <none> 13h v1.32.3+k3s1 192.168.20.21 <none> Debian GNU/Linux 12 (bookworm) 6.12.20+rpt-rpi-2712 containerd://2.0.4-k3s2
rp53 Ready <none> 13h v1.32.3+k3s1 192.168.20.22 <none> Debian GNU/Linux 12 (bookworm) 6.12.20+rpt-rpi-2712 containerd://2.0.4-k3s2
k3sのインストールができました。