Skip to main content

Upload Python Package

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)

Release files for client-library-for-chaos-mesh 1.2.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for client-library-for-chaos-mesh 1.2.17
File Size Uploaded
client_library_for_chaos_mesh-1.2.17.tar.gz 21.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for client-library-for-chaos-mesh 1.2.17
File Interpreter ABI Platform
client_library_for_chaos_mesh-1.2.17-py3-none-any.whl Python 3 none any Details

Total release size: 61.7 kB

Release files / client_library_for_chaos_mesh-1.2.17.tar.gz

Download URL client_library_for_chaos_mesh-1.2.17.tar.gz
Size 21.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a8b486f7c4f42e6a3dac49b2c7609b3ee0b9ef2a2ee358407928995e4d68f7e8
BLAKE2b-256 checksum
How to use checksums
ed05c36fefefe52fa8eb83bd45542826ba86683449bb1db6639d3399f073b68a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / client_library_for_chaos_mesh-1.2.17-py3-none-any.whl

Download URL client_library_for_chaos_mesh-1.2.17-py3-none-any.whl
Size 40.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
15b8a952c1faa536df8c7eac97ff5142dd08ca7183172ea2ed18661ab15e3674
BLAKE2b-256 checksum
How to use checksums
c2a1dfbeb52f350cebeba1af97fb6de0335f69b3247ee5a3e815bf43420a9b2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.2.17 This release

2 release files

1.2.14

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page