2026年2月15日日曜日

Raspberry Pi 5 SSDブート設定まとめ (2026年版)


1. ブート順序の変更 (EEPROM)

• `sudo raspi-config` を実行

• `Advanced Options` > `Boot Order` > `NVMe/USB Boot` を選択

• 再起動して設定を反映


2. SSD起動時の重要パス

• 設定ファイルの場所が従来と異なるので注意

• 正解: `/boot/firmware/cmdline.txt`

• ※`/boot/cmdline.txt` を書き換えても反映されない場合が多い


3. NVMe Gen3 の有効化 (Pi 5限定)

`/boot/firmware/config.txt` に以下を追記して高速化:

```

dtparam=pciex1_gen=3

```


4. 構築のヒント

• SSD起動にするとディスクI/Oが劇的に速くなり、K8sの動作が安定する

• 2026年現在の最新ファームウェアでは、`/boot/firmware/` 配下の管理がより厳格化されているため、パスの確認は必須。


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起動の前では通用しない。

• cg

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."

```

2025年12月7日日曜日

terraform(moved.tf)のリソース名の修正方法について

以下の赤枠を直接変えてしまうと、ec2が削除されてしまいます。
これを維持したい場合について記載します。













以下にmoved.tfファイルを作成します。
















以下のように、fromに修正前で、toに修正したい内容を記載します。













以下のリソースにも修正を加えます。













terraform applyで実施します。























修正が終わったらmoved.tfは削除して問題ないです。








2025年11月16日日曜日

k8s node version UP(1.34.1 > 1.34.2)

[マスターノードでの準備と安全確保]

1)etcdctl クライアントのインストール: (未インストールの場合は必要)

apt update

apt install etcd-client


2)etcd バックアップの取得と退避 (最重要):

ETCDCTL_API=3 etcdctl --endpoints=127.0.0.1:2379 \

    --cacert=/etc/kubernetes/pki/etcd/ca.crt \

    --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \

    --key=/etc/kubernetes/pki/apiserver-etcd-client.key \

    snapshot save /tmp/etcd_backup_$(date +%Y%m%d_%H%M%S).db


3)ファイルをクラスター外の安全な場所(ローカルPCなど)にコピーします。

環境によって、異なるので割愛します。(おそらくSCPなど待避されるのではと思いますが)


4)Pod Disruption Budget (PDB) の一時削除:

ドレインをブロックするIstioなどのPDBを削除します。

kubectl delete pdb istio-ingressgateway -n istio-system

kubectl delete pdb istiod -n istio-system




[コントロールプレーンのアップグレード]

1)kubeadm バイナリの更新:

apt-mark unhold kubeadm

apt install -y kubeadm=1.34.2-1.1

apt-mark hold kubeadm


2)コアコンポーネントの適用:

kubeadm upgrade apply v1.34.2


3)kubeletkubectl パッケージの更新:

apt-mark unhold kubelet kubectl

apt install -y kubelet=1.34.2-1.1 kubectl=1.34.2-1.1


4)kubelet の再起動:

systemctl daemon-reload

systemctl restart kubelet


5)パッケージのホールド再設定:

apt-mark hold kubelet kubectl





[ワーカーノードのアップグレード(ノードごとに繰り返し)]

rasp-node1rasp-node2 で、以下の手順を1台ずつ実行します。


1)ドレイン(マスターノードで実行):

kubectl drain <ノード名> --ignore-daemonsets --delete-emptydir-data --force



2)ノードの設定更新(ワーカーノードで実行)

対象のワーカーノードにログインし、kubeletの設定を更新します。

kubeadm upgrade node


3)kubelet サービス更新(ワーカーノードで実行)

apt-mark unhold kubelet

apt install -y kubelet=1.34.2-1.1

systemctl daemon-reload

systemctl restart kubelet

apt-mark hold kubelet


4)アンコルドン(マスターノードで実行

kubectl uncordon <ノード名>



[ 最終確認と PDB の再適用]

実行場所: マスターノード (rasp-master)

  1. 全ノードバージョン確認: すべてのノードが v1.34.2 Ready であることを確認します
    kubectl get nodes


Raspberry Pi 5 SSDブート設定まとめ (2026年版)

1. ブート順序の変更 (EEPROM) • `sudo raspi-config` を実行 • `Advanced Options` > `Boot Order` > `NVMe/USB Boot` を選択 • 再起動して設定を反映 2. SSD起動時の重要パス •...