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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for client-library-for-chaos-mesh-1.2.14.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5546c35e661dfc1e8fde46d023f7ed261225c0c5dc14831e625f05929eea4914 |
|
MD5 | 01db1b9ffdf627e7af2a87e8ded01527 |
|
BLAKE2b-256 | 048539ac986c628cb83e4643c05ccc32b918aa66d931ce6eb6d182838597a277 |
Hashes for client_library_for_chaos_mesh-1.2.14-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 11698b68eb6ab6dfb970266279e4f01bc2f16facd09765882a3ef205edd20a63 |
|
MD5 | 02416d8947170275495450ec60152b51 |
|
BLAKE2b-256 | 436d3a55003686054b177770dda4c13d7f3da7f48de81236cd5e01db7e3ca037 |