Simuler des défauts d'E/S de fichiers
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Ce document explique comment créer des expériences IOChaos dans Chaos Mesh.
Présentation d'IOChaos
IOChaos est un type de défaut dans Chaos Mesh. En créant une expérience IOChaos, vous pouvez simuler un scénario de défaillance du système de fichiers. Actuellement, IOChaos prend en charge les types de défauts suivants :
-
latency: retarde les appels système de fichiers -
fault: renvoie une erreur pour les appels système de fichiers -
attrOverride: modifie les propriétés des fichiers -
mistake: fait lire ou écrire une valeur incorrecte dans le fichier
Pour les fonctionnalités spécifiques, reportez-vous à Créer des expériences avec des fichiers YAML.
Notes importantes
-
Avant de créer une expérience IOChaos, assurez-vous qu'aucun Control Manager de Chaos Mesh ne s'exécute sur le Pod cible.
-
IOChaos peut endommager vos données. Utilisez IOChaos avec prudence en environnement de production.
Créer des expériences avec Chaos Dashboard
-
Ouvrez Chaos Dashboard, puis cliquez sur NEW EXPERIMENT pour créer une nouvelle expérience :

Créer une nouvelle expérience -
Dans la section Choose a Target, sélectionnez FILE SYSTEM INJECTION et choisissez un type de défaut spécifique, par exemple LATENCY.

Expériences IOChaos -
Saisissez les informations de l'expérience, en précisant son périmètre et sa durée planifiée :

Informations de l'expérience -
Soumettez les informations de l'expérience.
Créer des expériences via des fichiers YAML
Exemple de latence
-
Écrivez la configuration expérimentale dans le fichier
io-latency.yamlcomme suit :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'Dans cet exemple, Chaos Mesh injecte un délai dans le répertoire
/var/run/etcd, provoquant une latence de 100 millisecondes sur toutes les opérations du système de fichiers (lecture, écriture, liste des contenus, etc.) dans ce répertoire. -
Une fois le fichier de configuration prêt, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./io-latency.yaml
Exemple d'erreur
-
Écrivez la configuration expérimentale dans le fichier
io-fault.yamlcomme suit :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'Dans cet exemple, Chaos Mesh injecte une erreur dans le répertoire
/var/run/etcd, provoquant un échec avec une probabilité de 50% sur toutes les opérations système dans ce répertoire et renvoyant le code d'erreur 5 (Erreur d'entrée/sortie). -
Une fois le fichier de configuration prêt, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./io-fault.yaml
Exemple attrOverride
-
Écrivez la configuration de l'expérience dans le fichier
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'Dans cet exemple de configuration, Chaos Mesh injecte une faute
attrOverridedans les répertoires/var/run/etcd, avec une probabilité de 10% que toutes les opérations système de fichiers dans ce répertoire modifient les permissions des fichiers cibles en 72 (110 en octal). Cela permettra uniquement au propriétaire et à son groupe d'exécuter les fichiers, sans autoriser d'autres actions. -
Après avoir préparé le fichier de configuration, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./io-attr.yaml
Exemple de faute Mistake
-
Écrivez la configuration de l'expérience dans le fichier
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'Dans cet exemple de configuration, Chaos Mesh injecte des fautes de lecture et d'écriture dans le répertoire
/var/run/etcd, avec une probabilité de 10% d'échec des opérations de lecture et d'écriture dans ce répertoire. Durant ce processus, une position aléatoire d'une longueur maximale de 10 octets sera remplacée par des octets nuls. -
Après avoir préparé le fichier de configuration, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./io-mistake.yaml
Description des champs
Champs généraux
| 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 |
Champs liés à l'action
Voici les informations spécifiques concernant les champs correspondant à chaque action :
-
latency
Paramètre Type Description Valeur par défaut Requis Exemple delay string Délai spécifique Oui 100 ms -
fault
Paramètre Type Description Valeur par défaut Requis Exemple errno int Code d'erreur retourné Oui 22 Pour les codes d'erreur courants, consultez l'annexe B.
-
attrOverride
Paramètre Type Description Valeur par défaut Requis Exemple attr AttrOverrideSpec Règles spécifiques de substitution de propriétés Oui Comme ci-dessous AttrOverrideSpec est défini comme suit :
Paramètre Type Description Valeur par défaut Requis Exemple ino int Numéro ino Non size int Taille du fichier Non blocks int Nombre de blocs utilisés par le fichier Non atime TimeSpec Dernier accès Non mtime TimeSpec Dernière modification Non ctime TimeSpec Dernier changement d'état Non kind string Type de fichier, voir fuser::FileType Non perm int Permissions en décimal Non 72 (110 en octal) nlink int Nombre de liens physiques Non uidint ID propriétaire Non gid int ID groupe propriétaire Non rdev int ID périphérique Non TimeSpec est défini comme suit :
Paramètre Type Description Valeur par défaut Requis Exemple sec int Horodatage en secondes Non nsec int Horodatage en nanosecondes Non Pour la signification détaillée des paramètres, référez-vous à man stat.
-
mistake
Paramètre Type Description Valeur par défaut Requis Exemple mistake MistakeSpec Règles d'erreur spécifiques Oui MistakeSpec est défini comme suit :
Paramètre Type Description Valeur par défaut Requis Exemple filling string Données erronées à insérer. Seuls zero (remplissage par 0) ou random (octets aléatoires) sont pris en charge. Oui maxOccurrences int Nombre maximal d'erreurs par opération. Oui 1 maxLength int Longueur maximale de chaque erreur (en octets). Oui 1
::warning Il est recommandé d'utiliser mistake uniquement pour les appels système READ et WRITE. Son utilisation sur d'autres appels peut entraîner des conséquences imprévues, notamment des corruptions de système de fichiers ou des plantages d'applications. :::
Débogage local
Si vous souhaitez tester l'effet d'un Chaos spécifique, utilisez toda pour une validation locale. Chaos Mesh utilise également toda pour implémenter IOChaos.
Annexe A : types de méthodes
-
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
Pour plus d'informations, consultez fuser::Filesystem.
Annexe B : Codes d'erreur courants
-
1 : Opération non permise
-
2 : Fichier ou répertoire inexistant
-
5 : Erreur d'E/S
-
6 : Périphérique ou adresse inexistant
-
12 : Mémoire insuffisante
-
16 : Périphérique ou ressource occupé
-
17 : Fichier existant
-
20 : N'est pas un répertoire
-
22 : Argument invalide
-
24 : Trop de fichiers ouverts
-
28 : Espace disque insuffisant
Pour plus d'informations, consultez le code source Linux.