Kubernetes ist im Gegensatz zu Docker skalierbarer. Es besteht aus mehreren Nodes und kann im Laufenden Betrieb erweitert werden:
-
Master
-
Worker-01
-
Worker-02
-
Worker-03
Ich benutze als Unterbau in meinem Aufbau einen Ubuntu Server. Zuerst müssen die einzelnen Nodes "hergerichtet werden".
Nodename einstellen mit --> hostnamectl set-hostname NAME
IP-Adresse mit --> ip addr anzeigen
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:81:93:a0 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 172.16.155.10/24 brd 172.16.155.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe81:93a0/64 scope link
valid_lft forever preferred_lft forever
In der Datei /etc/netplan/00... --> die richtige IP-Adresse einstellen.
root@cl1-master-01:~$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
ens33:
addresses:
- 172.16.155.10/24
nameservers:
addresses:
- 172.16.16.11
search:
- d00.cccrz.de
routes:
- to: default
via: 172.16.155.1
version: 2
Dann mit netplan apply die Änderungen übernehmen.
swapoff -a --> Swapdatei ausschalten
Wenn man nach der Offiziellen Dokumentation geht, soll zuerst eine ContainerRuntime installiert werden. Das war früher Docker, aber ab der Version 1.24 nicht mehr. Jetzt stehen folgende zur Auswahl
Ich habe mich für containerd entschieden.
Auch eine sehr gute Anleitung gibt es bei https://www.kreyman.de gefunden. Die gehen in einer anderen Reihenfolge vor, was auch funktioniert ;-)
Zuerst gehören noch ein paar Kernelmodule installiert.
Offizielle Information: https://kubernetes.io/docs/setup/production-environment/container-runtimes/
Zum Betrieb von containerd werden folgende Kernelmodule geladen und die dazugehörigen Informationen aktualisiert.
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
modprobe ist ein Linux-Programm und dazu dient, ein ladbares Kernelmodul zum Linux-Kernel hinzuzufügen oder ein ladbares Kernelmodul aus dem Kernel zu entfernen.
Überprüfen Sie, ob die Module geladen sind:
lsmod | grep br_netfilter
lsmod | grep overlay
2. Weiterhin werden folgenden sysctl-Paramter angepasst und konfiguriert, sodass diese nach dem Reboot erhalten bleiben.
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
3. sysctl-Parameter ohne Neustart übernehmen
sudo sysctl --system
4. Jetzt die Paketlisten aktualisierten
sudo apt update
5. containerd-Komponente installieren
sudo apt-get install -y containerd
6. Für die containerd-Konfigurationsdatei wird ein Ordner erstellt und eine Default-Konfigurationsdatei erzeugt:
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
7. Die erzeugte Konfigurationsdatei muss noch passend angepasst werden:
sudo vi /etc/containerd/config.toml
Ändert am Ende dieses Abschnitts den Eintrag auf True
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = false in SystemdCgroup = true
8. Dann kann der containerd mit der neuen Konfiguration gestartet werden.
sudo systemctl restart containerd
Installation der Kubernetes Tools kubeadm, kubelet and kubectl
-
Update the
apt
package index and install packages needed to use the Kubernetesapt
repository:sudo apt-get update # apt-transport-https may be a dummy package; if so, you can skip that package sudo apt-get install -y apt-transport-https ca-certificates curl
-
Download the public signing key for the Kubernetes package repositories. The same signing key is used for all repositories so you can disregard the version in the URL:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
-
Add the appropriate Kubernetes
apt
repository:# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
-
Update the
apt
package index, install kubelet, kubeadm and kubectl, and pin their version:sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
All diese Schritte müssen auf allen Nodes durchgeführt werden !!
Da nun die Vorarbeiten beendet sind wird mit dem Tool kubeadm ein Cluster generiert.
Den KubernetesCluster Initilisieren
18. Mit der folgenden Befehlskette können die Einstellungen überprüft bzw. in der Datei ClusterConfiguration abgespeichert werden.
kubeadm config print init-defaults | tee ClusterConfiguration.yaml
19. Initialisierung des Clusters durchführen:
sudo kubeadm init
oder
sudo kubeadm init --kubernetes-version v1.25.5
Wenn die Initialisierung des Clusters erfolgreich verlaufen ist, werden die Ergebnisse ähnlich aussehen:
Die untere Befehlskette ist für die Anbindung der Worker Nodes an den Cluster notwendig.
20. Folgende Schritte sind notwendig, um den nicht privilegierten Benutzer zu erlauben den Cluster zu verwalten.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config21. Auf Basis von calico.yaml wird ein Pod-Netzwerk erstellt.
kubectl apply -f calico.yaml
22. Der folgende Schritt muss auf allen Nodes durchgeführt werden!
Der Befehl sudo kubeadm join wird verwendet, um einen neuen Worker-Knoten zu einem bestehenden Kubernetes-Cluster hinzuzufügen.
sudo kubeadm join 192.168.1.170:6443 --token 9yfgi9.5r71sn1crpmupezi \
--discovery-token-ca-cert-hash sha256:8ab42b0b6d3c21f3aa93495e0d102710df3baea5e22e9dfc33ed58830f024a3fErgebnisse überprüfen
23. Wenn Sie auf dem Control Node folgende Ergebnisse sehen, dann war die Installation/Konfiguration des Cluster erfolgreich.
kubectl get nodes
Dann braucht es ein Netzwerk, um die Nodes zu verbinden.
https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/
https://docs.cilium.io/en/stable/gettingstarted/hubble_setup/#hubble-setup