Skip to main content

A client to create experiments in ChaosMesh

Project description

Client Library for Chaos Mesh

Introduction

Chaos Mesh is an open source cloud-native Chaos Engineering platform that allows you to simulate various faults and orchestrate fault scenarios in your kubernetes cluster. This client is written in Python and provides a single point of entry to create and manage experiments in Chaos Mesh.

Getting Started

To start using Chaos Mesh, please follow the installation steps in the documentation.

To create a Chaos Mesh client, you can use the following code:

from chaosmesh.client import Client, Experiment
from chaosmesh.k8s.selector import Selector

# creating the ChaosMesh client
client = Client(version="v1alpha1")

# target pods selector; by labelSector or by pods in specified namespaces
selector = Selector(labelSelectors={"app": "filebeat"}, pods=None, namespaces=None)

Supported API Version

  • chaos-mesh.org/v1alpha1

Experiment Types

Chaos Mesh supports various types of experiments, including Pod faults, stress tests, JVM faults, and Host faults.

Pod Faults

  • Pod failure
  • Pod kill
  • Container kill

Stress Tests

  • CPU
  • Memory

JVM Faults

  • GC
  • Exception

Host Faults

  • CPU
  • Memory

Host Disk Fault

  • Read payload
  • Write payload
  • Fill

Network Attack

  • Partition
  • Bandwidth

Experiment Examples

Here are some examples of how you can create experiments in Chaos Mesh:

Pod Failure Experiment

# name of the experiment
exp_name = str(uuid.uuid4())

# starting up the pod failure experiment
client.start_experiment(Experiment.POD_FAILURE, namespace="default", name=exp_name, selector=selector)

Pod Kill Experiment

exp_name = str(uuid.uuid4())

# starting up the pod kill experiment
client.start_experiment(Experiment.POD_KILL, namespace="default", name=exp_name, selector=selector)

Container Kill Experiment

exp_name = str(uuid.uuid4())

# starting up the pod kill experiment
client.start_experiment(Experiment.CONTAINER_KILL, namespace="default", name=exp_name, selector=selector, container_names=['main'])

CPU Stress Test Experiment

exp_name = str(uuid.uuid4())

# starting up the pod kill experiment
client.start_experiment(Experiment.POD_STRESS_CPU, namespace="default", name=exp_name, selector=selector, container_names=['main'])

Memory Stress Test Experiment

exp_name = str(uuid.uuid4())

# starting up the pod kill experiment
client.start_experiment(Experiment.POD_STRESS_MEMORY, namespace="default", name=exp_name, selector=selector, container_names=['main'])

GC Experiment

# name of the experiment
exp_name = str(uuid.uuid4())

client.start_experiment(Experiment.GC, namespace="default", name=exp_name, selector=selector, port=8080)

Exception Experiment

exp_name = str(uuid.uuid4())

client.start_experiment(Experiment.RAISE_EXCEPTION, namespace="default",
                        name=exp_name, selector=select

Host CPU stress

exp_name = str(uuid.uuid4())

# starting up the host cpu stress experiment
client.start_experiment(Experiment.HOST_STRESS_CPU, namespace="default", name=exp_name,
                        address=["10.225.66.224", "10.225.67.213", "10.225.66.231", "10.225.66.138", "10.225.66.192", "10.225.67.52", "10.225.67.103"],
                        load=1000)

Host Memory stress

exp_name = str(uuid.uuid4())

# starting up the host memory stress experiment
client.start_experiment(Experiment.HOST_STRESS_MEMORY, namespace="default", name=exp_name,
                        address=["10.225.66.224", "10.225.67.213", "10.225.66.231", "10.225.66.138", "10.225.66.192", "10.225.67.52", "10.225.67.103"],
                        size="30GB")

Host Disk Fault Read payload

exp_name = "disk-fault-read-payload-" + random.randint(0, 1000000).__str__()

# starting up the read payload experiment
client.start_experiment(Experiment.HOST_READ_PAYLOAD, namespace="default", name=exp_name, selector=selector, address=["address"], size="1024K", path="/", payload_process_num=1)

Host Disk Fault Write payload

exp_name = "disk-fault-write-payload-" + random.randint(0, 1000000).__str__()

# starting up the write payload experiment
client.start_experiment(Experiment.HOST_WRITE_PAYLOAD, namespace="default", name=exp_name, selector=selector, address=["address"], size="1024K", path="/",
                        payload_process_num=1)

Host Disk Fill

exp_name = "disk-fault-fill-" + random.randint(0, 1000000).__str__()

# starting up the disk fill experiment
client.start_experiment(Experiment.HOST_DISK_FILL, namespace="default", name=exp_name, selector=selector, address=["address"], size="1024K", path="/", fill_by_fallocate=True)

Network Partition

exp_name = "network-partition-" + random.randint(0, 1000000).__str__()

# starting up the network partition experiment
client.start_experiment(Experiment.NETWORK_PARTITION, namespace="default", name=exp_name, selector=selector, external_targets=["target"], direction="both")

Network Bandwidth

exp_name = "network-bandwidth-" + random.randint(0, 1000000).__str__()

# starting up the network bandwidth experiment
client.start_experiment(Experiment.NETWORK_BANDWIDTH, namespace="default", name=exp_name, selector=selector, rate="1bps", buffer=1, limit=1, direction="to",
                        external_targets=["target"])

Pause an experiment

In order to pause an experiment you can use the following command

# pausing the experiment
client.pause_experiment(Experiment.POD_STRESS_MEMORY, namespace="default", name=exp_name)

Delete the experiment

The experiment can be removed from the k8s cluster using the following command

client.delete_experiment(Experiment.POD_STRESS_MEMORY, namespace="default", name=exp_name)

Schedule experiments

Schedule an experiment using the following command

client.schedule_experiment(Experiment.POD_STRESS_CPU, namespace="default", name=exp_name, cron_schedule="*/2 * * * *", selector=selector, container_names=['main'])

Logging

Initializing the ChaosMesh logger

import logging, sys

logging.getLogger("chaosmesh")
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chaos_mesh-1.2.13.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

chaos_mesh-1.2.13-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file chaos_mesh-1.2.13.tar.gz.

File metadata

  • Download URL: chaos_mesh-1.2.13.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.5

File hashes

Hashes for chaos_mesh-1.2.13.tar.gz
Algorithm Hash digest
SHA256 09a19338b57ed98418193c729bac9c783ced5f646383b15faccfc12fed241958
MD5 e18e3d1e67cbde53feb5e10cb34bb40f
BLAKE2b-256 5b9c2d192bbcd792b7fae762e502ceac19a1f82214aa4bfe356b152e9731f12b

See more details on using hashes here.

File details

Details for the file chaos_mesh-1.2.13-py3-none-any.whl.

File metadata

  • Download URL: chaos_mesh-1.2.13-py3-none-any.whl
  • Upload date:
  • Size: 40.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.5

File hashes

Hashes for chaos_mesh-1.2.13-py3-none-any.whl
Algorithm Hash digest
SHA256 0b768d8d8c425e1f4770a470104ae17055bb5cbd4f2901b3637fd2822be967fe
MD5 c6aa85d9845e415ed2fa9929825cfe66
BLAKE2b-256 f10c82bdd9afcefbd3d6c980938ce62e6fdf98d8b0e566d864ee3e215717c1c8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page