Zum Inhalt

Worker Node Setup

Ziel

In diesem Projekt konfigurieren Sie die Worker Nodes eines Kubernetes-Clusters manuell. Dabei werden Sie: - containerd und runc installieren - Zertifikate und Konfigurationsdateien erstellen - kubelet und kube-proxy konfigurieren und starten - die Worker Nodes mit der Control Plane verbinden

Aufgabe 1: Installation von containerd

In dieser Aufgabe installieren Sie containerd und runc auf den Worker Nodes.

  • Erstellen Sie ein Shell-Skript install-containerd.sh, das die Installation von containerd durchführt:
CONTAINERD_VERSION=2.0.2
RUNC_VERSION=1.2.4
# Install Containerd
wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz
tar Cxzvf /usr/local containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz
rm containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz
mkdir -p /usr/local/lib/systemd/system/
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service
systemctl daemon-reload
systemctl enable --now containerd

# Install runc
wget https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc
  • Führen Sie das Skript aus:
bash install-containerd.sh

Aufgabe 2: Zertifikate erstellen

In dieser Aufgabe erstellen Sie die benötigten Zertifikate für die Worker Nodes.

  • Erstellen Sie ein Shell-Skript generate-worker-certificates.sh, das die Zertifikate generiert:
#!/bin/bash

# Kubelet Client Zertifikat
openssl genrsa -out /etc/kubernetes/pki/kubelet-client.key 2048
openssl req -new -key /etc/kubernetes/pki/kubelet-client.key \
  -subj "/CN=system:node:<WORKER_NODE_NAME>/O=system:nodes" \
  -out /etc/kubernetes/pki/kubelet-client.csr
openssl x509 -req -in /etc/kubernetes/pki/kubelet-client.csr \
  -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial \
  -days 10000 -out /etc/kubernetes/pki/kubelet-client.crt

# Kube Proxy Zertifikat
openssl genrsa -out /etc/kubernetes/pki/kube-proxy.key 2048
openssl req -new -key /etc/kubernetes/pki/kube-proxy.key \
  -subj "/CN=system:kube-proxy" \
  -out /etc/kubernetes/pki/kube-proxy.csr
openssl x509 -req -in /etc/kubernetes/pki/kube-proxy.csr \
  -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial \
  -days 10000 -out /etc/kubernetes/pki/kube-proxy.crt
  • Führen Sie das Skript aus:
bash generate-worker-certificates.sh
  • Überprüfen Sie die generierten Zertifikate:
ls -l /etc/kubernetes/pki/

Die folgenden Zertifikate sollten vorhanden sein: - kubelet-client.crt, kubelet-client.key - kube-proxy.crt, kube-proxy.key


Aufgabe 3: Kubelet konfigurieren und starten

In dieser Aufgabe konfigurieren und starten Sie kubelet.

  • Erstellen Sie eine Datei /etc/systemd/system/kubelet.service mit folgendem Inhalt:
[Unit]
Description=Kubernetes Kubelet
Documentation=https://kubernetes.io/docs/home/
After=network.target

[Service]
ExecStart=/usr/bin/kubelet --container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
  • Erstellen Sie die Kubelet-Konfigurationsdatei /etc/kubernetes/kubelet.conf:
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --server=https://<CONTROL_PLANE_IP>:6443 \
  --kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config set-credentials kubelet \
  --client-certificate=/etc/kubernetes/pki/kubelet-client.crt \
  --client-key=/etc/kubernetes/pki/kubelet-client.key \
  --kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config set-context default \
  --cluster=kubernetes --user=kubelet --kubeconfig=/etc/kubernetes/kubelet.conf
kubectl config use-context default \
  --kubeconfig=/etc/kubernetes/kubelet.conf
  • Starten Sie den Kubelet-Dienst:
sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl start kubelet

Aufgabe 4: Kube Proxy konfigurieren und starten

In dieser Aufgabe konfigurieren und starten Sie kube-proxy.

  • Erstellen Sie die Kube Proxy-Konfigurationsdatei /etc/kubernetes/kube-proxy.conf:
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --server=https://<CONTROL_PLANE_IP>:6443 \
  --kubeconfig=/etc/kubernetes/kube-proxy.conf
kubectl config set-credentials kube-proxy \
  --client-certificate=/etc/kubernetes/pki/kube-proxy.crt \
  --client-key=/etc/kubernetes/pki/kube-proxy.key \
  --kubeconfig=/etc/kubernetes/kube-proxy.conf
kubectl config set-context default --cluster=kubernetes \
  --user=kube-proxy --kubeconfig=/etc/kubernetes/kube-proxy.conf
kubectl config use-context default \
  --kubeconfig=/etc/kubernetes/kube-proxy.conf
  • Erstellen Sie eine Datei kube-proxy-daemonset.yaml:
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-proxy
  namespace: kube-system
  labels:
    k8s-app: kube-proxy
spec:
  selector:
    matchLabels:
      k8s-app: kube-proxy
  template:
    metadata:
      labels:
        k8s-app: kube-proxy
    spec:
      hostNetwork: true
      containers:
        - name: kube-proxy
          image: k8s.gcr.io/kube-proxy:v1.24.0
          command:
            - /usr/local/bin/kube-proxy
            - --config=/var/lib/kube-proxy/config.conf
          volumeMounts:
            - name: kube-proxy-config
              mountPath: /var/lib/kube-proxy
      volumes:
        - name: kube-proxy-config
          hostPath:
            path: /etc/kubernetes/kube-proxy
  • Wenden Sie die Konfiguration an:
kubectl apply -f kube-proxy-daemonset.yaml

Aufgabe 5: Worker Nodes mit der Control Plane verbinden

  • Überprüfen Sie, ob die Worker Nodes erfolgreich mit der Control Plane verbunden sind:
kubectl get nodes

Die Worker Nodes sollten als Ready angezeigt werden.


Aufgabe 6: Überprüfung

  • Überprüfen Sie, ob die Pods für kube-proxy auf den Worker Nodes laufen:
kubectl get pods -n kube-system -o wide | grep kube-proxy
  • Überprüfen Sie, ob die Worker Nodes im Cluster korrekt funktionieren:

```bash kubectl get nodes -o wide