1.051
Bearbeitungen
K (→Controller) |
KKeine Bearbeitungszusammenfassung |
||
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 19: | Zeile 19: | ||
Die Installation in einem VM Cluster wie Proxmox bietet sich aufgrund der Zeitersparnis an, dennoch sollte aber alles hier beschriebene grundsätzlich auch auf "echten" Maschinen funktionieren. | Die Installation in einem VM Cluster wie Proxmox bietet sich aufgrund der Zeitersparnis an, dennoch sollte aber alles hier beschriebene grundsätzlich auch auf "echten" Maschinen funktionieren. | ||
Zeile 38: | Zeile 36: | ||
''Einige Kubernetes Deployments nutzen MongoDB als Datenbank.'' | ''Einige Kubernetes Deployments nutzen MongoDB als Datenbank.'' | ||
''Ab MongoDB 5.0 werden keine Systeme mehr unterstützt deren CPU das AVX-Flag nicht hat.'' | ''Ab MongoDB 5.0 werden keine Systeme mehr unterstützt deren CPU das AVX-Flag nicht gesetzt hat.'' | ||
''Damit es später keine Probleme gibt, sollte daher als CPU nicht 'kvm64' sondern 'host' ausgewählt werden.'' | |||
Dies wird ebenfalls empfohlen um "Nested Virtualization" zu nutzen, wodurch die Performance erheblich verbessert werden kann.<ref>https://pve.proxmox.com/wiki/Nested_Virtualization</ref> | |||
=== Controller und Worker === | === Controller und Worker === | ||
Zeile 162: | Zeile 162: | ||
setenforce 0 | setenforce 0 | ||
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config | sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config | ||
</syntaxhighlight>Jetzt können die | </syntaxhighlight>Jetzt können die Tools für den Cluster installiert werden:<syntaxhighlight lang="bash"> | ||
dnf update | dnf update | ||
dnf install -y kubeadm kubectl kubelet nfs-utils --disableexcludes=kubernetes | dnf install -y kubeadm kubectl kubelet nfs-utils --disableexcludes=kubernetes | ||
Zeile 171: | Zeile 171: | ||
- '''kubelet''' / Steuert die Kommunikation zwischen den Nodes und der API | - '''kubelet''' / Steuert die Kommunikation zwischen den Nodes und der API | ||
- '''nfs-utils''' / Um NFS Exports in den Cluster einzubinden | - '''nfs-utils''' / Um NFS Exports als "Persistent Volume" in den Cluster einzubinden | ||
Kubelet beim Neustart automatisch starten:<syntaxhighlight lang="bash"> | Kubelet beim Neustart automatisch starten:<syntaxhighlight lang="bash"> | ||
systemctl enable kubelet | systemctl enable kubelet | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Firewall konfigurieren === | === Firewall konfigurieren === | ||
Zeile 267: | Zeile 269: | ||
</syntaxhighlight>'''''Die Join Kommandos braucht man sich nicht zu speichern, da der Token jederzeit mit''''' <code>kubeadm token create --print-join-command</code> '''''neu generiert werden kann.''''' | </syntaxhighlight>'''''Die Join Kommandos braucht man sich nicht zu speichern, da der Token jederzeit mit''''' <code>kubeadm token create --print-join-command</code> '''''neu generiert werden kann.''''' | ||
Wenn man jetzt mit <code>kubectl get nodes</code> den Status des einen Nodes abfragt wird man feststellen, dass dieser auf "Not Ready" bleibt... | |||
Mit <code>kubectl get pods -n kube-system</code> sieht man, dass die Pods "coredns" im Status "Pending" sind.<syntaxhighlight lang="bash"> | |||
NAME READY STATUS RESTARTS AGE | |||
coredns-787d4945fb-k4q67 1/1 Pending 0 5m16s | |||
coredns-787d4945fb-klgw4 1/1 Pending 0 5m16s | |||
etcd-k8s-ctrlr-1 1/1 Running 0 6m31s | |||
kube-apiserver-k8s-ctrlr-1 1/1 Running 0 6m30s | |||
kube-controller-manager-k8s-ctrlr-1 1/1 Running 0 6m29s | |||
kube-proxy-8gstv 1/1 Running 0 5m13s | |||
kube-scheduler-k8s-ctrlr-1 1/1 Running 0 6m31s | |||
</syntaxhighlight>Das liegt daran, dass der "coredns" auf eine interne IP im Bereich 10.244.0.0/16 wartet. | |||
Damit der Node eine IP zugewiesen bekommt, müssen wir als erstes den [https://github.com/flannel-io/flannel flannel-Agent] installieren. | |||
Dieser ist so eine Art interner Router der den Nodes eigene Subnetze zuweist, aus welchen sich die Pods dann ihre IP-Adressen beziehen. | Dieser ist so eine Art interner Router der den Nodes eigene Subnetze zuweist, aus welchen sich die Pods dann ihre IP-Adressen beziehen. | ||
Zeile 281: | Zeile 298: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Anschließend kann mit <code>kubectl get nodes</code> überprüft werden, ob der Controller läuft:<syntaxhighlight lang="bash"> | |||
NAME STATUS ROLES AGE VERSION | NAME STATUS ROLES AGE VERSION | ||
k8s-ctrlr-1 Ready control-plane 8m7s v1.26.0 | k8s-ctrlr-1 Ready control-plane 8m7s v1.26.0 | ||
Zeile 310: | Zeile 327: | ||
'''Glückwunsch zu eurem | '''Glückwunsch zu eurem neuen Kubernetes Cluster!''' | ||
== Dashboard == | == Dashboard == | ||
Zeile 427: | Zeile 444: | ||
==== Keycloak (OIDC) ==== | ==== Keycloak (OIDC) ==== | ||
Siehe [[Kubernetes Dashboard mit Keycloak OIDC]] | |||
Zeile 481: | Zeile 499: | ||
== Weiterführende Links == | == Weiterführende Links == | ||
*[https://krew.sigs.k8s.io/plugins/ Plugins für kubectl Kommando] | *[https://krew.sigs.k8s.io/plugins/ Plugins für kubectl Kommando] | ||
*[https://github.com/collabnix/kubetools Liste mit Tools für Kubernetes] | *[https://github.com/collabnix/kubetools Liste mit Tools für Kubernetes] | ||
*[https://artifacthub.io/ Sammlung von Kubernetes Packages (Helm)] | |||
== Quellen == | == Quellen == | ||
https://www.thegeekdiary.com/how-to-access-kubernetes-dashboard-externally/ | * https://www.youtube.com/watch?v=U1VzcjCB_sY | ||
* https://docs.docker.com/engine/install/centos/ | |||
* https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ | |||
* https://www.thegeekdiary.com/how-to-access-kubernetes-dashboard-externally/ | |||
=== Einzelnachweise === | === Einzelnachweise === |