Zum Hauptinhalt springen
Version: Nächste

Simulation von Pod-Fehlern

Inoffizielle Beta-Übersetzung

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

Hinweis

Stellen Sie vor der Experimenterstellung mit Chaos Dashboard Folgendes sicher:

  • Chaos Dashboard ist installiert.
  • Falls bereits installiert, können Sie mit kubectl port-forward auf das Dashboard zugreifen: bash kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333. Anschließend erreichen Sie Chaos Dashboard unter http://localhost:2333.
  1. Öffnen Sie Chaos Dashboard und klicken Sie auf NEUES EXPERIMENT, um ein neues Experiment anzulegen.

    Neues Experiment erstellen
    Neues Experiment erstellen

  2. Wählen Sie im Bereich Ziel auswählen die Option POD-FEHLER und selektieren Sie ein konkretes Verhalten, z.B. POD FAILURE.

  3. Füllen Sie die Experimentinformationen aus und geben Sie den Experimentumfang sowie die geplante Dauer an.

  4. Übermitteln Sie die Experimentinformationen.

Experimente mit YAML-Konfigurationsdateien erstellen

Pod-Failure-Beispiel

  1. 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-failure in den angegebenen Pod und macht ihn für 30 Sekunden unverfügbar.

  2. Nach Vorbereitung der Konfigurationsdatei erstellen Sie das Experiment mit kubectl:

    kubectl apply -f ./pod-failure.yaml

Pod-Kill-Beispiel

  1. 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-kill in den angegebenen Pod und beendet den Pod einmalig.

  2. Nachdem die Konfigurationsdatei vorbereitet ist, erstellen Sie das Experiment mit kubectl:

    kubectl apply -f ./pod-kill.yaml

container-kill Beispiel

  1. 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-kill in den angegebenen Container und beendet den Container einmalig.

  2. 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.

ParameterTypeDescriptionDefault valueRequiredExample
actionstringSpecifies the fault type to inject. The supported types include pod-failure, pod-kill, and container-kill.NoneYespod-kill
modestringSpecifies 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).NoneYesone
valuestringProvides parameters for the mode configuration, depending on mode.For example, when mode is set to fixed-percent, value specifies the percentage of Pods.NoneNo1
selectorstructSpecifies the target Pod. For details, refer to Define the experiment scope.NoneYes
containerNames[]stringWhen you configure action to container-kill, this configuration is mandatory to specify the target container name for injecting faults.NoneNo['prometheus']
gracePeriodint64When you configure action to pod-kill, this configuration is mandatory to specify the duration before deleting Pod.0No0
durationstringSpecifies the duration of the experiment.NoneYes30s

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 livenessProbe und readinessProbe fü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.