Diese Schritte müssen auf allen Servern ausgeführt werden, unabhängig davon, ob sie nun später die Master-Node werden oder nur normale Worker-Nodes!
Zuerst generell alle Repositories aktualisieren und installierte Packages updaten:
apt update && apt upgrade
Danach müssen einige Standard Programme installiert werden, welche im Betrieb und bei der weiteren Installation benötigt werden:
apt install -y htop vim net-tools open-vm-tools curl
Bevor wir mit der Installation von Kubernetes anfangen, müssen wir schauen, dass das Modul br_netfilter geladen wurde. Dies ist notwendig, damit die IP-Tables den bridged traffic richtig sehen können.
modprobe br_netfilter
Nun folgende Commands ausführen, damit die IP Tables den bridged traffic sehen können:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
Danach müssen die verschiedenen Tabellen für IP, ARP, etc. installiert werden:
apt-get install -y iptables arptables ebtables
Und die gerade installierten Tabellen werden nun hiermit in den Legacy Modus versetzt, welcher für Kubernetes wichtig ist:
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives --set arptables /usr/sbin/arptables-legacy
update-alternatives --set ebtables /usr/sbin/ebtables-legacy
Nachdem all die vorherigen Schritte abgeschlossen wurden, müssen nun nur noch einige Dependencies für Kubernetes und Docker installiert werden:
apt-get update && apt-get install -y \
apt-transport-https ca-certificates software-properties-common gnupg2
Diese Schritte müssen auf allen Servern ausgeführt werden, unabhängig davon, ob sie nun später die Master-Node werden oder nur normale Worker-Nodes!
Nun zur Installation von Docker, dem Container-System, welches Kubernetes verwalten und managen wird. Zuerst müssen wir den Repository Key herunterladen und installieren:
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
Nachdem der Schlüssel installiert ist, müssen wir nur noch die Repository zum System hinzufügen:
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
Und danach nochmals alle Repositories updaten und Docker installieren:
apt-get update && apt-get install -y \
containerd.io=1.2.10-3 \
docker-ce=5:19.03.4~3-0~debian-$(lsb_release -cs) \
docker-ce-cli=5:19.03.4~3-0~debian-$(lsb_release -cs)
Um die Kompatibilität zu Kubernetes sicher zu stellen, müssen noch ein paar Parameter zu Docker hinzugefügt werden, welche mit Hilfe dieses Commands erledigt werden können. Dieser Schritt ist wichtig, da Docker für Kubernetes SystemD benutzen muss:
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
Nun muss ein Ordner für den Service Daemon von Docker erstellt werden:
mkdir -p /etc/systemd/system/docker.service.d
Und danach müssen die Daemons, sowie Docker neu gestartet werden, um alle Änderungen zu übernehmen:
systemctl daemon-reload
systemctl restart docker
Zur Installation von Kubernetes selbst müssen nun folgende Commands ausgeführt werden. Diese Commands können direkt so zusammen in die SSH Session kopiert werden und ausgeführt werden, da in diesem Block der Repository Key, sowie die Repository selbst und die Installation alles in einem Durchgang ausgeführt werden.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
Falls bei der Installation von Debian doch eine Swap Partition erstellt wurde, muss diese für die Installation deaktiviert werden und später via der Datei /etc/fstab permanent deaktiviert werden, da Kubernetes nicht mit einem Swap funktioniert:
swapoff -a
Die folgenden Schritte dürfen nur auf der Master-Node (der VM, die das Cluster managen soll) ausgeführt werden!
Mit diesem Command wird die Master-Node initiiert und der interne Netzwerkbereich für die Container eingerichtet. Die Netzwerkadresse und die Maske darf nicht verändert werden, da das CNI (Container Network Interface) sonst nicht funktioniert!
kubeadm init --apiserver-advertise-address=$(hostname -i) --apiserver-cert-extra-sans="192.168.124.19" --pod-network-cidr=10.244.0.0/16
Nachdem das Setup abgeschlossen wurde, muss eine Zeile aus der Meldung am Ende kopiert werden, welche ungefähr wie folgt aussieht:
kubeadm join 192.168.124.19:6443 --token cpakpm.yjagao4t26yf9vn0 \
--discovery-token-ca-cert-hash sha256:3d2326443bb2d7d64c618481b7909a345117ee784eaa8f37550e2828ea5373e5
Diese Zeile ist wichtig, da diese für die Worker-Nodes benötigt wird, um diese mit der Master-Node zu verbinden. Danach muss dem bei der Installation von Debian eingerichteten User noch die Rechte für sudo geben (in diesem Beispiel heißt der User „mxp“)
usermod -aG sudo mxp
und dann muss man sich als User anmelden
su mxp
und folgenden Command Block ausführen:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
exit
export KUBECONFIG=/etc/kubernetes/admin.conf
Nun muss das zuvor genannte CNI installiert werden, ohne welches Kubernetes nicht funktionieren wird:
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
Wichtig! Falls bei einem Schritt nach der Installation von Kubernetes eine Meldung kommen sollte, dass keine Verbindung zu einer Localhost Adresse besteht, muss folgendes Command ausgeführt werden:
export KUBECONFIG=/etc/kubernetes/admin.conf
Als letzter Schritt muss nur noch folgende Zeile zu /etc/environment hinzugefügt werden:
KUBECONFIG=/etc/kubernetes/admin.conf
Und danach den Server neu starten.
Nachdem die Master-Node neu gestartet wurde, kann man damit anfangen die Nodes mit der Master-Node zu verbinden mit Hilfe des Commands, welcher davor nach dem Setup kopiert wurde. Dieses Command muss nun auf den Worker-Nodes ausgeführt werden und nach Abschluss kann man auf der Master-Node mit Hilfe des Commands kubectl get nodes die Verbindung aller Nodes überprüfen.
Wichtig! Der Befehl aus dem Setup ist lediglich für 24 Stunden valide, wie man zu einem späteren Zeitpunkt noch weitere Nodes installiert, wird in einem anderen Kapitel erklärt!