Zum Hauptinhalt springen
Version: 2.6.7

Simulieren von Datei-E/A-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 IOChaos-Experimente in Chaos Mesh erstellen.

Einführung in IOChaos

IOChaos ist eine Fehlerart in Chaos Mesh. Durch das Erstellen eines IOChaos-Experiments können Sie ein Szenario eines Dateisystemfehlers simulieren. Derzeit unterstützt IOChaos folgende Fehlertypen:

  • latency: verzögert Dateisystemaufrufe

  • fault: gibt einen Fehler für Dateisystemaufrufe zurück

  • attrOverride: modifiziert Dateieigenschaften

  • mistake: veranlasst die Datei, einen falschen Wert zu lesen oder zu schreiben

Für detaillierte Funktionen siehe Experimente mit YAML-Dateien erstellen.

Hinweise

  1. Stellen Sie vor dem Erstellen eines IOChaos-Experiments sicher, dass auf dem Ziel-Pod kein Control Manager von Chaos Mesh läuft.

  2. IOChaos kann Ihre Daten beschädigen. Verwenden Sie IOChaos mit Vorsicht in Produktionsumgebungen.

Experimente mit Chaos Dashboard erstellen

  1. Öffnen Sie Chaos Dashboard und klicken Sie auf NEW EXPERIMENT, um ein neues Experiment zu erstellen:

    Neues Experiment erstellen
    Neues Experiment erstellen

  2. Wählen Sie im Bereich Choose a Target die Option FILE SYSTEM INJECTION und einen spezifischen Fehlertyp, z.B. LATENCY:

    ioChaos-Experimente
    ioChaos-Experimente

  3. Geben Sie die Experimentinformationen ein und legen Sie den Experimentumfang sowie die geplante Laufzeit fest.

    Experiment Information
    Experiment Information

  4. Übermitteln Sie die Experimentinformationen.

Experimente mit YAML-Dateien erstellen

Latenz-Beispiel

  1. Schreiben Sie die Experimentkonfiguration in die Datei io-latency.yaml, wie unten gezeigt:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: IOChaos
    metadata:
    name: io-latency-example
    namespace: chaos-mesh
    spec:
    action: latency
    mode: one
    selector:
    labelSelectors:
    app: etcd
    volumePath: /var/run/etcd
    path: '/var/run/etcd/**/*'
    delay: '100ms'
    percent: 50
    duration: '400s'

    In diesem Konfigurationsbeispiel injiziert Chaos Mesh eine Verzögerung in das Verzeichnis /var/run/etcd und verursacht eine Latenz von 100 Millisekunden für alle Dateisystemoperationen (einschließlich Lesen, Schreiben, Inhaltsauflistung usw.) in diesem Verzeichnis.

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

    kubectl apply -f ./io-latency.yaml

Fehler-Beispiel

  1. Schreiben Sie die Experimentkonfiguration in die Datei io-fault.yaml, wie unten gezeigt:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: IOChaos
    metadata:
    name: io-fault-example
    namespace: chaos-mesh
    spec:
    action: fault
    mode: one
    selector:
    labelSelectors:
    app: etcd
    volumePath: /var/run/etcd
    path: /var/run/etcd/**/*
    errno: 5
    percent: 50
    duration: '400s'

    In diesem Beispiel injiziert Chaos Mesh einen Dateifehler in das Verzeichnis /var/run/etcd, was zu einer 50%igen Fehlerwahrscheinlichkeit bei allen Dateisystemoperationen in diesem Verzeichnis führt und den Fehlercode 5 (Input/output error) zurückgibt.

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

    kubectl apply -f ./io-fault.yaml

attrOverride-Beispiel

  1. Schreiben Sie die Experimentkonfiguration in die Datei io-attr.yaml:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: IOChaos
    metadata:
    name: io-attr-example
    namespace: chaos-mesh
    spec:
    action: attrOverride
    mode: one
    selector:
    labelSelectors:
    app: etcd
    volumePath: /var/run/etcd
    path: /var/run/etcd/**/*
    attr:
    perm: 72
    percent: 10
    duration: '400s'

    In diesem Konfigurationsbeispiel injiziert Chaos Mesh einen attrOverride-Fehler in die Verzeichnisse /var/run/etcd. Dabei wird mit einer Wahrscheinlichkeit von 10 % die Dateiberechtigung bei Dateisystemoperationen in diesem Verzeichnis auf 72 (oktal 110) geändert. Dies erlaubt nur dem Besitzer und seiner Gruppe die Ausführung der Dateien, andere Aktionen sind nicht autorisiert.

  2. Nachdem die Konfigurationsdatei erstellt wurde, verwenden Sie kubectl zum Anlegen des Experiments:

    kubectl apply -f ./io-attr.yaml

Beispiel für Mistake-Fehler

  1. Schreiben Sie die Experimentkonfiguration in die Datei io-mistake.yaml:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: IOChaos
    metadata:
    name: io-mistake-example
    namespace: chaos-mesh
    spec:
    action: mistake
    mode: one
    selector:
    labelSelectors:
    app: etcd
    volumePath: /var/run/etcd
    path: /var/run/etcd/**/*
    mistake:
    filling: zero
    maxOccurrences: 1
    maxLength: 10
    methods:
    - READ
    - WRITE
    percent: 10
    duration: '400s'

    In diesem Konfigurationsbeispiel injiziert Chaos Mesh Lese- und Schreibfehler in das Verzeichnis /var/run/etcd. Dabei tritt bei 10 % der Lese- und Schreiboperationen in diesem Verzeichnis ein Fehler auf. Während dieses Vorgangs wird eine zufällige Position mit maximal 10 Bytes Länge durch Null-Bytes ersetzt.

  2. Nachdem die Konfigurationsdatei erstellt wurde, verwenden Sie kubectl zum Anlegen des Experiments:

    kubectl apply -f ./io-mistake.yaml

