Aller au contenu principal
Version : Suivant

Simuler des défaillances de Pod

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

note

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-forward pour y accéder : bash kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333. Vous pouvez ensuite accéder à Chaos Dashboard via http://localhost:2333.
  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 POD FAULT puis choisissez un comportement spécifique, comme POD FAILURE.

  3. Renseignez les informations de l'expérience, puis spécifiez sa portée et sa durée planifiée.

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

Créer des expériences via des fichiers de configuration YAML

Exemple pod-failure

  1. É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-failure dans le Pod spécifié et le rend indisponible pendant 30 secondes.

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

    kubectl apply -f ./pod-failure.yaml

Exemple pod-kill

  1. É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-kill dans le Pod spécifié et le tue une fois.

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

    kubectl apply -f ./pod-kill.yaml

Exemple container-kill

  1. É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-kill dans le conteneur spécifié et le tue une fois.

  2. Une fois le fichier de configuration préparé, utilisez kubectl pour 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.

ParameterTypeDescriptionDefault valueRequiredExample
actionstringSpecifies the fault type to inject. The supported types include pod-failure, pod-kill, and container-kill.NoneYespod-kill
modestringSpecifies 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).NoneYesone
valuestringProvides parameters for the mode configuration, depending on mode.For example, when mode is set to fixed-percent, value specifies the percentage of Pods.NoneNo1
selectorstructSpecifies the target Pod. For details, refer to Define the experiment scope.NoneYes
containerNames[]stringWhen you configure action to container-kill, this configuration is mandatory to specify the target container name for injecting faults.NoneNo['prometheus']
gracePeriodint64When you configure action to pod-kill, this configuration is mandatory to specify the duration before deleting Pod.0No0
durationstringSpecifies the duration of the experiment.NoneYes30s

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 livenessProbe et readinessProbe pour 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.