Créer un workflow Chaos Mesh
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 →
Introduction au workflow Chaos Mesh
Lorsque vous utilisez Chaos Mesh pour simuler des pannes système réelles, une validation continue est souvent nécessaire. Vous pourriez souhaiter créer une série de perturbations sur la plateforme Chaos Mesh plutôt que d'effectuer des injections de chaos individuelles.
Pour répondre à ce besoin, Chaos Mesh propose Chaos Mesh Workflow, un moteur de workflow intégré. Grâce à ce moteur, vous pouvez exécuter différentes expériences de chaos en série ou en parallèle pour simuler des erreurs de niveau production.
Actuellement, Chaos Mesh Workflow prend en charge les fonctionnalités suivantes :
-
Orchestration séquentielle
-
Orchestration parallèle
-
Tâches personnalisées
-
Branche conditionnelle
Scénarios utilisateurs typiques :
-
Utiliser l'orchestration parallèle pour injecter plusieurs perturbations NetworkChaos afin de simuler des environnements web complexes.
-
Utiliser l'orchestration séquentielle pour effectuer des contrôles de santé et la branche conditionnelle pour décider d'exécuter les étapes restantes.
La conception de Chaos Mesh Workflow s'inspire dans une certaine mesure d'Argo Workflows. Si vous connaissez Argo Workflows, vous pourrez également démarrer rapidement avec Chaos Mesh Workflow.
Plus d'exemples de workflows sont disponibles dans le dépôt GitHub Chaos Mesh.
Créer un workflow via Chaos Dashboard
Étape 1 : Ouvrir Chaos Dashboard
Cliquez sur NEW WORKFLOW.

Étape 2 : Configurer les informations de base du workflow

Étape 3 : Configurer les nœuds du workflow
-
Sélectionnez une option sous Choose task type selon vos besoins.
Dans cet exemple, le type "Single" est sélectionné comme type de tâche.
noteChaos Dashboard crée automatiquement un nœud séquentiel nommé "entry" comme point d'entrée du workflow.

Choose Task Type -
Renseignez les informations de l'expérience.
La méthode de configuration est identique à la création d'une expérience de chaos normale. Par exemple, vous pouvez configurer un "PodChaos" de type "POD KILL" nommé
kill-nginx.
Create podkill in Workflow
Étape 4 : Soumettre le workflow
Vous pouvez vérifier la définition du workflow via Preview, puis cliquez sur SUBMIT WORKFLOW pour créer le workflow.

