Benutzer-Werkzeuge

Webseiten-Werkzeuge


it-wiki:kubernetes:installation

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
it-wiki:kubernetes:installation [2024/09/14 09:56] – [Erweiterung der Control-Plane] markoit-wiki:kubernetes:installation [2025/04/04 08:40] (aktuell) marko
Zeile 1: Zeile 1:
 ====== Kubernetes Installation ====== ====== Kubernetes Installation ======
 ===== Manuelle Installation der Kubernetes-Binaries ===== ===== Manuelle Installation der Kubernetes-Binaries =====
-**Kernel-Module in die ''/etc/modules'' eintragen:**+**Kernel-Module in die ''/etc/modules-load.d/modules.conf'' eintragen:**
 <code bash> <code bash>
 br_netfilter br_netfilter
Zeile 13: Zeile 13:
 </code> </code>
  
-**System-Konfiguration anpassen (''/etc/sysctl.conf''): **+**System-Konfiguration anpassen (''/etc/sysctl.d/90.kubernetes.conf''): **
 <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 /etc/sysctl.conf+sysctl -p /etc/sysctl.d/90.kubernetes.conf
 </code> </code>
  
Zeile 33: Zeile 33:
 **Docker-Repository hinzufügen (''/etc/apt/sources.list.d/docker.list''): ** **Docker-Repository hinzufügen (''/etc/apt/sources.list.d/docker.list''): **
 <code bash> <code bash>
-deb https://download.docker.com/linux/debian/ bullseye stable+deb https://download.docker.com/linux/debian/ bookworm stable
 </code> </code>
  
Zeile 53: Zeile 53:
 ''containerd-Konfiguration ''/etc/containerd/config.toml'' anpassen:'' ''containerd-Konfiguration ''/etc/containerd/config.toml'' anpassen:''
 <code bash> <code bash>
-sandbox_image = "registry.k8s.io/pause:3.9"+sandbox_image = "registry.k8s.io/pause:3.10"
  
 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
Zeile 62: Zeile 62:
 <code bash> <code bash>
 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
-  endpoint = ["https://registry.training.lab:5000"]+  endpoint = ["https://registry.tuxnet.lab:5000"]
 </code> </code>
  
Zeile 93: Zeile 93:
 **Kubernetes-Binaries installieren: ** **Kubernetes-Binaries installieren: **
 <code bash> <code bash>
-apt install kubeadm=1.31.1-00 kubectl=1.31.1-00 kubelet=1.31.1-00+apt install kubeadm=1.31.7-00 kubectl=1.31.7-00 kubelet=1.31.7-00
 </code> </code>
  
Zeile 104: Zeile 104:
  
 Das Setup des Clusters erfolgt in drei Schritten: Das Setup des Clusters erfolgt in drei Schritten:
