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 [2023/04/07 03:11] 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.10"
 +
 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
   SystemdCgroup = true   SystemdCgroup = true
Zeile 60: 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 75: Zeile 77:
  
 **Kubernetes-Repository-Schlüssel vertrauen: ** **Kubernetes-Repository-Schlüssel vertrauen: **
-<code bash> +<code bash>  
-wget -/etc/apt/trusted.gpg.d/kubernetes-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg+curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | gpg --dearmor --output /etc/apt/trusted.gpg.d/kubernetes-keyring.gpg
 </code> </code>
  
 **Kubernetes-Repository hinzufügen (''/etc/apt/sources.list.d/kubernetes.list''): ** **Kubernetes-Repository hinzufügen (''/etc/apt/sources.list.d/kubernetes.list''): **
 <code bash> <code bash>
-deb https://apt.kubernetes.io/ kubernetes-xenial main+deb https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /
 </code> </code>
  
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
 </code> </code>
  
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 (''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 ====
 +**kube-vip.yml**
  
-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''): +<code yaml> 
-<code bash+--- 
-apiVersion: kubeadm.k8s.io/v1beta3+# task: install kube-vip for HA Kubernetes Controlplane 
 +# hint: see https://kube-vip.io/docs/installation/static/#example-arp-manifest 
 +
 +apiVersion: v1 
 +kind: Pod 
 +metadata: 
 +  creationTimestamp: null 
 +  name: kube-vip 
 +  namespace: kube-system 
 +spec: 
 +  containers: 
 +  - args: 
 +    - manager 
 +    env: 
 +    - name: address 
 +      value: need-to-be-set                       # use your own kubevip 
 +    - name: port 
 +      value: "6443" 
 +    - name: vip_arp 
 +      value: "true" 
 +    - name: vip_interface                         # use your own network interface 
 +      value: ens3                                 #    e.g. ens3, eth0 
 +    - name: vip_cidr 
 +      value: "32" 
 +    - name: cp_enable 
 +      value: "true" 
 +    - name: cp_namespace 
 +      value: kube-system 
 +    - name: vip_ddns 
 +      value: "false" 
 +    - name: svc_enable 
 +      value: "false" 
 +    - name: vip_leaderelection 
 +      value: "true" 
 +    - name: vip_leaseduration 
 +      value: "5" 
 +    - name: vip_renewdeadline 
 +      value: "3" 
 +    - name: vip_retryperiod 
 +      value: "1" 
 +    image: ghcr.io/kube-vip/kube-vip:v0.8.9     # change: to internal registry, if needed 
 +    imagePullPolicy: Always 
 +    name: kube-vip 
 +    resources: {} 
 +    securityContext: 
 +      capabilities: 
 +        add: 
 +        - NET_ADMIN 
 +        - NET_RAW 
 +        - SYS_TIME 
 +    volumeMounts: 
 +    - mountPath: /etc/kubernetes/admin.conf 
 +      name: kubeconfig 
 +  hostAliases: 
 +  - hostnames: 
 +    - kubernetes 
 +    ip: 127.0.0.1 
 +  hostNetwork: true 
 +  volumes: 
 +  - hostPath: 
 +      path: /etc/kubernetes/super-admin.conf          # for kubernetes >v1.29.x use super-admin.conf 
 +    name: kubeconfig 
 +</code> 
 +Die kube-vip.yaml muss auf alle controlplan Nodes unter `/etc/kubernetes/manifests/` kopiert werden. 
 +Desweiteren muss **nach dem Initialisieren** und **vor dem joinen** der anderen control plane Nodes in den Cluster die `/etc/kubernetes/super-admin.conf` auf die anderen anderen control plane Nodes kopiert werden 
 + 
 + 
 +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
 +apiVersion: kubeadm.k8s.io/v1beta4
 kind: ClusterConfiguration kind: ClusterConfiguration
-kubernetesVersion: 1.25.4 +kubernetesVersion: 1.31.7 
-controlPlaneEndpoint: kubeapi.tuxnet.lan:6443+controlPlaneEndpoint: kubeapi.tuxnet.lab:6443
 networking: networking:
-  podSubnet: 10.30.0.0/16 +  podSubnet: 100.73.0.0/16 
-  serviceSubnet: 10.40.0.0/16+  serviceSubnet: 100.74.0.0/16
 --- ---
 apiVersion: kubelet.config.k8s.io/v1beta1 apiVersion: kubelet.config.k8s.io/v1beta1
Zeile 122: Zeile 194:
 cgroupDriver: systemd cgroupDriver: systemd
 serverTLSBootstrap: true serverTLSBootstrap: true
 +resolvConf: /etc/resolv.conf             # kann man auch weglassen
 </code> </code>
  
-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 (''master2-X.training.lab'', ''master3-X.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-X.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 151: 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-X.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 159: Zeile 234:
 </code> </code>
  
-=== kubectl auf dem Jumphost einrichten ===+===== kubectl auf dem Jumphost einrichten =====
  
 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 174: 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 181: 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>
  
-=== Abschluss der Cluster-Installation ===+===== Abschluss der Cluster-Installation =====
 ==== Calico installieren ==== ==== Calico installieren ====
  
Zeile 195: 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 202: 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 229: Zeile 304:
  
  
-=== kubectl von Adminworkstation ===+==== kubectl von Adminworkstation ====
  
 https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/ https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
Zeile 236: 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 243: Zeile 318:
 </code> </code>
  
-=== Bash Anpassungen ===+==== Bash Anpassungen ====
 ''vim ~/.bash_aliases'' ''vim ~/.bash_aliases''
 <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.1680837108.txt.gz · Zuletzt geändert: 2023/04/07 03:11 von marko