2026年2月15日日曜日

2026年版 Raspberry Pi 5 + SSDでKubernetesクラスター構築!cgroupの罠と解決策




Kubernetesクラスター構築!cgroupの罠と解決策

1. はじめに(今回の環境)

• ハードウェア: Raspberry Pi 5 (3台構成)

• ストレージ: SSD起動(NVMe/USB)

• OS: Raspberry Pi OS (Debian 13 Trixieベース)

• K8sバージョン: v1.31 (最新)

2. 直面した3つの大きな壁

1. SSD起動特有の「パス」問題

• 従来の /boot/cmdline.txt はもはや古い。

• 最新のSSD起動環境では /boot/firmware/cmdline.txt を書き換えないと、設定が一切反映されない。

2. cgroup v2 への完全移行

• 最新OSでは cgroup 管理が厳格化。

• cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 の追記が必須。

• これを忘れると、kubeadm は進めてもノードが永遠に NotReady になる。

3. 2026年リポジトリ署名期限問題

• Kubernetesのインストール用リポジトリの署名が変わっており、古い手順のままだと apt update でエラーが出る。

3. 解決の決め手となったスクリプトのポイント

• パスの自動判別: /boot/firmware/cmdline.txt があればそちらを優先して書き換える。

• 冪等性(べきとうせい)の確保: 同じ設定を二重に書き込まないスマートな追記。

• 最新の署名回避: [trusted=yes] を活用して、2026年のリポジトリ変更を突破。

4. 構築結果

• kubectl get nodes で、Master/Node1/Node2 すべてが Ready に!

• SSD起動の爆速環境で、ネットワーク(Flannel)も正常稼働。

5. まとめ(教訓)

• 「去年動いた手順」は、最新OS(Trixie)とSSD起動の前では通用しない。

• cgroupは「メモリを分配・管理する交通整理役」。こいつが正しく動いて初めてクラスターは完成する。

1. はじめに(今回の環境)

ハードウェア: Raspberry Pi 5 (3台構成)

ストレージ: SSD起動(NVMe/USB)

OS: Raspberry Pi OS (Debian 13 Trixieベース)

K8sバージョン: v1.31 (最新)

2. 直面した3つの大きな壁

1. SSD起動特有の「パス」問題

• 従来の /boot/cmdline.txt はもはや古い。

• 最新のSSD起動環境では /boot/firmware/cmdline.txt を書き換えないと、設定が一切反映されない。

2. cgroup v2 への完全移行

• 最新OSでは cgroup 管理が厳格化。

• cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 の追記が必須。

• これを忘れると、kubeadm は進めてもノードが永遠に NotReady になる。

3. 2026年リポジトリ署名期限問題

• Kubernetesのインストール用リポジトリの署名が変わっており、古い手順のままだと apt update でエラーが出る。

3. 解決の決め手となったスクリプトのポイント

パスの自動判別: /boot/firmware/cmdline.txt があればそちらを優先して書き換える。

冪等性(べきとうせい)の確保: 同じ設定を二重に書き込まないスマートな追記。

最新の署名回避: [trusted=yes] を活用して、2026年のリポジトリ変更を突破。

4. 構築結果

• kubectl get nodes で、Master/Node1/Node2 すべてが Ready に!

• SSD起動の爆速環境で、ネットワーク(Flannel)も正常稼働。

5. まとめ(教訓)

• 「去年動いた手順」は、最新OS(Trixie)とSSD起動の前では通用しない。

• cgroupは「メモリを分配・管理する交通整理役」。こいつが正しく動いて初めてクラスターは完成する。

!cgroupの罠と解決策

1. はじめに(今回の環境)

ハードウェア: Raspberry Pi 5 (3台構成)

ストレージ: SSD起動(NVMe/USB)

OS: Raspberry Pi OS (Debian 13 Trixieベース)

K8sバージョン: v1.31 (最新)

2. 直面した3つの大きな壁

1. SSD起動特有の「パス」問題

• 従来の /boot/cmdline.txt はもはや古い。

• 最新のSSD起動環境では /boot/firmware/cmdline.txt を書き換えないと、設定が一切反映されない。

2. cgroup v2 への完全移行

• 最新OSでは cgroup 管理が厳格化。

• cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 の追記が必須。

• これを忘れると、kubeadm は進めてもノードが永遠に NotReady になる。

3. 2026年リポジトリ署名期限問題

• Kubernetesのインストール用リポジトリの署名が変わっており、古い手順のままだと apt update でエラーが出る。

3. 解決の決め手となったスクリプトのポイント

パスの自動判別: /boot/firmware/cmdline.txt があればそちらを優先して書き換える。

冪等性(べきとうせい)の確保: 同じ設定を二重に書き込まないスマートな追記。

最新の署名回避: [trusted=yes] を活用して、2026年のリポジトリ変更を突破。

4. 構築結果

• kubectl get nodes で、Master/Node1/Node2 すべてが Ready に!

