K3s Kubernetes unter Ubuntu installieren

Wenn du schon immer mal die Kubernetes (K8s)-Container-Plattform ausprobieren wolltest, aber gezögert hast, weil es dir zu kompliziert ist, probier es mal mit K3s .

K3s ist eine Kubernetes-Distribution, die von Rancher entwickelt wurde. Im Vergleich zu einigen anderen Kubernetes-Distributionen ist sie leichtgewichtig, einfach zu installieren und hat nur minimale Abhängigkeiten vom Betriebssystem. Die Installation ist sehr simpel weil alle nötigen Kubernetes-Komponenten in einem Binary gebündelt sind:

Ingress-Controller

K3s installiert standardmäßig Traefik als Ingress-Controller. Der Ingress-Controller ist wie ein Reverse Proxy und Load Balancer, der Web-Anfragen an die Container weiterleitet. Wenn du einen anderen Ingress-Controller bevorzugst (z. B. Nginx) kann man den Installer anweisen keinen Ingress-Controller zu installieren.

Storage-Driver

Storage drivers are responsible for managing persistent volumes – volumes that should persist between container restarts. By default, K3s installs the „local-path-provisioner“ storage driver. This is a very simple storage driver that only makes sense to use when persistent volumes do not need to be shared across multiple Kubernetes nodes.

The local-path provisioner simply provides persistent volumes by creating folders on the respective node, and bind-mounting them to the containers. For testing Kubernetes on a single node, this is ideal and perfectly sufficient.

One-Node Cluster

Kubernetes kann große Cluster mit vielen Knoten bilden. Für deine ersten Schritte mit Kubernetes würde ich dir jedoch empfehlen, die Dinge einfach zu halten und einen Ein-Knoten-Cluster zu deployen, was mit K3s wirklich einfach ist.

Um K3s auf einem Ein-Knoten-Cluster zu installieren, musst du eigentlich nur den folgenden Befehl mit Root-Rechten ausführen:

curl -sfL https://get.k3s.io | sh -
[INFO]  Finding release for channel stable
[INFO]  Using v1.17.4+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s
#

Dadurch wird K3s unter /usr/local/bin/k3s installiert und mehrere Symlinks zu diesem Binary erstellt. Der Installer erstellt außerdem eine Systemd-Unit und startet den Dienst bei jedem Start:

systemctl status k3s.service
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-01-06 23:11:08 CET; 1 weeks 5 days ago
       Docs: https://k3s.io
    Process: 492 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 502 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 506 (k3s-server)
      Tasks: 328
     Memory: 1.1G
     CGroup: /system.slice/k3s.service
             ├─    506 /usr/local/bin/k3s server
             ├─   1465 containerd
             ├─   2042 /var/lib/rancher/k3s/data/986d5e8cf570...
             ├─   2062 /pause
             ├─   2300 /var/lib/rancher/k3s/data/986d5e8cf570...
             ├─   2320 /pause
             ├─   2383 /traefik --configfile=/config/traefik.toml
...

Connecting to your Cluster

Zum Cluster verbinden

Bei der K3s-Installation wird ein kubeconfig-File in ‚/etc/rancher/k3s/k3s.yaml‘ geschrieben, mit dem du dich zum Cluster verbinden kannst. Die kubeconfig in etwa so aus wie diese hier:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0...
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    client-certificate-data: LS...
    client-key-data: LS...

To connect to the cluster using the kubectl command you can specify the location of the kubeconfig file with the ‚–kubeconfig‘ option as shown below:

Um mit dem Befehl kubectl mit dem Cluster zu verbinden, musst du das File mit der Option „–kubeconfig“ wie unten gezeigt angeben:

# Liste der Nodes ausgeben
kubectl --kubeconfig=/etc/rancher/k3s/k3s.yaml  get nodes
NAME                          STATUS   ROLES                  AGE    VERSION
vmxx28193.bydddddserver.net   Ready    control-plane,master   255d   v1.20.0+k3s2
# Liste der Pods ausgeben
kubectl --kubeconfig=/etc/rancher/k3s/k3s.yaml  get pods --all-namespaces
NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
kube-system   local-path-provisioner-58fb86bdfd-r5zcp   1/1     Running     0          2m10s
kube-system   metrics-server-6d684c7b5-2g7wq            1/1     Running     0          2m10s
kube-system   helm-install-traefik-zv6bp                0/1     Completed   0          2m9s
kube-system   svclb-traefik-98bgg                       2/2     Running     0          107s
kube-system   coredns-6c6bb68b64-hr2dv                  1/1     Running     0          2m10s
kube-system   traefik-7b8b884c8-qqhgf                   1/1     Running     0          107s

Lies diesen Artikel für weitere Möglichkeiten, wie du dich mit dem Cluster verbinden kannst.

UFW Firewall (optional)

Wenn dein Host direkt aus dem Internet erreichbar ist, ist es ratsam, eine Firewall zu konfigurieren. Auch wenn du bereits eine Firewall auf deinem Host konfiguriert hast, musst du eventuell ein paar Regeln hinzufügen, damit Kubernetes korrekt funktioniert. Wenn dein Host nur von deinem internen Netzwerk aus erreichbar ist kannst du diesen Teil überspringen.

Die Standard-Firewall unter Ubuntu ist UFW, daher zeige ich dir die Befehle für UFW.

Firewall-Regel für das Zulassen von Intra-Cluster-Verkehr (Credits gehen an https://jbhannah.net/articles/k3s-wireguard-kilo ):

ufw default allow routed
ufw allow in on cni0 from 10.42.0.0/16 coment "K3s rule: allow traffic from kube-system pods"
ufw allow in on kube-bridge from 10.42.0.0/16 comment "K3s”

Erlaube eingehenden Traffic zum Ingress Controller:

ufw allow 80/tcp comment "K8s Ingress Traefik"
ufw allow 443 comment "K8s Ingress Traefik"

Erlaube Zugriff zur Kubernetes API von deinem Netz (IP Bereich passend ersetzen):

ufw allow from 10.x.x.0/24 to any port 6443 comment "K8s: allow access to kube-api from internal network"

ufw allow from 2a02:abcd:abcd:abcd::/64 to any port 6443 comment "K8s: allow access to kube-api from home"

Nicht vergessen den SSH Port von deinem Netzwerk zu öffnen:

ufw allow from x.x.x.0/24 to any port 22 comment "SSH: allow SSH access from home"

Weitere Artikel

Schreibe einen Kommentar