Simuler des défaillances de Pod
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 utiliser Chaos Mesh pour injecter des défaillances dans des Pods Kubernetes afin de simuler des pannes de Pod ou de conteneur. Chaos Dashboard et des fichiers YAML sont fournis pour créer des expériences PodChaos.
Introduction à PodChaos
PodChaos est un type de défaillance dans Chaos Mesh. En créant une expérience PodChaos, vous pouvez simuler des scénarios de panne pour des Pods ou conteneurs spécifiés. Actuellement, PodChaos prend en charge les types de défaillance suivants :
-
Pod Failure : injecte une défaillance dans un Pod spécifié pour le rendre indisponible pendant une période donnée.
-
Pod Kill : supprime un Pod spécifié. Pour garantir le redémarrage du Pod, vous devez configurer ReplicaSet ou un mécanisme similaire.
-
Container Kill : supprime le conteneur spécifié dans le Pod cible.
Restrictions d'utilisation
Chaos Mesh peut injecter PodChaos dans n'importe quel Pod, qu'il soit lié à un Deployment, StatefulSet, DaemonSet ou d'autres contrôleurs. Cependant, lors de l'injection de PodChaos dans un Pod indépendant, des situations particulières peuvent survenir. Par exemple, lorsque vous injectez le chaos "pod-kill" dans un Pod indépendant, Chaos Mesh ne peut garantir la récupération de l'application après l'échec.
Notes importantes
Avant de créer des expériences PodChaos, assurez-vous que :
-
Aucun Control Manager de Chaos Mesh ne s'exécute sur le Pod cible.
-
Pour le type de défaillance Pod Kill, un replicaSet ou mécanisme similaire est configuré pour garantir le redémarrage automatique du Pod.
Créer des expériences via Chaos Dashboard
Avant de créer des expériences via Chaos Dashboard, assurez-vous que :
- Chaos Dashboard est installé.
- Si Chaos Dashboard est déjà installé, exécutez
kubectl port-forwardpour y accéder :bash kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333. Vous pouvez ensuite accéder à Chaos Dashboard viahttp://localhost:2333.
-
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 POD FAULT puis choisissez un comportement spécifique, comme POD FAILURE.
-
Renseignez les informations de l'expérience, puis spécifiez sa portée et sa durée planifiée.
-
Soumettez les informations de l'expérience.
Créer des expériences via des fichiers de configuration YAML
Exemple pod-failure
-
Écrivez la configuration de l'expérience dans le fichier
pod-failure.yaml:apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-failure-example
namespace: chaos-mesh
spec:
action: pod-failure
mode: one
duration: '30s'
selector:
labelSelectors:
'app.kubernetes.io/component': 'tikv'Dans cet exemple, Chaos Mesh injecte
pod-failuredans le Pod spécifié et le rend indisponible pendant 30 secondes. -
Après avoir préparé le fichier de configuration, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./pod-failure.yaml
Exemple pod-kill
-
Écrivez la configuration de l'expérience dans le fichier
pod-kill.yaml:apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-kill-example
namespace: chaos-mesh
spec:
action: pod-kill
mode: one
selector:
namespaces:
- tidb-cluster-demo
labelSelectors:
'app.kubernetes.io/component': 'tikv'Dans cet exemple, Chaos Mesh injecte
pod-killdans le Pod spécifié et le tue une fois. -
Une fois le fichier de configuration préparé, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./pod-kill.yaml
Exemple container-kill
-
Écrivez la configuration de l'expérience dans le fichier
container-kill.yaml:apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: container-kill-example
namespace: chaos-mesh
spec:
action: container-kill
mode: one
containerNames: ['prometheus']
selector:
labelSelectors:
'app.kubernetes.io/component': 'monitor'Dans cet exemple, Chaos Mesh injecte
container-killdans le conteneur spécifié et le tue une fois. -
Une fois le fichier de configuration préparé, utilisez
kubectlpour créer l'expérience :kubectl apply -f ./container-kill.yaml
Description des champs
Le tableau suivant décrit les champs du fichier de configuration YAML.
| Parameter | Type | Description | Default value | Required | Example |
|---|---|---|---|---|---|
| action | string | Specifies the fault type to inject. The supported types include pod-failure, pod-kill, and container-kill. | None | Yes | pod-kill |
| mode | string | Specifies the mode of the experiment. The mode options include one (selecting a random Pod), all (selecting all eligible Pods), fixed (selecting a specified number of eligible Pods), fixed-percent (selecting a specified percentage of Pods from the eligible Pods), and random-max-percent (selecting the maximum percentage of Pods from the eligible Pods). | None | Yes | one |
| 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. | None | No | 1 |
| selector | struct | Specifies the target Pod. For details, refer to Define the experiment scope. | None | Yes | |
| containerNames | []string | When you configure action to container-kill, this configuration is mandatory to specify the target container name for injecting faults. | None | No | ['prometheus'] |
| gracePeriod | int64 | When you configure action to pod-kill, this configuration is mandatory to specify the duration before deleting Pod. | 0 | No | 0 |
| duration | string | Specifies the duration of the experiment. | None | Yes | 30s |
Remarques concernant l'expérience de chaos "Pod Failure"
En bref : Voici plusieurs recommandations pour utiliser l'expérience de chaos "Pod Failure" :
-
Utilisez une "pause image" disponible si vous opérez sur un cluster Kubernetes en air-gap.
-
Configurez
livenessProbeetreadinessProbepour les conteneurs.
L'expérience de chaos Pod Failure remplace l'image de chaque conteneur du Pod cible par une "pause image", une image spéciale qui n'effectue aucune opération. Nous utilisons gcr.io/google-containers/pause:latest comme image par défaut, mais vous pouvez la remplacer par n'importe quelle autre image dans les valeurs Helm controllerManager.podChaos.podFailure.pauseImage.
Le téléchargement de la pause image prend du temps, et cette durée est incluse dans la durée totale de l'expérience. Vous pourriez donc constater que la "durée effective réelle" est inférieure à la durée configurée. C'est une autre raison de recommander d'utiliser une "pause image" disponible localement.
Un autre point ambigu est que la "pause image" peut fonctionner "correctement" avec un command non configuré dans le conteneur. Si le conteneur n'a pas de command, livenessProbe ou readinessProbe configurés, il sera inspecté comme Running et Ready, même après avoir été remplacé par la "pause image", alors qu'en réalité il ne fournit aucune fonctionnalité. Il est donc recommandé de configurer livenessProbe et readinessProbe pour tous les conteneurs.