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は「メモリを分配・管理する交通整理役」。こいつが正しく動いて初めてクラスターは完成する。