it-wiki:kubernetes:installation
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| it-wiki:kubernetes:installation [2024/03/13 12:07] – marko | it-wiki:kubernetes:installation [2025/11/09 07:41] (aktuell) – [Installation Krew PlugIn Manager] marko | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Kubernetes Installation ====== | ====== Kubernetes Installation ====== | ||
| ===== Manuelle Installation der Kubernetes-Binaries ===== | ===== Manuelle Installation der Kubernetes-Binaries ===== | ||
| - | **Kernel-Module in die ''/ | + | **Kernel-Module in die ''/ |
| <code bash> | <code bash> | ||
| br_netfilter | br_netfilter | ||
| Zeile 13: | Zeile 13: | ||
| </ | </ | ||
| - | **System-Konfiguration anpassen (''/ | + | **System-Konfiguration anpassen (''/ |
| <code bash> | <code bash> | ||
| net.ipv4.ip_forward=1 | net.ipv4.ip_forward=1 | ||
| Zeile 22: | Zeile 22: | ||
| **System-Konfiguration laden: ** | **System-Konfiguration laden: ** | ||
| <code bash> | <code bash> | ||
| - | sysctl -p / | + | sysctl -p /etc/sysctl.d/ |
| </ | </ | ||
| Zeile 33: | Zeile 33: | ||
| **Docker-Repository hinzufügen (''/ | **Docker-Repository hinzufügen (''/ | ||
| <code bash> | <code bash> | ||
| - | deb https:// | + | deb https:// |
| </ | </ | ||
| Zeile 53: | Zeile 53: | ||
| '' | '' | ||
| <code bash> | <code bash> | ||
| + | sandbox_image = " | ||
| + | |||
| [plugins." | [plugins." | ||
| SystemdCgroup = true | SystemdCgroup = true | ||
| Zeile 60: | Zeile 62: | ||
| <code bash> | <code bash> | ||
| [plugins." | [plugins." | ||
| - | endpoint = [" | + | endpoint = [" |
| </ | </ | ||
| Zeile 76: | Zeile 78: | ||
| **Kubernetes-Repository-Schlüssel vertrauen: ** | **Kubernetes-Repository-Schlüssel vertrauen: ** | ||
| <code bash> | <code bash> | ||
| - | curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor --output / | + | curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/ |
| </ | </ | ||
| **Kubernetes-Repository hinzufügen (''/ | **Kubernetes-Repository hinzufügen (''/ | ||
| <code bash> | <code bash> | ||
| - | deb https://apt.kubernetes.io/ kubernetes-xenial main | + | deb https://pkgs.k8s.io/core:/ |
| </ | </ | ||
| Zeile 91: | Zeile 93: | ||
| **Kubernetes-Binaries installieren: | **Kubernetes-Binaries installieren: | ||
| <code bash> | <code bash> | ||
| - | apt install kubeadm=1.25.4-00 kubectl=1.25.4-00 kubelet=1.25.4-00 | + | apt install kubeadm=1.31.7-00 kubectl=1.31.7-00 kubelet=1.31.7-00 |
| </ | </ | ||
| Zeile 102: | Zeile 104: | ||
| Das Setup des Clusters erfolgt in drei Schritten: | Das Setup des Clusters erfolgt in drei Schritten: | ||
| - | 1. auf dem ersten Knoten ('' | + | 1. auf dem ersten Knoten ('' |
| - | 2. die Control-Plane des Clusters wird um zwei Knoten erweitert ('' | + | 2. die Control-Plane des Clusters wird um zwei Knoten erweitert ('' |
| - | 3. dem Cluster werden zwei Worker-Knoten hinzugefügt ('' | + | 3. dem Cluster werden zwei Worker-Knoten hinzugefügt ('' |
| ==== Initialisierung des Clusters ==== | ==== Initialisierung des Clusters ==== | ||
| + | **kube-vip.yml** | ||
| - | Für die Initialisierung des Clusters wird auf dem ersten Knoten ('' | ||
| <code yaml> | <code yaml> | ||
| - | apiVersion: kubeadm.k8s.io/ | + | --- |
| + | # task: install kube-vip for HA Kubernetes Controlplane | ||
| + | # hint: see https:// | ||
| + | # | ||
| + | apiVersion: v1 | ||
| + | kind: Pod | ||
| + | metadata: | ||
| + | creationTimestamp: | ||
| + | name: kube-vip | ||
| + | namespace: kube-system | ||
| + | spec: | ||
| + | containers: | ||
| + | - args: | ||
| + | - manager | ||
| + | env: | ||
| + | - name: address | ||
| + | value: need-to-be-set | ||
| + | - name: port | ||
| + | value: " | ||
| + | - name: vip_arp | ||
| + | value: " | ||
| + | - name: vip_interface | ||
| + | value: ens3 # | ||
| + | - name: vip_cidr | ||
| + | value: " | ||
| + | - name: cp_enable | ||
| + | value: " | ||
| + | - name: cp_namespace | ||
| + | value: kube-system | ||
| + | - name: vip_ddns | ||
| + | value: " | ||
| + | - name: svc_enable | ||
| + | value: " | ||
| + | - name: vip_leaderelection | ||
| + | value: " | ||
| + | - name: vip_leaseduration | ||
| + | value: " | ||
| + | - name: vip_renewdeadline | ||
| + | value: " | ||
| + | - name: vip_retryperiod | ||
| + | value: " | ||
| + | image: ghcr.io/ | ||
| + | imagePullPolicy: | ||
| + | name: kube-vip | ||
| + | resources: {} | ||
| + | securityContext: | ||
| + | capabilities: | ||
| + | add: | ||
| + | - NET_ADMIN | ||
| + | - NET_RAW | ||
| + | - SYS_TIME | ||
| + | volumeMounts: | ||
| + | - mountPath: / | ||
| + | name: kubeconfig | ||
| + | hostAliases: | ||
| + | - hostnames: | ||
| + | - kubernetes | ||
| + | ip: 127.0.0.1 | ||
| + | hostNetwork: | ||
| + | volumes: | ||
| + | - hostPath: | ||
| + | path: / | ||
| + | name: kubeconfig | ||
| + | </ | ||
| + | Die kube-vip.yaml muss auf alle controlplan Nodes unter `/ | ||
| + | Desweiteren muss **nach dem Initialisieren** und **vor dem joinen** der anderen control plane Nodes in den Cluster die `/ | ||
| + | |||
| + | |||
| + | Für die Initialisierung des Clusters wird auf dem ersten Knoten ('' | ||
| + | <code yaml> | ||
| + | apiVersion: kubeadm.k8s.io/ | ||
| kind: ClusterConfiguration | kind: ClusterConfiguration | ||
| - | kubernetesVersion: | + | kubernetesVersion: |
| - | controlPlaneEndpoint: | + | controlPlaneEndpoint: |
| networking: | networking: | ||
| - | podSubnet: | + | podSubnet: |
| - | serviceSubnet: | + | serviceSubnet: |
| --- | --- | ||
| apiVersion: kubelet.config.k8s.io/ | apiVersion: kubelet.config.k8s.io/ | ||
| Zeile 122: | Zeile 194: | ||
| cgroupDriver: | cgroupDriver: | ||
| serverTLSBootstrap: | serverTLSBootstrap: | ||
| + | resolvConf: / | ||
| </ | </ | ||
| - | Die beiden Subnetze können angepasst werden und sollten sich nicht der Netzwerkkonfiguration des Hosts überschneiden. | + | Die beiden Subnetze können angepasst werden und sollten sich nicht mit der Netzwerkkonfiguration des Hosts überschneiden. |
| **Mit der Cluster-Konfiguration wird der Cluster initialisiert**: | **Mit der Cluster-Konfiguration wird der Cluster initialisiert**: | ||
| Zeile 137: | Zeile 210: | ||
| ==== Erweiterung der Control-Plane ==== | ==== Erweiterung der Control-Plane ==== | ||
| - | Wenn die Cluster-Initialisierung abgeschlossen ist, kann die Control-Plane um zwei Knoten ('' | + | Wenn die Cluster-Initialisierung abgeschlossen ist, kann die Control-Plane um zwei Knoten ('' |
| <code bash> | <code bash> | ||
| - | kubeadm join kubeapi-X.training.lab:6443 --token < | + | kubeadm join kubeapi.tuxnet.lab:6443 --token < |
| </ | </ | ||
| + | |||
| + | <note important> | ||
| Der Certificate-Key ist zwei Stunden gültig. Falls seit der Cluster-Initialisierung mehr als zwei Stunden vergangen sind, kann ein neuer Schlüssel erzeugt werden (die Doppelung im Befehl ist notwendig): | Der Certificate-Key ist zwei Stunden gültig. Falls seit der Cluster-Initialisierung mehr als zwei Stunden vergangen sind, kann ein neuer Schlüssel erzeugt werden (die Doppelung im Befehl ist notwendig): | ||
| Zeile 151: | Zeile 226: | ||
| Ist die Control-Plane vollständig, | Ist die Control-Plane vollständig, | ||
| <code bash> | <code bash> | ||
| - | kubeadm join kubeapi-X.training.lab:6443 --token < | + | kubeadm join kubeapi.tuxnet.lab:6443 --token < |
| </ | </ | ||
| Zeile 163: | Zeile 238: | ||
| Das Cluster ist jetzt vollständig. Die weitere Administration des Clusters soll vom Jumphost aus erfolgen. | Das Cluster ist jetzt vollständig. Die weitere Administration des Clusters soll vom Jumphost aus erfolgen. | ||
| - | Dazu wird zunächst '' | + | Dazu wird zunächst '' |
| <code bash> | <code bash> | ||
| mkdir bin | mkdir bin | ||
| source .profile | source .profile | ||
| - | wget -O bin/kubectl https:// | + | wget -O bin/kubectl https:// |
| chmod +x bin/kubectl | chmod +x bin/kubectl | ||
| </ | </ | ||
| Zeile 174: | Zeile 249: | ||
| <code bash> | <code bash> | ||
| mkdir -m 700 .kube | mkdir -m 700 .kube | ||
| - | scp root@master1-X.training.lab:/ | + | scp root@control1.tuxnet.lab:/ |
| </ | </ | ||
| Zeile 181: | Zeile 256: | ||
| user0@jumphost: | user0@jumphost: | ||
| NAME STATUS | NAME STATUS | ||
| - | master1-0 | + | control1 |
| - | master2-0 | + | control2 |
| - | master3-0 | + | control3 |
| - | worker1-0 | + | node1 |
| - | worker2-0 | + | node2 |
| </ | </ | ||
| Zeile 195: | Zeile 270: | ||
| Daher wird jetzt '' | Daher wird jetzt '' | ||
| <code bash> | <code bash> | ||
| - | kubectl apply -f https:// | + | kubectl apply -f https:// |
| </ | </ | ||
| Zeile 202: | Zeile 277: | ||
| user0@jumphost: | user0@jumphost: | ||
| NAME STATUS | NAME STATUS | ||
| - | master1-0 | + | control1 |
| - | master2-0 | + | control2 |
| - | master3-0 | + | control3 |
| - | worker1-0 | + | node1 Ready < |
| - | worker2-0 | + | node2 Ready < |
| </ | </ | ||
| Zeile 222: | Zeile 297: | ||
| Alternativ | Alternativ | ||
| - | '' | + | * '' |
| - | '' | + | |
| - | '' | + | |
| An dieser Stelle ist das Setup des Cluster abgeschlossen. | An dieser Stelle ist das Setup des Cluster abgeschlossen. | ||
| Zeile 236: | Zeile 311: | ||
| mkdir bin | mkdir bin | ||
| source .profile | source .profile | ||
| - | wget https:// | + | wget -O bin/ |
| chmod +x kubectl | chmod +x kubectl | ||
| mv kubectl bin | mv kubectl bin | ||
| Zeile 247: | Zeile 322: | ||
| <code bash> | <code bash> | ||
| # enable bash completion | # enable bash completion | ||
| - | source <( kubectl completion bash | sed ' | + | source < |
| alias k=kubectl | alias k=kubectl | ||
| + | complete -F __start_kubectl k | ||
| </ | </ | ||
| '' | '' | ||
| + | |||
| + | === oder === | ||
| + | <code bash> | ||
| + | mkdir -p ~/ | ||
| + | kubectl completion bash > ~/ | ||
| + | </ | ||
| + | und in der .bashrc dann | ||
| + | <code bash> | ||
| + | # kubectl bash complition | ||
| + | source < | ||
| + | </ | ||
| + | |||
| + | === oder === | ||
| + | am Ende der .profile | ||
| + | <code bash> | ||
| + | # kubectl alias and bash completion | ||
| + | # https:// | ||
| + | source < | ||
| + | alias k=kubectl | ||
| + | complete -F __start_kubectl k | ||
| + | </ | ||
| + | |||
| + | |||
| + | Für Helm würde selbiges funktionieren | ||
| + | <code bash> | ||
| + | mkdir -p ~/ | ||
| + | helm completion bash > ~/ | ||
| + | </ | ||
| + | ==== Installation Krew PlugIn Manager ===== | ||
| + | <code yaml> | ||
| + | ( set -x; cd " | ||
| + | export PATH=" | ||
| + | echo ' | ||
| + | kubectl krew | ||
| + | kubectl krew update | ||
| + | kubectl krew install view-secret | ||
| + | kubectl krew install ctx | ||
| + | kubectl krew install neat | ||
| + | </ | ||
it-wiki/kubernetes/installation.1710331648.txt.gz · Zuletzt geändert: von marko