K3s na Arch? Kto mógł na to wpaść, może jeszcze produkcja!? Ci, co mnie znają to wiedzą, że posiadam wiele serwerów, na potrzeby HomeLab czy rozwoju prywatnych projektów. Testowałem wiele systemów operacyjnych i postawiłem, że środowiska tak dynamicznie się zmieniające jak moje domowe przedszkole, potrzebuje systemu równie płynnie potrafiącego się zmienić.
K3s na Arch – czemu?
Czemu Arch Linux?
Ostatnio aktualizowałem wszystkie swoje serwery, które działają od wielu lat w Contabo oraz Mikr.us. Okazało się, że stoi tam Debian, Ubuntu i AlmaLinux. Aktualizacja duża jest wymagająca, a są to serwery, które mogą paść – nic się nie stanie.
Przygotowanie do takiej aktualizacji wymagało ode mnie czasu, którego nie mam. Więc w ramach „wymiany” robię małe sprzątanie serwerów, usuwanie starych projektów (np.: TeamSpeak3 23Games.pl oraz stare serwery gier).
Serwery na Mikr.us już od dawna stoi na Arch Linux i tam zainstalowany Docker. Na tym potem zainstalowałem Forgejo jako mój serwer Git. Starczy. Jednak Mikr.us to małe serwery, więc nie poszalejemy, co innego mam w Contabo. Tam mam serwery o sporo większych możliwościach i IPv4 🙂
Z tego powodu zainstalowanie tam Dockera jest… ok. Jednak chciałem mieć w HomeLab (poza domem 😀 ) coś innego, a że pracuję głównie z Kubernetes ostatnimi czasy, to cóż innego?
Czemu K3s?
K3s to w sumie pierwsza myśl, którą miałem. Mam doświadczenie z MicroK8s, K3s, RKE1, RKE2, k0s, kubeadm, TalosLinux, czy z managed Kubernetes.
Każde z tych rozwiązań ma swoje plusy i minusy, które może kiedyś opiszę na blogu.
Tym razem jednak postawiłem na… footprint. Chciałem, by wspierał łatwo Cilium, Traefik (jako ingress) i nie zabierał dużo zasobów. Odpowiedź jest prosta, czyli K3s, bo wspiera Cilium, Traefik ma wbudowany out-of-the-box, a dodatkowo jest lekki (jedna prosta binarka). Kolejnym atutem jest fakt, że łatwo mogę zrobić hard-reset wszystkiego przez k3s-uninstall.sh i mogę instalować i zaczynać wszystko do nowa.
Instalacja
Skoro już znamy motywacje tego stabilnego (xD) projektu, to możemy przejść do konkretów, czyli jak to zrobić samemu.
Przygotowanie Arch
ArchLinux w swojej podstawowej wersji potrzebuje nieco wsparcia. Pierwsze co warto zrobić to przerzucenie się na kernel LTS, by uniknąć problemów. Przy okazji zainstalujemy przydatne paczuszki.
git– bo będziemy pracować z git 🙂vim– edytor. Jedyny prawilny to VIM, ale jak kogoś przerasta tak prosty edytor, to emacs, czy inne nano też dadzą radę. Wychodzi się:qjakby ktoś nie umiał wyjść 🙂base-devel– wymagane do budowyyayoraz kilku innych rzeczylinux-lts– instalujemy kernel LTSlinux-lts-headers– nagłówki potrzebne do dalszych etapówsudo– no nasz user musi umieć cośinetutils– a to ja instalowałem, by mieć komendę hostnamefuse-overlayfs– system plików działający w przestrzeni userastrace– debugowałem nim k3s, które nie chciało mi wstać (brakło overlayfs), nieobowiązkowe, ale ja korzystammake– przydatne
pacman -Syuu git vim base-devel linux-lts linux-lts-headers sudo inetutils fuse-overlayfs strace make
Następnie restartujemy system i zmieniamy kernel na LTS. Po uruchomieniu, wszystko powinno śmigać.
Zainstalujemy YAY (wygodniejszy manedżer paczek). Pierw utworzymy sobie usera:
MYUSER=otlet useradd -m -G wheel $MYUSER passwd $MYUSER # i ustawiamy sobie hasło jakieś echo "$MYUSER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/user su - $MYUSER
Skoro już jesteśmy swoim userem (u mnie to otlet) to możemy zacząć:
git clone https://aur.archlinux.org/yay-bin.git cd yay-bin makepkg -si
Instalacja K3s z Cilium
Teraz mamy podstawy do pracy, to lecimy dalej.
curl -sfL https://get.k3s.io | sh -s - --disable-network-policy --flannel-backend=none --disable-kube-proxy
Instalujemy poprzez skrypt z internetu (nie róbcie tego w realnym środowisku, to niebezpieczne. Instalacja manualna wskazana). Jednak podaję tam specjalne parametry, już wyjaśniam, o co chodzi:
--disable-network-policy– wyłączamy wbudowane NetworkPolicy.--flannel-backend=none– nie instalujemy flannel jako CNI--disable-kube-proxy– nie instalujemy kube-proxy
Czemu tyle rzeczy nie włączamy lub nie instalujemy? Bo wszystko zastąpi nam Cilium.
Jak już instalacja się powiedzie, to instalujemy kilka narzędzi do pracy z Kubernetes oraz linkujemy sobie kubeconfig:
yay -S helm cilium-cli mkdir ~/.kube sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config sudo chown $(whoami):$(whoami) ~/.kube/config
Następnie instalujemy potrzebne nam Cilium:
helm repo add cilium https://helm.cilium.io/ helm repo update helm install cilium cilium/cilium \ --namespace cilium-system \ --create-namespace \ --set operator.replicas=1 \ --set hubble.relay.enabled=true \ --set hubble.ui.enabled=true \ --set kubeProxyReplacement=true \ --set k8sServicePort=6443 \ --set k8sServiceHost=ADRES_IP_SERVER kubectl get pods -n cilium-system -w
Czekamy, aż wszystkie pody wstaną.
Podsumowanie
Instalacja K3s na Arch nie jest trudna, ale trzeba pamiętać o kilku elementach, że Kubernetes posiada swoje wymagania.
Od tego momentu posiadamy już swój serwer Kubernetes i możemy się bawić.