💥
ProxmoxVEのLXCでKubernetesクラスタを構築する。
CTを作成
ところどころ大事な部分があるのでその場所を紹介します。
General
特権コンテナでないといけないのでUnpriviledged
のチェックは外します。
Template
今回はUbuntu 22.04 を使います。
Ubuntuであればとりあえず動くと思います。
Memory
Memoryはお好きな値に、Swapは0にします。
configファイルに追記
コンテナを作成したらホストからconfigファイルに以下の内容を追記します。
/etc/pve/lxc/<コンテナID>.conf
# ...
lxc.apparmor.profile: unconfined
lxc.cap.drop:
lxc.cgroup.devices.allow: a
lxc.mount.auto: proc:rw sys:rw
Kubernetesをインストール
このページを参考にインストールします。
🔽全部のプロセスをまとめたスクリプト
エラー対応
kubeadm init --pod-network-cidr=10.244.0.0/16
このように普通に初期化しようとするとエラーが出ます。
[ERROR SystemVerification]: failed to parse kernel config: unable to load kernel module: "configs", output: "modprobe: FATAL: Module configs not found in directory /lib/modules/5.3.10-1-pve\n", err: exit status 1
オプションを追加して無視します。
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=SystemVerification
けれどまだエラーが出ます。
failed to start OOM watcher open /dev/kmsg: no such file or directory
これを回避するために/dev/kmsg
に、/dev/console
のリンクを張る必要があります。
ln -s /dev/console /dev/kmsg
echo 'L /dev/kmsg - - - - /dev/console' > /etc/tmpfiles.d/kmsg.conf # 再機動に対応
最後に、LXCではswapoff -a
が使えないので、スワップのエラーを無視するように設定します。
sed -i '9s/^/Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"\n/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
この状態で初期化します。
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=SystemVerification
するとエラー無く通るはずです。
ワーカーノードでも同じように設定してから、joinします。
kubeadm join 10.1.100.11:6443 \
--ignore-preflight-errors=SystemVerification \
--token xxxxxx.xxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxx
参考
Discussion