• SSD起動の爆速環境で、ネットワーク(Flannel)も正常稼働。

5. まとめ(教訓)

• 「去年動いた手順」は、最新OS(Trixie)とSSD起動の前では通用しない。

• cgroupは「メモリを分配・管理する交通整理役」。こいつが正しく動いて初めてクラスターは完成する。

!cgroupの罠と解決策

1. はじめに(今回の環境)

ハードウェア: Raspberry Pi 5 (3台構成)

ストレージ: SSD起動(NVMe/USB)

OS: Raspberry Pi OS (Debian 13 Trixieベース)

K8sバージョン: v1.31 (最新)

2. 直面した3つの大きな壁

1. SSD起動特有の「パス」問題

• 従来の /boot/cmdline.txt はもはや古い。

• 最新のSSD起動環境では /boot/firmware/cmdline.txt を書き換えないと、設定が一切反映されない。

2. cgroup v2 への完全移行

• 最新OSでは cgroup 管理が厳格化。

• cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 の追記が必須。

• これを忘れると、kubeadm は進めてもノードが永遠に NotReady になる。

3. 2026年リポジトリ署名期限問題

• Kubernetesのインストール用リポジトリの署名が変わっており、古い手順のままだと apt update でエラーが出る。

3. 解決の決め手となったスクリプトのポイント

パスの自動判別: /boot/firmware/cmdline.txt があればそちらを優先して書き換える。

冪等性(べきとうせい)の確保: 同じ設定を二重に書き込まないスマートな追記。

最新の署名回避: [trusted=yes] を活用して、2026年のリポジトリ変更を突破。

4. 構築結果

• kubectl get nodes で、Master/Node1/Node2 すべてが Ready に!

• SSD起動の爆速環境で、ネットワーク(Flannel)も正常稼働。

5. まとめ(教訓)

• 「去年動いた手順」は、最新OS(Trixie)とSSD起動の前では通用しない。

• cgroupは「メモリを分配・管理する交通整理役」。こいつが正しく動いて初めてクラスターは完成する。


Raspberry Pi 5 K8s 構築シェル (SSD対応)

 2026年版 Raspberry Pi 5 K8s 構築シェル (SSD起動対応)

このシェルは、Raspberry Pi 5 + SSD起動 + Debian 13 (Trixie) という最新環境で、`cgroup` の問題を突破し、Kubernetesを導入するためのものです。


1. cgroup設定とOS最適化


特にSSD起動時のパス `/boot/firmware/cmdline.txt` に対応しています。


```


#!/bin/bash


# 2026年最新OS対応 K8sセットアップスクリプト


# 1. cgroupの有効化 (SSD起動対応)


CMDLINE="/boot/firmware/cmdline.txt"


if [ ! -f "$CMDLINE" ]; then


    CMDLINE="/boot/cmdline.txt"


fi


echo "Using $CMDLINE for cgroup configuration..."


if ! grep -q "cgroup_enable=cpuset" "$CMDLINE"; then


    sudo sed -i '$ s/$/ cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1/' "$CMDLINE"


    echo "cgroup settings added."


fi


# 2. スワップの無効化 (K8sに必須)


sudo dphys-swapfile swapoff


sudo dphys-swapfile uninstall


sudo update-rc.d dphys-swapfile remove


sudo systemctl disable dphys-swapfile


# 3. 必要なモジュールのロード


cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf


overlay


br_netfilter


EOF


sudo modprobe overlay


sudo modprobe br_netfilter


# 4. ネットワーク設定 (ブリッジ通信の許可)


cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf


net.bridge.bridge-nf-call-iptables  = 1


net.bridge.bridge-nf-call-ip6tables = 1


net.ipv4.ip_forward                 = 1


EOF


sudo sysctl --system


```


2. Kubernetesインストール (2026年署名エラー回避)


リポジトリの署名期限問題を `trusted=yes` で回避し、必要なツールを揃えます。


```


# 5. containerdのインストール


sudo apt-get update


sudo apt-get install -y containerd


sudo mkdir -p /etc/containerd


containerd config default | sudo tee /etc/containerd/config.toml


sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml


sudo systemctl restart containerd


# 6. Kubernetesリポジトリの追加 (2026年最新版)


# 署名エラーを回避するため [trusted=yes] を使用


echo "deb [trusted=yes] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list


sudo apt-get update


sudo apt-get install -y kubelet kubeadm kubectl socat conntrack


sudo apt-mark hold kubelet kubeadm kubectl


echo "Setup completed! Please reboot your Raspberry Pi."


```

2026年版 Raspberry Pi 5 + SSDでKubernetesクラスター構築!cgroupの罠と解決策

Kubernetesクラスター構築!cgroupの罠と解決策 1. はじめに(今回の環境) •  ハードウェア : Raspberry Pi 5 (3台構成) •  ストレージ : SSD起動(NVMe/USB) •  OS : Raspberry Pi OS (Debian 1...