Feldbeschreibung

Allgemeine Felder

ParameterTypeDescriptionDefault valueRequiredExample
actionstringIndicates the specific type of faults. Only latency, fault, attrOverride, and mistake are supported.Yeslatency
modestringSpecifies the mode of the experiment. The mode options include one (selecting a Pod at random), all (selecting all eligible Pods), fixed (selecting a specified number of eligible Pods), fixed-percent (selecting a specified percentage of the eligible Pods), and random-max-percent (selecting the maximum percentage of the eligible Pods).NoneYesone
selectorstructSpecifies the target Pod. For details, refer to Define the experiment scope.NoneYes
valuestringProvides parameters for the mode configuration, depending on mode. For example, when mode is set to fixed-percent, value specifies the percentage of Pods.No1
volumePathstringThe mount point of volume in the target container. Must be the root directory of the mount.Yes/var/run/etcd
pathstringThe valid range of fault injections, either a wildcard or a single file.Valid for all files by defaultNo/var/run/etcd/*/
methods[]stringType of the file system call that requires injecting fault. For more information about supported types, refer to [Appendix A](#appendix-a: methods-type).All TypesNoREAD
percentintProbability of failure per operation, in %.100No100
containerNames[]stringSpecifies the name of the container into which the fault is injected.No
durationstringSpecifies the duration of the experiment.Yes30s

Aktionsbezogene Felder

Folgend finden Sie spezifische Informationen zu feldern für die jeweiligen Aktionen:

  • Latenz (latency)

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    delaystringSpezifische VerzögerungszeitJa100 ms
  • Fehler (fault)

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    errnointZurückgegebener FehlercodeJa22

    Häufige Fehlercodes finden Sie in Anhang B.

  • attrOverride

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    attrAttrOverrideSpecSpezifische Regeln für das Überschreiben von EigenschaftenJaWie folgt

    AttrOverrideSpec ist wie folgt definiert:

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    inointInode-NummerNein
    sizeintDateigrößeNein
    blocksintAnzahl der Blöcke, die die Datei belegtNein
    atimeTimeSpecLetzter ZugriffszeitpunktNein
    mtimeTimeSpecLetzter ÄnderungszeitpunktNein
    ctimeTimeSpecLetzter StatusänderungszeitpunktNein
    kindstringDateityp, siehe fuser::FileTypeNein
    permintDateiberechtigungen in DezimaldarstellungNein72 (110 in Oktal)
    nlinkintAnzahl der HardlinksNein
    uidintBenutzer-ID des BesitzersNein
    gidintGruppen-ID des BesitzersNein
    rdevintGeräte-IDNein

    TimeSpec ist wie folgt definiert:

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    secintZeitstempel in SekundenNein
    nsecintZeitstempel in NanosekundenNein

    Die genaue Bedeutung der Parameter können Sie in man stat nachlesen.

  • mistake

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    mistakeMistakeSpecSpezifische FehlerregelnJa

    MistakeSpec ist wie folgt definiert:

    ParameterTypBeschreibungStandardwertErforderlichBeispiel
    fillingstringDie einzufügenden fehlerhaften Daten. Nur "zero" (mit Nullen füllen) oder "random" (mit Zufallsbytes füllen) werden unterstützt.Ja
    maxOccurrencesintMaximale Anzahl von Fehlern pro Operation.Ja1
    maxLengthintMaximale Länge jedes Fehlers (in Bytes).Ja1
Es wird empfohlen, "mistake" nur bei READ- und WRITE-Dateisystemaufrufen zu verwenden. Die Verwendung bei anderen Aufrufen kann unerwartete Folgen haben, einschließlich Dateisystembeschädigungen und Programmabstürzen. :::

Lokales Debugging

Falls Sie unsicher über die Wirkung eines bestimmten Chaos-Experiments sind, können Sie toda für lokale Tests verwenden. Chaos Mesh nutzt ebenfalls toda zur Implementierung von IOChaos.

Anhang A: Methodentypen

  • lookup

  • forget

  • getattr

  • setattr

  • readlink

  • mknod

  • mkdir

  • unlink

  • rmdir

  • symlink

  • rename

  • link

  • open

  • read

  • write

  • flush

  • release

  • fsync

  • opendir

  • readdir

  • releasedir

  • fsyncdir

  • statfs

  • setxattr

  • getxattr

  • listxattr

  • removexatr

  • access

  • create

  • getlk

  • setlk

  • bmap

Weitere Informationen finden Sie unter fuser::Filesystem.

Anhang B: Häufige Fehlernummern

  • 1: Operation nicht erlaubt

  • 2: Datei oder Verzeichnis nicht gefunden

  • 5: E/A-Fehler

  • 6: Gerät oder Adresse nicht gefunden

  • 12: Nicht genügend Speicher

  • 16: Gerät oder Ressource belegt

  • 17: Datei existiert bereits

  • 20: Kein Verzeichnis

  • 22: Ungültiges Argument

  • 24: Zu viele geöffnete Dateien

  • 28: Kein Speicherplatz mehr auf dem Gerät

Weitere Informationen finden Sie im Linux-Quellcode.