Simulation von Pod-Fehlern
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Dieses Dokument beschreibt, wie Sie mit Chaos Mesh Fehler in Kubernetes-Pods injizieren können, um Pod- oder Container-Fehlfunktionen zu simulieren. Chaos Dashboard und YAML-Dateien werden zur Erstellung von PodChaos-Experimenten bereitgestellt.
Einführung in PodChaos
PodChaos ist eine Fehlerart in Chaos Mesh. Durch Anlegen eines PodChaos-Experiments können Sie Fehlerszenarien für bestimmte Pods oder Container simulieren. Aktuell unterstützt PodChaos folgende Fehlertypen:
-
Pod Failure: Injiziert einen Fehler in einen bestimmten Pod, wodurch dieser für einen Zeitraum nicht verfügbar ist.
-
Pod Kill: Terminiert einen bestimmten Pod. Damit der Pod erfolgreich neu gestartet werden kann, müssen Sie einen ReplicaSet oder ähnliche Mechanismen konfigurieren.
-
Container Kill: Terminiert den angegebenen Container im Ziel-Pod.
Nutzungseinschränkungen
Chaos Mesh kann PodChaos in jeden Pod injizieren, unabhängig davon, ob der Pod an Deployment, StatefulSet, DaemonSet oder andere Controller gebunden ist. Beim Injizieren von PodChaos in einen eigenständigen Pod können jedoch besondere Situationen auftreten. Beispielsweise kann Chaos Mesh bei Injektion von "pod-kill"-Chaos in einen eigenständigen Pod nicht garantieren, dass die Anwendung vom Fehlerzustand wiederhergestellt wird.
Hinweise
Vor dem Anlegen von PodChaos-Experimenten stellen Sie bitte Folgendes sicher:
-
Auf dem Ziel-Pod läuft kein Control Manager von Chaos Mesh.
-
Bei Verwendung des Fehlertyps Pod Kill ist ein ReplicaSet oder ähnlicher Mechanismus konfiguriert, der den automatischen Neustart des Pods gewährleistet.
Experimente mit Chaos Dashboard erstellen
Stellen Sie vor der Experimenterstellung mit Chaos Dashboard Folgendes sicher:
- Chaos Dashboard ist installiert.
- Falls bereits installiert, können Sie mit
kubectl port-forwardauf das Dashboard zugreifen:bash kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333. Anschließend erreichen Sie Chaos Dashboard unterhttp://localhost:2333.
-
Öffnen Sie Chaos Dashboard und klicken Sie auf NEUES EXPERIMENT, um ein neues Experiment anzulegen.

Neues Experiment erstellen -
Wählen Sie im Bereich Ziel auswählen die Option POD-FEHLER und selektieren Sie ein konkretes Verhalten, z.B. POD FAILURE.
-
Füllen Sie die Experimentinformationen aus und geben Sie den Experimentumfang sowie die geplante Dauer an.
-
Übermitteln Sie die Experimentinformationen.
Experimente mit YAML-Konfigurationsdateien erstellen
Pod-Failure-Beispiel
-
Schreiben Sie die Experimentkonfiguration in die Datei
pod-failure.yaml:apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-failure-example
namespace: chaos-mesh
spec:
action: pod-failure
mode: one
duration: '30s'
selector:
labelSelectors:
'app.kubernetes.io/component': 'tikv'Gemäß diesem Beispiel injiziert Chaos Mesh
pod-failurein den angegebenen Pod und macht ihn für 30 Sekunden unverfügbar. -
Nach Vorbereitung der Konfigurationsdatei erstellen Sie das Experiment mit
kubectl:kubectl apply -f ./pod-failure.yaml
Pod-Kill-Beispiel
-
Schreiben Sie die Experimentkonfiguration in die Datei
pod-kill.yaml:apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-kill-example
namespace: chaos-mesh
spec:
action: pod-kill
mode: one
selector:
namespaces:
- tidb-cluster-demo
labelSelectors:
'app.kubernetes.io/component': 'tikv'Basierend auf diesem Beispiel injiziert Chaos Mesh
pod-killin den angegebenen Pod und beendet den Pod einmalig. -
Nachdem die Konfigurationsdatei vorbereitet ist, erstellen Sie das Experiment mit
kubectl:kubectl apply -f ./pod-kill.yaml
container-kill Beispiel
-
Schreiben Sie die Experimentkonfiguration in die Datei
container-kill.yaml:apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: container-kill-example
namespace: chaos-mesh
spec:
action: container-kill
mode: one
containerNames: ['prometheus']
selector:
labelSelectors:
'app.kubernetes.io/component': 'monitor'Basierend auf diesem Beispiel injiziert Chaos Mesh
container-killin den angegebenen Container und beendet den Container einmalig. -
Nachdem die Konfigurationsdatei vorbereitet ist, erstellen Sie das Experiment mit
kubectl:kubectl apply -f ./container-kill.yaml
Feldbeschreibung
Die folgende Tabelle beschreibt die Felder in der YAML-Konfigurationsdatei.
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| action | string | Specifies the fault type to inject. The supported types include pod-failure, pod-kill, and container-kill. | None | Yes | pod-kill |
| mode | string | Specifies the mode of the experiment. The mode options include one (selecting a random Pod), all (selecting all eligible Pods), fixed (selecting a specified number of eligible Pods), fixed-percent (selecting a specified percentage of Pods from the eligible Pods), and random-max-percent (selecting the maximum percentage of Pods from the eligible Pods). | None | Yes | one |
| value | string | Provides parameters for the mode configuration, depending on mode.For example, when mode is set to fixed-percent, value specifies the percentage of Pods. | None | No | 1 |
| selector | struct | Specifies the target Pod. For details, refer to Define the experiment scope. | None | Yes | |
| containerNames | []string | When you configure action to container-kill, this configuration is mandatory to specify the target container name for injecting faults. | None | No | ['prometheus'] |
| gracePeriod | int64 | When you configure action to pod-kill, this configuration is mandatory to specify the duration before deleting Pod. | 0 | No | 0 |
| duration | string | Specifies the duration of the experiment. | None | Yes | 30s |
Hinweise für "Pod Failure"-Chaos-Experimente
Kurzfassung: Es gibt mehrere Empfehlungen für die Verwendung von "Pod Failure"-Chaos-Experimenten:
-
Wechseln Sie zu einem verfügbaren "Pause-Image", wenn Sie einen abgeschotteten Kubernetes-Cluster betreiben.
-
Richten Sie
livenessProbeundreadinessProbefür Container ein.
Das "Pod Failure"-Chaos-Experiment ändert das image jedes Containers im Ziel-Pod in das "Pause-Image", ein spezielles Image, das keine Operationen ausführt. Standardmäßig verwenden wir gcr.io/google-containers/pause:latest als Pause-Image. Sie können dies über den Helm-Wert controllerManager.podChaos.podFailure.pauseImage ändern.
Der Download von pause image benötigt Zeit, die in der Experimentdauer enthalten ist. Daher kann die tatsächliche Effektivdauer kürzer sein als die konfigurierte Dauer. Dies ist ein weiterer Grund, ein verfügbares Pause-Image zu verwenden.
Ein weiterer wichtiger Punkt: Das Pause-Image funktioniert "ordnungsgemäß" mit Containern ohne konfigurierten command. Wenn der Container ohne command, livenessProbe oder readinessProbe konfiguriert ist, wird der Container als Running und Ready angezeigt, obwohl er auf das Pause-Image umgestellt wurde und nicht normal funktioniert. Daher wird die Einrichtung von livenessProbe und readinessProbe empfohlen.