💥

ProxmoxVEのLXCでKubernetesクラスタを構築する。

2022/06/23に公開

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をインストール

https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
このページを参考にインストールします。

🔽全部のプロセスをまとめたスクリプト

エラー対応

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

参考

https://thelastguardian.me/posts/2020-01-10-kubernetes-in-lxc-on-proxmox/

Discussion