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ę :q jakby ktoś nie umiał wyjść 🙂
  • base-devel – wymagane do budowy yay oraz kilku innych rzeczy
  • linux-lts – instalujemy kernel LTS
  • linux-lts-headers – nagłówki potrzebne do dalszych etapów
  • sudo – no nasz user musi umieć coś
  • inetutils – a to ja instalowałem, by mieć komendę hostname
  • fuse-overlayfs – system plików działający w przestrzeni usera
  • strace – debugowałem nim k3s, które nie chciało mi wstać (brakło overlayfs), nieobowiązkowe, ale ja korzystam
  • make – 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ć.

Dołącz do newslettera, by być na bieżąco!

Jeśli chcesz być na bieżąco z blogiem, otrzymywać świetne porady dot. programowania i administracji serwerami, opinie w temacie gier - dołącz do newslettera!

Raz na jakiś czas wyślę Ci informację nt. bloga, a także będę wysyłać ekskluzywne materiały techniczne!

Nie czekaj i dołącz!

Dołączając do newslettera, akceptujesz naszą politykę prywatności!