Letztes Jahr hatte ich im Blog-Eintrag CodeReady Containers for OKD unter Windows 10 ein kleines lokales Setup vorgestellt. Für Entwicklung und Test von Kubernetes Operatoren benötigt man aber auch schnell eine Umgebung aus mehreren Nodes. Mit dem Tool k3sup und der Kubernetes Distribution K3s lässt sich eine derartige Umgebung unter Rocky Linux 8 mit wenigen Befehlen aufsetzen.
Der Kubernetes Cluster besteht hierbei aus drei Rocky Linux 8 VMs (je 2 CPUs / 4 GB RAM / 20 GB Disk). Kubectl und k3sup nutze ich direkt auf meiner Entwickler-Workstation unter WSL2.
Im ersten Schritt wird k3sup lokal installiert:
curl -sLSo get_k3sup.sh https://get.k3sup.dev bash get_k3sup.sh sudo install k3sup /usr/local/bin/ which k3sup
Entgegen der k3s-Installationsanleitung habe ich auf den VMs die Firewall nicht deaktiviert. Stattdessen habe ich folgende Firewall-Rules eingerichtet.
Auf dem Server-Node (rock8-t05):
sudo firewall-cmd --permanent --add-port=6443/tcp sudo firewall-cmd --permanent --add-port=10250/tcp sudo firewall-cmd --permanent --add-port=8472/udp sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16 # pods sudo firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16 # services sudo firewall-cmd --reload
Auf den Agent-Nodes (rock8-t06 und rock8-t07):
sudo firewall-cmd --permanent --add-port=10250/tcp sudo firewall-cmd --permanent --add-port=8472/udp sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16 # pods sudo firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16 # services sudo firewall-cmd --reload
Nachdem die Firewalls auf den einzelnen Nodes nun vorbereitet sind, können wir via k3sup den Server-Node (rock8-t05) aufbauen:
k3sup install --user ansible --host rock8-t05
Sobald der Server-Node steht, können die beiden Agent-Nodes eingerichtet werden:
k3sup join --user ansible --server-host rock8-t05 --host rock8-t06 k3sup join --user ansible --server-host rock8-t05 --host rock8-t07
Damit sollte der Kubernetes Cluster schon einsatzbereit sein. Dies lässt sich z.B. mit folgenden Befehlen prüfen:
$ export KUBECONFIG=~/kubeconfig $ kubectl config set-context default Context "default" modified. $ kubectl cluster-info Kubernetes control plane is running at https://rock8-t05:6443 CoreDNS is running at https://rock8-t05:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://rock8-t05:6443/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. $ kubectl get node NAME STATUS ROLES AGE VERSION rock8-t06 Ready <none> 4m22s v1.23.6+k3s1 rock8-t07 Ready <none> 106s v1.23.6+k3s1 rock8-t05 Ready control-plane,master 8m39s v1.23.6+k3s1