Pod Management 2
Ziel
In diesem Projekt geht es um fortgeschrittene Techniken zur Erstellung von Pods. Sie werden:
- StatefulSets, (Cron-)Jobs und DaemonSets erstellen
- Unterschiedliche Deployment-Strategien anwenden
Hilfsmittel
- Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
- StatefulSets, DaemonSets und Jobs werden auch in der offiziellen Kubernetes-Dokumentation erklärt.
Aufgabe 1: StatefulSet
Aufgabe 1.1: StatefulSets skalieren
Erstellen Sie eine Datei statefulset-scaling.yaml
mit dem folgenden Inhalt:
---
apiVersion: v1
kind: Service
metadata:
name: db-headless
labels:
app: blog
component: db
spec:
ports:
- port: 3306
name: mysql
clusterIP: None
selector:
app: blog
component: db
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: db
labels:
app: blog
component: db
spec:
serviceName: db
replicas: 1
minReadySeconds: 10
selector:
matchLabels:
app: blog
component: db
template:
metadata:
labels:
app: blog
component: db
spec:
containers:
- name: mysql
image: mysql:5
env:
- name: MYSQL_RANDOM_ROOT_PASSWORD
value: "yes"
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: "notthesecret"
ports:
- name: mysql
containerPort: 3306
- Deployen Sie das StatefulSet
- Überprüfen Sie, ob das StatefulSet erfolgreich erstellt wurde
- Lassen Sie sich das StatefulSet und den Pod anzeigen mit
kubectl get all
- Lassen Sie dieses Terminal offen und beobachten Sie es bei den weiteren Schritten
watch kubectl get all
- Skalieren Sie das StatefulSet auf 4 Pods
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl scale statefulset db --replicas=4
- Löschen Sie einen oder mehrere Pods und beobachten Sie, wie Kubernetes die Pods wiederherstellt
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl delete pod db-3
kubectl delete pod db-1
- Skalieren Sie das StatefulSet auf 2 Pods
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl scale statefulset db --replicas=2
Aufgabe 1.2: StatefulSets updaten
- Skalieren Sie das StatefulSet aus der vorherigen Aufgabe wieder auf 4 Pods
indem Sie die
yaml
-Datei bearbeiten und das Update durchführen
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl apply -f statefulset-scaling.yaml
- Ändern Sie das Image des Containers auf
mysql:8.3
und führen Sie ein Update des StatefulSets durch - Beachten Sie dabei, dass das Update der Pods sequentiell erfolgt
Aufgabe 1.3: DNS in StatefulSets
- Starten Sie einen interaktiven Busybox-Pod
- Führen Sie
nslookup
auf den Servicedb-headless
aus
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl run -it --rm busybox --image=busybox --restart=Never -- sh
nslookup db-headless
- Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
Name: db-headless.default.svc.cluster.local
Address: 10.42.129.48
Name: db-headless.default.svc.cluster.local
Address: 10.42.129.219
Name: db-headless.default.svc.cluster.local
Address: 10.42.128.250
Name: db-headless.default.svc.cluster.local
Address: 10.42.129.126
Aufgabe 2: DaemonSets
- DaemonSets sind eine spezielle Art von Controller, die Pods auf jedem Node im Cluster starten
Aufgabe 2.1: Scheduling von DaemonSets
- Ein typisches Anwendungsbeispiel für DaemonSets ist das Starten eines Monitoring-Agents auf jedem Node im Cluster
- Erstellen Sie eine Datei
daemonset.yaml
und fügen Sie das DaemonSet-Manifest hinzu:
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
labels:
app: monitoring
component: node-exporter
exercise: daemonsets
spec:
selector:
matchLabels:
app: monitoring
component: node-exporter
template:
metadata:
labels:
app: monitoring
component: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter
ports:
- containerPort: 9100
- Deployen Sie das DaemonSet
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl apply -f daemonset.yaml
- Überprüfen Sie, ob das DaemonSet erfolgreich erstellt wurde
- Lassen Sie sich das DaemonSet und die Pods anzeigen mit
kubectl get all -o wide
Durch das Flag -o wide
erhalten Sie zusätzliche Informationen zu den Pods, wie
z.B. den Node, auf dem sie laufen. Damit können Sie überprüfen, ob das DaemonSet
auf jedem Node im Cluster Pods erstellt hat.
- Löschen Sie das DaemonSet
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl delete daemonset node-exporter
Cleanup
- Löschen Sie alle erstellten Ressourcen