Einen Kubernetes Cluster Installieren - Kubernetes für dummies - Teil 1

Moin zusammen,


ehrlich gesagt noch keine Ahnung ob das jetzt ein Posting oder mehrere werden, da ich live blogge sprich während der Installation. Wenn es zu viel wird splitte ich es in mehrer Beiträge.

Ziel ist es einen Kubernetes Cluster mit mindestens einem Master (weniger geht eh nicht) und 2 worker nodes aufzusetzen. Das ganze auf Ubuntu Version 18 wegen LTS support; die 19 hat nur support bis Mitte 2020. Hardwareplatform sind Intel I5 und i7 also gebräuchliche Heimprozessoren aber mit Hyper-V Cluster als Hardwareabstraktionsschicht (einfach weil ich das schon laufen habe). Ob das geht werden wir sehen, Alternative Openstack, VMCluster oder wenn Ihr übrig habt direkt auf dem nackten Metall eine Ubuntu Barebone Installation machen.


Input zu dieser Anleitung kam von folgenden Seiten:

Vorraussetzungen

Also ich setze mal voraus das Ubuntu 18 LTS schon läuft. Server Variante ohne GUI-Kram und keine zusätzlichen Pakete installiert & SSH aktiviert. Wir werden alles auf der Kommandozeile machen. Bei mir laufen also aktuell drei nodes:

  1. k8s-master-i (192.168.0.40)
  2. k8s-compute-i (192.168.0.43)
  3. k8s-compute-ii (192.168.0.44)

Alles mit einer statischen IP (oder fest via DHCP) versehen. Anmerkung: Statische IP Adressen für Ubuntu 18 weist mit netplan zu. Die Rechnernamen müssen eindeutig sein (sollte eh selbstverständlich sein aber wer weiss). Zwingend erforderlich sind mindestens zwei CPU-Cores, Speichermenge: ich habe es mit 512MB min und dynamisch nach oben konfiguriert.

Anmerkung nachdem der Master läuft: Er braucht im idle Zustand gerade 3GB Speicher.

Hier die Installation der Komponenten bevor wir anfangen K8s zu konfigurieren:

Paketinstallation

Code
sudo apt install docker.io
sudo systemctl enable docker
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt install kubeadm


curl sollte schon auf der LTS version sein. Wenn nicht, nachinstallieren. Nicht wundern das wir xenial (Ubuntu 16) angeben, es gibt noch kein bionic (Ubuntu 18) repo für Kubernetes. Ob die Installation geklappt hat mit

Code
kubeadm version
docker --version

prüfen. das ergibt bei mir (02.02.2020):

Code
olaf-krause@k8s-master-i:~$ docker --version
Docker version 18.09.7, build 2d0083d
olaf-krause@k8s-master-i:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2", GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89", GitTreeState:"clean", BuildDate:"2020-01-18T23:27:49Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}

Anpassungen um bei der Konfig Warnungen zu vermeiden

Docker mit systemd starten siehe https://kubernetes.io/docs/set…nment/container-runtimes/ dazu die /etc/docker/daemon.json erstellen und die service.d.


die Meldungen:


W0202 08:38:28.754318 2945 validation.go:28] Cannot validate kube-proxy config - no validator is available

W0202 08:38:28.754364 2945 validation.go:28] Cannot validate kubelet config - no validator is available


vom Init Kommando (nächster Schritt) können erstmal ignoriert werden. Ach der Swap muss für Kubernetes noch ausgeschaltet werden. Temporär geht das zwar mit swapoff -a aber beim nächsten reboot ist der dann wieder an. Besser in /etc/fstab die Zeile mit # auskommentieren.

K8s Configuration des Masters

Erster Schritt ist simple einfach das Kommando:

Code
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

aufrufen. 10.244.0.0/16 ist das private Netz in dem die Kubernetes pods später laufen.

dann noch wie es oben in der Ausgabe steht als normaler user

Code
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

mit dem Kommando

Code
kubeadm join 192.168.0.40:6443 --token ndcyaw.ofx2bnuiasdeqg1qvb \ --discovery-token-ca-cert-hash sha256:68c367b8dc017e217ff2a1034asdbi8f994d9d3b7ae4ac7b9ea639bd08c20

können dann weitere nodes dem cluster hinzugefügt werden (als root ausführen). Kurz prüfen wie der stand ist mit

Code
olaf-krause@k8s-master-i:~/.kube$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-i NotReady master 3h45m v1.17.2

soweit OK wir sind noch auf dem ersten Master und haben noch keine weiteren nodes hinzugefügt.

Ein kubernetes pod network anlegen und zu Verfügung stellen

Zum Einlesen evtl. https://kubernetes.io/docs/con…dministration/networking/ studieren. Default und deswegen recht einfach zu nutzen ist Flannel.

Diese Seite gibt auch noch eine gute Übersicht: https://rancher.com/blog/2019/…l-calico-canal-and-weave/


Legen wir doch einfach los (denn Sie wissen nicht was sie tun :)):

kurzer check

Code
olaf-krause@k8s-master-i:~/.kube$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-gk8m6 1/1 Running 0 4h3m
kube-system coredns-6955765f44-nrt9k 1/1 Running 0 4h3m
kube-system etcd-k8s-master-i 1/1 Running 0 4h3m
kube-system kube-apiserver-k8s-master-i 1/1 Running 0 4h3m
kube-system kube-controller-manager-k8s-master-i 1/1 Running 0 4h3m
kube-system kube-flannel-ds-amd64-7x2js 1/1 Running 0 32s
kube-system kube-proxy-6qds9 1/1 Running 0 4h3m
kube-system kube-scheduler-k8s-master-i 1/1 Running 0 4h3m

Der Masternode ist jetzt einsatzbereit:

Code
olaf-krause@k8s-master-i:~/.kube$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-i Ready master 4h4m v1.17.


Das war's jetzt für Teil 1 Kubernetes aufsetzen für dummies. Damit wäre die Frage auch beantwortet ob es mehrere Teile gibt: Ja!

Wieviele es noch werden - mal schauen :P

Comments