English
DH3MFW
headerimage

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

  1. Update the apt package index and install packages needed to use the Kubernetes apt 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
    
  2. 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
    
  3. 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
    
  4. 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: 

    012 Installation Abgeschlossen

    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/config

    21. Auf Basis von calico.yaml wird ein Pod-Netzwerk erstellt.

    kubectl apply -f calico.yaml

    014 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:8ab42b0b6d3c21f3aa93495e0d102710df3baea5e22e9dfc33ed58830f024a3f

    Ergebnisse überprüfen

    23. Wenn Sie auf dem Control Node folgende Ergebnisse sehen, dann war die Installation/Konfiguration des Cluster erfolgreich.

    kubectl get nodes

    015 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

     

nach oben