毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
以前、こんな記事を書いたわけでございます。
Proxmoxのコンテナ(CT)でK3Sを動かす #kubernetes - Qiita
https://qiita.com/ynott/items/7bf39a63adbd2fcf6778
これはProxmoxの使い始めの頃で、CT(Container LXCコンテナのこと)を使って、K3Sを動かせられれば最高に便利なのでは?と思ってテストしてみたんですが、以外に面倒くさかったという落ちでした。
しかし、K3Sも進化(?)し、私の理解も進んできたので再度チャレンジしたら、以前よりも楽にできるようになっていたのでご紹介です。
通常、K3SをContainerで動かすと
- /dev/kmsgが無いとエラーが出る
- /proc/sys/vm/overcommit_memoryがReadOnlyだとエラーが出る
- /proc/sys/kernel/panic_on_oopsがReadOnlyだとエラーが出る
- /proc/sys/kernel/panicがReadOnlyだとエラーが出る
ということになり、動きません。
1. 対応方法
LXCは、非特権コンテナー(unprivileged container)にチェックを入れると、非特権コンテナーとして動きます。しかし、k3sは自分がrootで実行されているので特権を持っていると思っています。そこで上記のようなエラーが発生します。
そこで、k3sにあなたが動いている環境はrootではなく、UserNamespaceで実行されているのですよと以下の起動オプションを付けてあげます。
ExecStart=/usr/local/bin/k3s \
server \
'--tls-san' \
'127.0.0.1' \
--kubelet-arg=feature-gates=KubeletInUserNamespace=true \
--kube-controller-manager-arg=feature-gates=KubeletInUserNamespace=true \
--kube-apiserver-arg=feature-gates=KubeletInUserNamespace=true \
2. 前提条件
動かすには前提条件があります。
- Cgroupsがv2であること(Proxmox Ver7以降)
- CT(Container)がNested
- CT(Container)がUnprivileged Container
- CT(Container)で動かすOSが、Ubuntu 18.04以降、CentOS-8以降
3. 参考
高度なオプション / 設定 | K3s
https://docs.k3s.io/ja/advanced#%E3%83%AB%E3%83%BC%E3%83%88%E3%83%AC%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E6%97%A2%E7%9F%A5%E3%81%AE%E5%95%8F%E9%A1%8C
Running Kubernetes Node Components as a Non-root User | Kubernetes
https://kubernetes.io/docs/tasks/administer-cluster/kubelet-in-userns/#running-rootless-kubernetes-directly-on-a-host