-1. auf dem ersten Knoten (''k8s-control1.tuxnet.lan'') wird der Cluster initialisiert +1. auf dem ersten Knoten (''control1.tuxnet.lab'') wird der Cluster initialisiert 
-2. die Control-Plane des Clusters wird um zwei Knoten erweitert (''k8s-control2.tuxnet.lan'', ''k8s-control3.tuxnet.lan''+2. die Control-Plane des Clusters wird um zwei Knoten erweitert (''control2.tuxnet.lab'', ''control3.tuxnet.lab''
-3. dem Cluster werden zwei Worker-Knoten hinzugefügt (''k8s-worker1.tuxnet.lan'', ''k8s-worker2.tuxnet.lan'')+3. dem Cluster werden zwei Worker-Knoten hinzugefügt (''node1.tuxnet.lab'', ''node2.tuxnet.lab'')
  
 ==== Initialisierung des Clusters ==== ==== Initialisierung des Clusters ====
Zeile 153: Zeile 153:
     - name: vip_retryperiod     - name: vip_retryperiod
       value: "1"       value: "1"
-    image: ghcr.io/kube-vip/kube-vip:v0.6.    # change: to internal registry, if needed+    image: ghcr.io/kube-vip/kube-vip:v0.8.    # change: to internal registry, if needed
     imagePullPolicy: Always     imagePullPolicy: Always
     name: kube-vip     name: kube-vip
Zeile 173: Zeile 173:
   volumes:   volumes:
   - hostPath:   - hostPath:
-      path: /etc/kubernetes/admin.conf          # for kubernetes >v1.29.x use super-admin.conf+      path: /etc/kubernetes/super-admin.conf          # for kubernetes >v1.29.x use super-admin.conf
     name: kubeconfig     name: kubeconfig
 </code> </code>
Zeile 180: Zeile 180:
  
  
-Für die Initialisierung des Clusters wird auf dem ersten Knoten (''k8s-control1.tuxnet.lan'') eine Datei mit der Cluster-Konfiguration benötigt (''init.yml''):+Für die Initialisierung des Clusters wird auf dem ersten Knoten (''control1.tuxnet.lab'') eine Datei mit der Cluster-Konfiguration benötigt (''init.yml''):
 <code yaml> <code yaml>
-apiVersion: kubeadm.k8s.io/v1beta3+apiVersion: kubeadm.k8s.io/v1beta4
 kind: ClusterConfiguration kind: ClusterConfiguration
-kubernetesVersion: 1.31.1 +kubernetesVersion: 1.31.7 
-controlPlaneEndpoint: kubeapi.training.lab:6443+controlPlaneEndpoint: kubeapi.tuxnet.lab:6443
 networking: networking:
   podSubnet: 100.73.0.0/16   podSubnet: 100.73.0.0/16
Zeile 194: Zeile 194:
 cgroupDriver: systemd cgroupDriver: systemd
 serverTLSBootstrap: true serverTLSBootstrap: true
 +resolvConf: /etc/resolv.conf             # kann man auch weglassen
 </code> </code>
  
Zeile 209: Zeile 210:
 ==== Erweiterung der Control-Plane ==== ==== Erweiterung der Control-Plane ====
  
-Wenn die Cluster-Initialisierung abgeschlossen ist, kann die Control-Plane um zwei Knoten (''master2.training.lab'', ''master3.training.lab'') auf insgesamt drei Knoten erweitert werden. Dazu wird der erste ''kubeadm join''-Befehl **mit** der Option ''--control-plane'' verwendet:+Wenn die Cluster-Initialisierung abgeschlossen ist, kann die Control-Plane um zwei Knoten (''control2.tuxnet.lab'', ''control3.tuxnet.lab'') auf insgesamt drei Knoten erweitert werden. Dazu wird der erste ''kubeadm join''-Befehl **mit** der Option ''--control-plane'' verwendet:
 <code bash> <code bash>
-kubeadm join kubeapi.training.lab:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <key>+kubeadm join kubeapi.tuxnet.lab:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <key>
 </code> </code>
 +
 +<note important>Wenn die HA Fähigkeit mittels kube-vip angewendet wird, dann muss auf allen control-plane Nodes sowohl die kube-vip.yaml als auch die super-admin.conf kopiert werden.</note>
  
 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 223: Zeile 226:
 Ist die Control-Plane vollständig, können dem Cluster die Worker-Knoten hinzugefügt werden. Dazu wird der zweite ''kubeadm join''-Befehl **ohne** die Option ''--control-plane'' verwendet: Ist die Control-Plane vollständig, können dem Cluster die Worker-Knoten hinzugefügt werden. Dazu wird der zweite ''kubeadm join''-Befehl **ohne** die Option ''--control-plane'' verwendet:
 <code bash> <code bash>
-kubeadm join kubeapi.training.lab:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>+kubeadm join kubeapi.tuxnet.lab:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
 </code> </code>
  
Zeile 235: 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 ''kubectl'' im ''bin''-Verzeichnis des Benutzers (''/home/userX/bin'') installiert:+Dazu wird zunächst ''kubectl'' im ''bin''-Verzeichnis des Benutzers (''/home/<user>/bin'') installiert:
 <code bash> <code bash>
 mkdir bin mkdir bin
 source .profile source .profile
-wget -O bin/kubectl https://dl.k8s.io/release/v1.25.4/bin/linux/amd64/kubectl+wget -O bin/kubectl https://dl.k8s.io/release/v1.31.1/bin/linux/amd64/kubectl
 chmod +x bin/kubectl chmod +x bin/kubectl
 </code> </code>
Zeile 246: Zeile 249:
 <code bash> <code bash>
 mkdir -m 700 .kube mkdir -m 700 .kube
-scp root@master1-X.training.lab:/etc/kubernetes/admin.conf .kube/config+scp root@control1.tuxnet.lab:/etc/kubernetes/admin.conf .kube/config
 </code> </code>
  
Zeile 253: Zeile 256:
 user0@jumphost:~$ kubectl get nodes user0@jumphost:~$ kubectl get nodes
 NAME        STATUS   ROLES           AGE     VERSION NAME        STATUS   ROLES           AGE     VERSION
-master1-0   NotReady   control-plane   97s   v1.25.4 +control1   NotReady   control-plane   97s   v1.31.7 
-master2-0   NotReady   control-plane   57s   v1.25.4 +control2   NotReady   control-plane   57s   v1.31.7 
-master3-0   NotReady   control-plane   55s   v1.25.4 +control3   NotReady   control-plane   55s   v1.31.7 
-worker1-0   NotReady   <none>          5s    v1.25.4 +node1      NotReady   <none>          5s    v1.31.7 
-worker2-0   NotReady   <none>          5s    v1.25.4+node2      NotReady   <none>          5s    v1.31.7
 </code> </code>
  
Zeile 267: Zeile 270:
 Daher wird jetzt ''Calico'' in das Cluster installiert: Daher wird jetzt ''Calico'' in das Cluster installiert:
 <code bash> <code bash>
-kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml+kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.3/manifests/calico.yaml
 </code> </code>
  
Zeile 274: Zeile 277:
 user0@jumphost:~$ kubectl get nodes user0@jumphost:~$ kubectl get nodes
 NAME        STATUS   ROLES           AGE   VERSION NAME        STATUS   ROLES           AGE   VERSION
-master1-0   Ready    control-plane   12m   v1.25.4 +control1    Ready    control-plane   12m   v1.31.7 
-master2-0   Ready    control-plane   12m   v1.25.4 +control2    Ready    control-plane   12m   v1.31.7 
-master3-0   Ready    control-plane   12m   v1.25.4 +control3    Ready    control-plane   12m   v1.31.7 
-worker1-0   Ready    <none>          11m   v1.25.4 +node1       Ready    <none>          11m   v1.31.7 
-worker2-0   Ready    <none>          11m   v1.25.4+node2       Ready    <none>          11m   v1.31.7
 </code> </code>
  
Zeile 308: Zeile 311:
 mkdir bin mkdir bin
 source .profile source .profile
-wget https://dl.k8s.io/release/v1.24.3/bin/linux/amd64/kubectl+wget https://dl.k8s.io/release/v1.31.7/bin/linux/amd64/kubectl
 chmod +x kubectl chmod +x kubectl
 mv kubectl bin mv kubectl bin
Zeile 319: Zeile 322:
 <code bash> <code bash>
 # enable bash completion # enable bash completion
-source <( kubectl completion bash | sed 's#kubectl$#kubectl k#g' )+source <(kubectl completion bash)
 alias k=kubectl alias k=kubectl
 +complete -F __start_kubectl k
 </code> </code>
  
 ''$ source .bash_aliases'' ''$ source .bash_aliases''
 +
 +=== oder ===
 +<code bash>
 +mkdir -p ~/.local/share/bash-completion/completions/
 +kubectl completion bash > ~/.local/share/bash-completion/completions/kubectl
 +</code>
 +und in der .bashrc dann
 +<code bash>
 +# kubectl bash complition
 +source <(kubectl completion bash)
 +</code>
 +
 +=== oder ===
 +am Ende der .profile
 +<code bash>
 +# kubectl alias and bash completion
 +# https://kubernetes.io/docs/reference/kubectl/quick-reference/#bash
 +source <(kubectl completion bash)
 +alias k=kubectl
 +complete -F __start_kubectl k
 +</code>
 +
 +
 +Für Helm würde selbiges funktionieren
 +<code bash>
 +mkdir -p ~/.local/share/bash-completion/completions/
 +helm completion bash > ~/.local/share/bash-completion/completions/helm
 +</code>
 +==== Installation Krew PlugIn Manager =====
 +<code yaml>
 +(   set -x; cd "$(mktemp -d)" &&   OS="$(uname | tr '[:upper:]' '[:lower:]')" &&   ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&   KREW="krew-${OS}_${ARCH}" &&   curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&   tar zxvf "${KREW}.tar.gz" &&   ./"${KREW}" install krew; )
 +export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
 +echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ~/.bashrc
 +kubectl krew
 +kubectl krew update
 +kubectl krew install ctx
 +kubectl krew install neat
 +</code>
it-wiki/kubernetes/installation.1726307808.txt.gz · Zuletzt geändert: 2024/09/14 09:56 von marko