Aller au contenu principal
Version : 2.6.7

Simuler des défauts d'E/S de fichiers

Traduction Bêta Non Officielle

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

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

  2. IOChaos peut endommager vos données. Utilisez IOChaos avec prudence en environnement de production.

Créer des expériences avec Chaos Dashboard

  1. Ouvrez Chaos Dashboard, puis cliquez sur NEW EXPERIMENT pour créer une nouvelle expérience :

    Créer une nouvelle expérience
    Créer une nouvelle expérience

  2. 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
    Expériences IOChaos

  3. 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
    Informations de l'expérience

  4. Soumettez les informations de l'expérience.

Créer des expériences via des fichiers YAML

Exemple de latence

  1. Écrivez la configuration expérimentale dans le fichier io-latency.yaml comme 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.

  2. Une fois le fichier de configuration prêt, utilisez kubectl pour créer l'expérience :

    kubectl apply -f ./io-latency.yaml

Exemple d'erreur

  1. Écrivez la configuration expérimentale dans le fichier io-fault.yaml comme 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).

  2. Une fois le fichier de configuration prêt, utilisez kubectl pour créer l'expérience :

    kubectl apply -f ./io-fault.yaml

Exemple attrOverride

  1. É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 attrOverride dans 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.

  2. Après avoir préparé le fichier de configuration, utilisez kubectl pour créer l'expérience :

    kubectl apply -f ./io-attr.yaml

Exemple de faute Mistake

  1. É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.

  2. Après avoir préparé le fichier de configuration, utilisez kubectl pour créer l'expérience :

    kubectl apply -f ./io-mistake.yaml

Description des champs

Champs généraux

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

Champs liés à l'action

Voici les informations spécifiques concernant les champs correspondant à chaque action :

  • latency

    ParamètreTypeDescriptionValeur par défautRequisExemple
    delaystringDélai spécifiqueOui100 ms
  • fault

    ParamètreTypeDescriptionValeur par défautRequisExemple
    errnointCode d'erreur retournéOui22

    Pour les codes d'erreur courants, consultez l'annexe B.

  • attrOverride

    ParamètreTypeDescriptionValeur par défautRequisExemple
    attrAttrOverrideSpecRègles spécifiques de substitution de propriétésOuiComme ci-dessous

    AttrOverrideSpec est défini comme suit :

    ParamètreTypeDescriptionValeur par défautRequisExemple
    inointNuméro inoNon
    sizeintTaille du fichierNon
    blocksintNombre de blocs utilisés par le fichierNon
    atimeTimeSpecDernier accèsNon
    mtimeTimeSpecDernière modificationNon
    ctimeTimeSpecDernier changement d'étatNon
    kindstringType de fichier, voir fuser::FileTypeNon
    permintPermissions en décimalNon72 (110 en octal)
    nlinkintNombre de liens physiquesNon
    uidintID propriétaireNon
    gidintID groupe propriétaireNon
    rdevintID périphériqueNon

    TimeSpec est défini comme suit :

    ParamètreTypeDescriptionValeur par défautRequisExemple
    secintHorodatage en secondesNon
    nsecintHorodatage en nanosecondesNon

    Pour la signification détaillée des paramètres, référez-vous à man stat.

  • mistake

    ParamètreTypeDescriptionValeur par défautRequisExemple
    mistakeMistakeSpecRègles d'erreur spécifiquesOui

    MistakeSpec est défini comme suit :

    ParamètreTypeDescriptionValeur par défautRequisExemple
    fillingstringDonnées erronées à insérer. Seuls zero (remplissage par 0) ou random (octets aléatoires) sont pris en charge.Oui
    maxOccurrencesintNombre maximal d'erreurs par opération.Oui1
    maxLengthintLongueur maximale de chaque erreur (en octets).Oui1

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