Tytułowy problem okazuje się być dosyć skomplikowany – Kubernetes oczekuje bycia uruchomionym na gołej maszynie (bare metal), natomiast m.in. AppArmor obecny w mechanizmie LXC trochę go ogranicza. Nie chciałem zmniejszać poziomu bezpieczeństwa całej maszyny, dając czemukolwiek pełne uprawnienia – mam tu na myśli często sugerowane, a według mnie niezbyt bezpieczne, wyłączenie wszelkich ograniczeń dla LXC, która ma mieć uruchomiony kube.
Szybkim rozwiązaniem byłoby uruchomienie maszyny wirtualnej, ale wtedy tracimy zasoby na wirtualizację – zatem, podjąłem walkę o uruchomienie K3s na LXC.
Po naprawdę wielu spędzonych godzinach na próbach, udało się znaleźć Ten Jeden Post na forum[1], który okazał się pomocny w uruchomieniu – w moim przypadku – k3s, a nie pełnego k8s, ale to raczej bez większej różnicy. Całe rozwiązanie sprowadza się do:
# cat /etc/rancher/k3s/config.yaml
protect-kernel-defaults: false
kube-apiserver-arg:
- 'feature-gates=KubeletInUserNamespace=true'
kube-controller-manager-arg:
- 'feature-gates=KubeletInUserNamespace=true'
kubelet-arg:
- 'feature-gates=KubeletInUserNamespace=true'
snapshotter: 'fuse-overlayfs'I właściwie to tyle – systemctl restart k3s. Jeżeli w błędach pojawi się brak FUSE (czego nie testowałem), to w samych ustawieniach LXC to włączamy:
