Simulieren von Datei-E/A-Fehlern
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
-
Stellen Sie vor dem Erstellen eines IOChaos-Experiments sicher, dass auf dem Ziel-Pod kein Control Manager von Chaos Mesh läuft.
-
IOChaos kann Ihre Daten beschädigen. Verwenden Sie IOChaos mit Vorsicht in Produktionsumgebungen.
Experimente mit Chaos Dashboard erstellen
-
Öffnen Sie Chaos Dashboard und klicken Sie auf NEW EXPERIMENT, um ein neues Experiment zu erstellen:

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

ioChaos-Experimente -
Geben Sie die Experimentinformationen ein und legen Sie den Experimentumfang sowie die geplante Laufzeit fest.

Experiment Information -
Übermitteln Sie die Experimentinformationen.
Experimente mit YAML-Dateien erstellen
Latenz-Beispiel
-
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/etcdund verursacht eine Latenz von 100 Millisekunden für alle Dateisystemoperationen (einschließlich Lesen, Schreiben, Inhaltsauflistung usw.) in diesem Verzeichnis. -
Nach Vorbereitung der Konfigurationsdatei erstellen Sie das Experiment mit
kubectl:kubectl apply -f ./io-latency.yaml
Fehler-Beispiel
-
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. -
Nach Vorbereitung der Konfigurationsdatei erstellen Sie das Experiment mit
kubectl:kubectl apply -f ./io-fault.yaml
attrOverride-Beispiel
-
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. -
Nachdem die Konfigurationsdatei erstellt wurde, verwenden Sie
kubectlzum Anlegen des Experiments:kubectl apply -f ./io-attr.yaml
Beispiel für Mistake-Fehler
-
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. -
Nachdem die Konfigurationsdatei erstellt wurde, verwenden Sie
kubectlzum Anlegen des Experiments:kubectl apply -f ./io-mistake.yaml
Feldbeschreibung
Allgemeine Felder
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| action | string | Indicates the specific type of faults. Only latency, fault, attrOverride, and mistake are supported. | Yes | latency | |
| mode | string | Specifies 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). | None | Yes | one |
| selector | struct | Specifies the target Pod. For details, refer to Define the experiment scope. | None | Yes | |
| 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. | No | 1 | |
| volumePath | string | The mount point of volume in the target container. Must be the root directory of the mount. | Yes | /var/run/etcd | |
| path | string | The valid range of fault injections, either a wildcard or a single file. | Valid for all files by default | No | /var/run/etcd/*/ |
| methods | []string | Type of the file system call that requires injecting fault. For more information about supported types, refer to [Appendix A](#appendix-a: methods-type). | All Types | No | READ |
| percent | int | Probability of failure per operation, in %. | 100 | No | 100 |
| containerNames | []string | Specifies the name of the container into which the fault is injected. | No | ||
| duration | string | Specifies the duration of the experiment. | Yes | 30s |
Aktionsbezogene Felder
Folgend finden Sie spezifische Informationen zu feldern für die jeweiligen Aktionen:
-
Latenz (latency)
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel delay string Spezifische Verzögerungszeit Ja 100 ms -
Fehler (fault)
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel errno int Zurückgegebener Fehlercode Ja 22 Häufige Fehlercodes finden Sie in Anhang B.
-
attrOverride
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel attr AttrOverrideSpec Spezifische Regeln für das Überschreiben von Eigenschaften Ja Wie folgt AttrOverrideSpec ist wie folgt definiert:
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel ino int Inode-Nummer Nein size int Dateigröße Nein blocks int Anzahl der Blöcke, die die Datei belegt Nein atime TimeSpec Letzter Zugriffszeitpunkt Nein mtime TimeSpec Letzter Änderungszeitpunkt Nein ctime TimeSpec Letzter Statusänderungszeitpunkt Nein kind string Dateityp, siehe fuser::FileType Nein perm int Dateiberechtigungen in Dezimaldarstellung Nein 72 (110 in Oktal) nlink int Anzahl der Hardlinks Nein uidint Benutzer-ID des Besitzers Nein gid int Gruppen-ID des Besitzers Nein rdev int Geräte-ID Nein TimeSpec ist wie folgt definiert:
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel sec int Zeitstempel in Sekunden Nein nsec int Zeitstempel in Nanosekunden Nein Die genaue Bedeutung der Parameter können Sie in man stat nachlesen.
-
mistake
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel mistake MistakeSpec Spezifische Fehlerregeln Ja MistakeSpec ist wie folgt definiert:
Parameter Typ Beschreibung Standardwert Erforderlich Beispiel filling string Die einzufügenden fehlerhaften Daten. Nur "zero" (mit Nullen füllen) oder "random" (mit Zufallsbytes füllen) werden unterstützt. Ja maxOccurrences int Maximale Anzahl von Fehlern pro Operation. Ja 1 maxLength int Maximale Länge jedes Fehlers (in Bytes). Ja 1
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.