Zum Inhalt

Konfiguration

Ziel

In diesem Lab passt du die Konfiguration eines bestehenden Rook-Ceph-Clusters an. Du unterscheidest dabei zwischen Änderungen, die im laufenden Betrieb sicher sind, und Änderungen, die Reconciliation oder Rebalancing auslösen. Danach validierst du den Zustand des Clusters vor und nach der Änderung.

  • die zentralen Rook-Ressourcen eines Clusters untersuchen
  • eine im laufenden Betrieb sichere Konfigurationsänderung durchführen
  • eine Änderung durchführen, die Recovery oder Backfill auslöst
  • den Clusterzustand vor und nach einer Änderung vergleichen

Hilfsmittel

  • Nutze kubectl für Rook-Ressourcen und die Rook-Toolbox für Ceph-Kommandos.
  • Arbeite im Namespace rook-ceph.
  • Beobachte den Cluster während einer Änderung nach Möglichkeit live mit ceph -w oder watch ceph status.
  • Versuche, die Aufgaben mit Hilfe der Folien und des Cheatsheets eigenständig zu lösen.

Aufgabe 1 – Bestehende Konfiguration untersuchen

Bevor du etwas änderst, verschaffst du dir einen Überblick über die aktuelle Konfiguration des Clusters.

1.1: CephCluster-Ressource anzeigen

Lasse dir die CephCluster-Ressource des Clusters als YAML ausgeben.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n rook-ceph get cephcluster -o yaml

Achte dabei besonders auf die Abschnitte spec.resources und spec.placement.

1.2: CephBlockPool-Ressource anzeigen

Lasse dir die vorhandene(n) CephBlockPool-Ressource(n) als YAML ausgeben.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n rook-ceph get cephblockpool -o yaml

Notiere dir den Namen des Pools sowie den aktuellen Wert von spec.replicated.size und spec.failureDomain.

1.3: Zweites Terminal für die Live-Beobachtung öffnen

Öffne ein zweites Terminal in einer Splitview neben deinem Haupt-Terminal und starte dort eine Live-Beobachtung des Ceph-Clusters. So siehst du während der folgenden Aufgaben laufend, was im Cluster passiert, ohne zwischen den Terminals wechseln zu müssen.

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
  • Starte darin die Live-Beobachtung:
ceph -w
  • Lass dieses Terminal für den Rest des Labs geöffnet.

1.4: PVC, Pod und Testdaten anlegen

Lege eine PVC an, die die zuvor identifizierte StorageClass verwendet, binde sie in einen Pod ein und schreibe eine größere Menge an Testdaten darauf. So kannst du später prüfen, ob eine Konfigurationsänderung diese Daten beeinflusst.

kubectl create namespace rook-lab
kubeswitch rook-lab

Erstelle eine Datei pvc.yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rebalance-test
  namespace: rook-lab
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: <STORAGECLASS>
  resources:
    requests:
      storage: 5Gi

kubectl apply -f pvc.yaml

Erstelle eine Datei pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: rebalance-test
  namespace: rook-lab
spec:
  containers:
    - name: test
      image: busybox:1.36
      command:
        - sh
        - -c
        - sleep infinity
      volumeMounts:
        - name: data
          mountPath: /data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: rebalance-test
kubectl apply -f pod.yaml

Schreibe anschließend ein paar hundert MB an Testdaten auf das Volume:

kubectl exec rebalance-test -- \
  dd if=/dev/urandom of=/data/testfile bs=1M count=500

1.5: Aktuellen Ceph-Zustand als Referenz speichern

Öffne die Rook-Toolbox und speichere den aktuellen Cluster-Status, damit du ihn später mit dem Zustand nach deinen Änderungen vergleichen kannst.

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
ceph status
ceph osd pool ls detail

Speicher die Ausgabe in eine Datei.


Aufgabe 2 – Eine im laufenden Betrieb sichere Änderung durchführen

Jetzt passt du eine Einstellung an, die keine Datenmigration auslöst, sondern nur die betroffenen Pods neu ausrollt.

2.1: Zusätzlichen Manager (MGR) aktivieren

Erhöhe in der CephCluster-Ressource die Anzahl der Manager (spec.mgr.count), sodass zusätzlich zum aktiven Manager ein Standby-Manager läuft.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

kubectl -n rook-ceph edit cephcluster rook-ceph
Passe im Editor den Abschnitt an, zum Beispiel:
spec:
  mgr:
    count: 2

2.2: Reconciliation beobachten

Beobachte, wie der Rook-Operator auf die Änderung reagiert. Das kann 1-2 Minuten dauern. Prüfe, ob ein zusätzlicher MGR-Pod gestartet wird.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n rook-ceph get pods -l app=rook-ceph-mgr

Prüfe auch den Cluster-Status in der Rook-Toolbox:

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
ceph status

Aufgabe 3 – Eine Änderung mit Rebalancing durchführen

Jetzt führst du eine Änderung durch, die eine echte Datenbewegung im Cluster auslöst. Da du in Aufgabe 1 bereits Testdaten angelegt hast, kannst du diese Datenbewegung direkt beobachten.

3.1: Replikationsgröße des Pools erhöhen

Erhöhe die Replikationsgröße (spec.replicated.size) des zuvor identifizierten CephBlockPool um 1.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

kubectl -n rook-ceph edit cephblockpool <POOL>
Passe den Wert an, zum Beispiel von 2 auf 3:
spec:
  replicated:
    size: 3

3.2: Recovery und Backfill live beobachten

Beobachte in der Rook-Toolbox, wie Ceph auf die geänderte Replikationsgröße reagiert.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
ceph -w

Du solltest Meldungen zu backfill oder recovery sehen, während Ceph zusätzliche Kopien der Placement Groups erstellt.

Fragen:

  • Welchen HEALTH-Zustand meldet der Cluster, während die neuen Replikate erstellt werden?
  • Welche Placement-Group-Zustände siehst du in ceph status während der Änderung (z. B. backfilling, undersized)?
  • Warum verursacht diese Änderung im Gegensatz zu Aufgabe 2 eine spürbare Cluster-Last?

Aufgabe 4 – Zustand nach der Änderung validieren

Zum Abschluss vergleichst du den Zustand des Clusters mit deiner Referenz aus Aufgabe 1.

4.1: Health und Kapazität prüfen

Prüfe, ob der Cluster nach Abschluss von Recovery und Backfill wieder vollständig HEALTH_OK ist.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
ceph status
ceph df

4.2: Konfiguration erneut auslesen

Lasse dir den Pool erneut anzeigen und vergleiche spec.replicated.size mit dem Wert aus Aufgabe 1.

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n rook-ceph get cephblockpool <POOL> -o yaml

Aufräumen

Der Namespace rook-lab soll erhalten bleiben, damit die Testdaten für das folgende Labs verfügbar sind.