Créer un workflow via un fichier YAML et kubectl
Comme les différents types d'objets Chaos, les workflows existent également dans un cluster Kubernetes sous forme de CRD. Vous pouvez créer un workflow Chaos Mesh avec kubectl create -f <workflow.yaml>. La commande suivante est un exemple de création de workflow. Créez un workflow avec un fichier YAML local :
kubectl create -f <workflow.yaml>
Créez un workflow avec un fichier YAML réseau :
kubectl create -f https://raw.githubusercontent.com/chaos-mesh/chaos-mesh/master/examples/workflow/serial.yaml
Un exemple simple de fichier YAML de workflow est défini ci-dessous. Dans ce workflow, StressChaos, NetworkChaos et PodChaos sont injectés :
apiVersion: chaos-mesh.org/v1alpha1
kind: Workflow
metadata:
name: try-workflow-parallel
spec:
entry: the-entry
templates:
- name: the-entry
templateType: Parallel
deadline: 240s
children:
- workflow-stress-chaos
- workflow-network-chaos
- workflow-pod-chaos-schedule
- name: workflow-network-chaos
templateType: NetworkChaos
deadline: 20s
networkChaos:
direction: to
action: delay
mode: all
selector:
labelSelectors:
'app': 'hello-kubernetes'
delay:
latency: '90ms'
correlation: '25'
jitter: '90ms'
- name: workflow-pod-chaos-schedule
templateType: Schedule
deadline: 40s
schedule:
schedule: '@every 2s'
type: 'PodChaos'
podChaos:
action: pod-kill
mode: one
selector:
labelSelectors:
'app': 'hello-kubernetes'
- name: workflow-stress-chaos
templateType: StressChaos
deadline: 20s
stressChaos:
mode: one
selector:
labelSelectors:
'app': 'hello-kubernetes'
stressors:
cpu:
workers: 1
load: 20
options: ['--cpu 1', '--timeout 600']
Dans le template YAML ci-dessus, les champs templates définissent les étapes de l'expérience. Le champ entry définit le point d'entrée du workflow lors de son exécution.
Chaque élément dans templates représente une étape du workflow. Par exemple :
name: the-entry
templateType: Parallel
deadline: 240s
children:
- workflow-stress-chaos
- workflow-network-chaos
- workflow-pod-chaos
templateType: Parallel signifie que le type de nœud est parallèle. deadline: 240s indique que toutes les expériences parallèles sur ce nœud doivent s'exécuter en 240 secondes ; sinon, les expériences expirent. children désigne les autres noms de templates à exécuter en parallèle.
Par exemple :
name: workflow-pod-chaos
templateType: PodChaos
deadline: 40s
podChaos:
action: pod-kill
mode: one
selector:
labelSelectors:
'app': 'hello-kubernetes'
templateType: PodChaos signifie que le type de nœud correspond à des expériences PodChaos. deadline: 40s indique que l'expérience Chaos actuelle dure 40 secondes. podChaos représente la définition de l'expérience PodChaos.
La création d'un workflow via un fichier YAML et kubectl offre une grande flexibilité. Vous pouvez imbriquer des orchestrations parallèles ou séquentielles pour déclarer des orchestrations complexes, et même combiner l'orchestration avec des branches conditionnelles pour obtenir un effet de boucle.
Description des champs
Description des champs du workflow
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| entry | string | Declares the entry of the workflow. Its value is a name of a template. | None | Yes | |
| templates | []Template | Declares the behavior of each step executable in the workflow. See Template field description for details. | None | Yes |
Description des champs du template
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| name | string | The name of the template, which needs to meet the DNS-1123 requirements. | None | Yes | any-name |
| type | string | Type of template. Value options are Task, Serial, Parallel, Suspend, Schedule, AWSChaos, DNSChaos, GCPChaos, HTTPChaos, IOChaos, JVMChaos, KernelChaos, NetworkChaos, PodChaos, StressChaos, and TimeChaos, StatusCheck. | None | Yes | PodChaos |
| deadline | string | The duration of the template. | None | No | '5m30s' |
| children | []string | Declares the subtasks under this template. You need to configure this field when the type is Serial or Parallel. | None | No | ["any-chaos-1", "another-serial-2", "any-shcedue"] |
| task | Task | Configures the customized task. You need to configure this field when the type is Task. See the Task field description for details. | None | No | |
| conditionalBranches | []ConditionalBranch | Configures the conditional branch which executes after customized task. You need to configure this field when the type is Task. See the Conditional branch field description for details. | None | No | |
| awsChaos | object | Configures AWSChaos. You need to configure this field when the type is AWSChaos. See the Simulate AWS Faults document for details. | None | No | |
| dnsChaos | object | Configures DNSChaos. You need to configure this field when the type is DNSChaos. See the Simulate DNS Faults document for details. | None | No | |
| gcpChaos | object | Configures GCPChaos. You need to configure this field when the type is GCPChaos.See the Simulation GCP Faults document for details. | None | No | |
| httpChaos | object | Configures HTTPChaos. You need to configure this field when the type is HTTPChaos. See the Simulate HTTP Faults document for details. | None | No | |
| ioChaos | object | Configure IOChaos. You need to configure this field when the type is IOChaos. See the Simulate File I/O Faults document for details. | None | No | |
| jvmChaos | object | Configures JVMChaos. You need to configure this field when the type is JVMChaos. See the Simulate JVM Application Faults document for details. | None | No | |
| kernelChaos | object | Configure KernelChaos. You need to configure this field when the type is KernelChaos. See the Simulate Kernel Faults document for details. | None | No | |
| networkChaos | object | Configures NetworkChaos. You need to configure this field when the type is NetworkChaos. See the Simulate Network Faults document for details. | None | No | |
| podChaos | object | Configures PodChaos. You need to configure this field when the type is PodChaos. See the Simulate Pod Faults document for details. | None | No | |
| stressChaos | object | Configures StressChaos. You need to configure this field when the type is StressChaos. See the Simulate Heavy Stress on Kubernetes document for details. | None | No | |
| timeChaos | object | Configures TimeChaos. You need to configure this field when the type is TimeChaos. See the SImulate Time Faults document for details. | None | No | |
| schedule | object | Configures Schedule. You need to configure this field when the type is Schedule. See the Define Scheduling Rules document for details. | None | No | |
| statusCheck | object | Configures StatusCheck. You need to configure this field when the type is StatusCheck. See the StatusCheck in Workflow document for details. | None | No | |
| abortWithStatusCheck | bool | Configures whether abort the Workflow when StatusCheck is failed. You can configure this field when the type is StatusCheck. | false | No | true |
Lorsque vous créez un Chaos avec une durée dans le workflow, vous devez renseigner la durée dans le champ deadline externe au lieu d'utiliser le champ duration dans Chaos.
Description des champs de tâche
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| container | object | Defines a customized task container. See Container field description for details. | None | No | |
| volumes | array | If you need to mount a volume in a customized task container, you need to declare the volume in this field. For the detailed definition of a volume, see the Kubernetes documentation - corev1.Volume. | None | No |
Description des champs de ConditionalBranch
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| target | string | The name of the template to be executed by the current conditional branch. | None | Yes | another-chaos |
| expression | string | The type is a boolean expression. When a customized task is completed and the expression value is true, the current condition branch is executed. When this value is not set, the conditional branch will be executed directly after the customized task is completed. | None | No | exitCode == 0 |
Actuellement, deux variables de contexte sont fournies dans expression :
-
exitCodereprésente le code de sortie d'une tâche personnalisée. -
stdoutindique la sortie standard d'une tâche personnalisée.
D'autres variables de contexte seront ajoutées dans les prochaines versions.
Reportez-vous à ce document pour écrire des expressions expression.
Description des champs de conteneur
Le tableau suivant liste uniquement les champs couramment utilisés. Pour les définitions des autres champs, consultez la documentation Kubernetes - core1.Container.
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| name | string | Container name | None | Yes | task |
| image | string | Image name | None | Yes | busybox:latest |
| command | []string | Container commands | None | No | ["wget", "-q", "http://httpbin.org/status/201"] |