Migrated all versions. (#3)

Signed-off-by: Vedant Shrotria <vedant.shrotria@mayadata.io>
This commit is contained in:
VEDANT SHROTRIA 2020-12-21 17:03:46 +05:30 committed by GitHub
parent e67110a933
commit cb04a13e48
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
608 changed files with 40404 additions and 28608 deletions

View File

@ -1,80 +0,0 @@
---
id: version-1.0.0-chaoshub
title: Using and contributing to ChaosHub
sidebar_label: ChaosHub
original_id: chaoshub
---
------
**Important links**
Chaos Hub is maintained at https://hub.litmuschaos.io
To contribute new chaos charts visit: https://github.com/litmuschaos/chaos-charts
**Introduction**
Litmus chaos hub is a place where the chaos engineering community members publish their chaos experiments. A set of related chaos experiments are bundled into a `Chaos Chart`. Chaos Charts are classified into the following categories.
- [Generic Chaos](#generic-chaos)
- [Application Chaos](#application-chaos)
- [Platform Chaos](#platform-chaos)
### Generic Chaos
Chaos actions that apply to generic Kubernetes resources are classified into this category. Following chaos experiments are supported under Generic Chaos Chart
| Experiment name | Description | User guide link |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| Container Kill | Kill one container in the application pod | [container-kill](container-kill.md)|
| Pod Delete | Fail the application pod | [pod-delete](pod-delete.md) |
| Pod Network Latency | Experiment to inject network latency to the POD | [pod-network-latency](pod-network-latency.md) |
| Pod Network Loss | Experiment to inject network loss to the POD | [pod-network-loss](pod-network-loss.md) |
| CPU Hog | Exhaust CPU resources on the Kubernetes Node | [cpu-hog](cpu-hog.md) |
| Disk Fill | Fillup Ephemeral Storage of a Resource | [disk-fill](disk-fill.md) |
| Disk Loss | External disk loss from the node | [disk-loss](disk-loss.md)|
| Node Drain| Drain the node where application pod is scheduled | [node-drain](node-drain.md) |
| Pod CPU Hog | Consume CPU resources on the application container | [pod-cpu-hog](pod-cpu-hog.md) |
| Pod Network Corruption | Inject Network Packet Corruption Into Application Pod |[pod-network-corruption](pod-network-corruption.md) |
### Application Chaos
While Chaos Experiments under the Generic category offer the ability to induce chaos into Kubernetes resources, it is difficult to analyze and conclude if the chaos induced found a weakness in a given application. The application specific chaos experiments are built with some checks on *pre-conditions* and some expected outcomes after the chaos injection. The result of the chaos experiment is determined by matching the outcome with the expected outcome.
<div class="danger">
<strong>NOTE:</strong> If the result of the chaos experiment is `pass`, it means that the application is resilient to that chaos.
</div>
#### Benefits of contributing an application chaos experiment
Application developers write negative tests in their CI pipelines to test the resiliency of the applications. These negative can be converted into Litmus Chaos Experiments and contributed to ChaosHub, so that the users of the application can use them in staging/pre-production/production environments to check the resilience. Application environments vary considerably from where they are tested (CI pipelines) to where they are deployed (Production). Hence, running the same chaos tests in the user's environment will help determine the weaknesses of the deployment and fixing such weaknesses leads to increased resilience.
Following Application Chaos experiments are available on ChaosHub
| Application | Description | Chaos Experiments |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| OpenEBS | Container Attached Storage for Kubernetes | [openebs-pool-pod-failure](openebs-pool-pod-failure.md)<br>[openebs-pool-container-failure](openebs-pool-container-failure.md)<br>[openebs-target-pod-failure](openebs-target-pod-failure.md)<br>[openebs-target-container-failure](openebs-target-container-failure.md)<br>[openebs-target-network-delay](openebs-target-network-delay.md)<br>[openebs-target-network-loss](openebs-target-network-loss.md) |
| Kafka | Open-source stream processing software | [kafka-broker-pod-failure](kafka-broker-pod-failure.md)<br>[kafka-broker-disk-failure](kafka-broker-disk-failure.md)<br> |
| CoreDns | CoreDNS is a fast and flexible DNS server that chains plugins | [coredns-pod-delete](coredns-pod-delete.md)|
### Platform Chaos
Chaos experiments that inject chaos into the platform resources of Kubernetes are classified into this category. Management of platform resources vary significantly from each other, Chaos Charts may be maintained separately for each platform (For example, AWS, GCP, Azure, etc)
Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -1,42 +0,0 @@
---
id: version-1.0.0-plugins
title: Using other chaos libraries as plugins
sidebar_label: Plugins
original_id: plugins
---
------
Litmus provides a way to use any chaos library or a tool to inject chaos. The chaos tool to be compatible with Litmus should satisfy the following requirements:
- Should be available as a Docker Image
- Should take configuration through a `config-map`
The `plugins` or `chaos-libraries` host the core logic to inject chaos.
These plugins are hosted at https://github.com/litmuschaos/litmus-ansible/tree/master/chaoslib
Litmus project has integration into the following chaos-libraries.
| Chaos Library | Logo | Experiments covered |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| <a href="https://github.com/litmuschaos/litmus-ansible" target="_blank">Litmus</a> | <img src="https://camo.githubusercontent.com/953211f24c1c246f7017703f67b9779e4589bf76/68747470733a2f2f6c616e6473636170652e636e63662e696f2f6c6f676f732f6c69746d75732e737667" width="50"> | Litmus native chaos libraries that encompasses the chaos capabilities for `pod-kill`, `container-kill`, `cpu-hog` |
| <a href="https://github.com/alexei-led/pumba" target="_blank">Pumba</a> | <img src="https://github.com/alexei-led/pumba/raw/master/docs/img/pumba_logo.png" width="50"> | Pumba provides chaos capabilities for `network-delay` |
| <a href="https://github.com/bloomberg/powerfulseal" target="_blank">PowerfulSeal</a> | <img src="https://github.com/bloomberg/powerfulseal/raw/master/media/powerful-seal.png" width="50"> | PowerfulSeal provides chaos capabilities for `pod-kill` |
| | | |
Usage of plugins is a configuration parameter inside the chaos experiment.
> Add an example snippet here.
<br>
<br>
<hr>
<br>
<br>

View File

@ -1,80 +0,0 @@
---
id: version-1.1.0-chaoshub
title: Using and contributing to ChaosHub
sidebar_label: ChaosHub
original_id: chaoshub
---
------
**Important links**
Chaos Hub is maintained at https://hub.litmuschaos.io
To contribute new chaos charts visit: https://github.com/litmuschaos/chaos-charts
**Introduction**
Litmus chaos hub is a place where the chaos engineering community members publish their chaos experiments. A set of related chaos experiments are bundled into a `Chaos Chart`. Chaos Charts are classified into the following categories.
- [Generic Chaos](#generic-chaos)
- [Application Chaos](#application-chaos)
- [Platform Chaos](#platform-chaos)
### Generic Chaos
Chaos actions that apply to generic Kubernetes resources are classified into this category. Following chaos experiments are supported under Generic Chaos Chart
| Experiment name | Description | User guide link |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| Container Kill | Kill one container in the application pod | [container-kill](container-kill.md)|
| Pod Delete | Fail the application pod | [pod-delete](pod-delete.md) |
| Pod Network Latency | Experiment to inject network latency to the POD | [pod-network-latency](pod-network-latency.md) |
| Pod Network Loss | Experiment to inject network loss to the POD | [pod-network-loss](pod-network-loss.md) |
| Node CPU Hog | Exhaust CPU resources on the Kubernetes Node | [node-cpu-hog](node-cpu-hog.md) |
| Disk Fill | Fillup Ephemeral Storage of a Resource | [disk-fill](disk-fill.md) |
| Disk Loss | External disk loss from the node | [disk-loss](disk-loss.md)|
| Node Drain| Drain the node where application pod is scheduled | [node-drain](node-drain.md) |
| Pod CPU Hog | Consume CPU resources on the application container | [pod-cpu-hog](pod-cpu-hog.md) |
| Pod Network Corruption | Inject Network Packet Corruption Into Application Pod |[pod-network-corruption](pod-network-corruption.md) |
### Application Chaos
While Chaos Experiments under the Generic category offer the ability to induce chaos into Kubernetes resources, it is difficult to analyze and conclude if the chaos induced found a weakness in a given application. The application specific chaos experiments are built with some checks on *pre-conditions* and some expected outcomes after the chaos injection. The result of the chaos experiment is determined by matching the outcome with the expected outcome.
<div class="danger">
<strong>NOTE:</strong> If the result of the chaos experiment is `pass`, it means that the application is resilient to that chaos.
</div>
#### Benefits of contributing an application chaos experiment
Application developers write negative tests in their CI pipelines to test the resiliency of the applications. These negative can be converted into Litmus Chaos Experiments and contributed to ChaosHub, so that the users of the application can use them in staging/pre-production/production environments to check the resilience. Application environments vary considerably from where they are tested (CI pipelines) to where they are deployed (Production). Hence, running the same chaos tests in the user's environment will help determine the weaknesses of the deployment and fixing such weaknesses leads to increased resilience.
Following Application Chaos experiments are available on ChaosHub
| Application | Description | Chaos Experiments |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| OpenEBS | Container Attached Storage for Kubernetes | [openebs-pool-pod-failure](openebs-pool-pod-failure.md)<br>[openebs-pool-container-failure](openebs-pool-container-failure.md)<br>[openebs-target-pod-failure](openebs-target-pod-failure.md)<br>[openebs-target-container-failure](openebs-target-container-failure.md)<br>[openebs-target-network-delay](openebs-target-network-delay.md)<br>[openebs-target-network-loss](openebs-target-network-loss.md) |
| Kafka | Open-source stream processing software | [kafka-broker-pod-failure](kafka-broker-pod-failure.md)<br>[kafka-broker-disk-failure](kafka-broker-disk-failure.md)<br> |
| CoreDns | CoreDNS is a fast and flexible DNS server that chains plugins | [coredns-pod-delete](coredns-pod-delete.md)|
### Platform Chaos
Chaos experiments that inject chaos into the platform resources of Kubernetes are classified into this category. Management of platform resources vary significantly from each other, Chaos Charts may be maintained separately for each platform (For example, AWS, GCP, Azure, etc)
Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -1,131 +0,0 @@
---
id: version-1.2.0-admin-mode
title: Administrator Mode
sidebar_label: Administrator Mode
original_id: admin-mode
---
------
### What is Adminstator Mode?
Admin mode is one of the ways the chaos orchestration is set up in Litmus, wherein all chaos resources (i.e., install time resources like the operator, chaosexperiment CRs, chaosServiceAccount/rbac and runtime resources like chaosengine, chaos-runner, experiment jobs & chaosresults) are setup in a single admin namespace (typically, litmus). In other words, centralized administration of chaos.
This feature is aimed at making the SRE/Cluster Admins life easier by doing away with setting up chaos pre-requisites on a per namespace basis (which may be more relevant in an autonomous/self-service cluster sharing model in dev environments).
This mode typically needs a "wider" & "stronger" ClusterRole, albeit one that is still just a superset of the individual experiment permissions. In this mode, the applications in their respective namespaces are subjected to chaos while the chaos job runs elsewhere, i.e., admin namespace.
### How to use Adminstator Mode?
In order to use Admin Mode, you just have to create a ServiceAccount in the *admin* or so called *chaos* namespace (`litmus` itself can be used), which is tied to a ClusterRole that has the permissions to perform operations on Kubernetes resources involved in the selected experiments across namespaces.
Provide this ServiceAccount in ChaosEngine's .spec.chaosServiceAccount.
### Example
#### Prepare RBAC Manifest
Here is an RBAC definition, which in essence is a superset of individual experiments RBAC that has the permissions to run all chaos experiments across different namespaces.
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-admin-rbac.yaml)
```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: litmus-admin
namespace: litmus
labels:
name: litmus-admin
---
# Source: openebs/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: litmus-admin
labels:
name: litmus-admin
rules:
- apiGroups: ["","apps","batch","extensions","litmuschaos.io","openebs.io","storage.k8s.io"]
resources: ["chaosengines","chaosexperiments","chaosresults","cstorpools","cstorvolumereplicas","configmaps","secrets","pods","pods/exec","pods/log","pods/eviction","jobs","replicasets","deployments","daemonsets","statefulsets","persistentvolumeclaims","persistentvolumes","storageclasses","services","events"]
verbs: ["create","delete","get","list","patch","update"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get","list","patch"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: litmus-admin
labels:
name: litmus-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: litmus-admin
subjects:
- kind: ServiceAccount
name: litmus-admin
namespace: litmus
```
#### Prepare ChaosEngine
```yaml
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: nginx-chaos
namespace: litmus #Chaos Resources Namespace
spec:
appinfo:
appns: 'default' #Application Namespace
applabel: 'app=nginx'
appkind: 'deployment'
# It can be true/false
annotationCheck: 'true'
# It can be active/stop
engineState: 'active'
#ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: ''
chaosServiceAccount: litmus-admin
monitoring: false
# It can be delete/retain
jobCleanUpPolicy: 'delete'
experiments:
- name: pod-delete
spec:
components:
env:
# set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION
value: '30'
# set chaos interval (in sec) as desired
- name: CHAOS_INTERVAL
value: '10'
# pod failures without '--force' & default terminationGracePeriodSeconds
- name: FORCE
value: 'false'
```
### Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
`kubectl apply -f chaosengine.yml`
### Watch Chaos Engine
- Describe Chaos Engine for chaos steps.
`kubectl describe chaosengine nginx-chaos -n litmus`
### Watch Chaos progress
- View pod terminations & recovery by setting up a watch on the pods in the application namespace
`watch -n 1 kubectl get pods -n default`
### Check Chaos Experiment Result
- Check whether the application is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`.
`kubectl describe chaosresult nginx-chaos-pod-delete -n litmus`

View File

@ -1,42 +0,0 @@
---
id: version-1.6.0-plugins
title: Using other chaos libraries as plugins
sidebar_label: Plugins
original_id: plugins
---
------
Litmus provides a way to use any chaos library or a tool to inject chaos. The chaos tool to be compatible with Litmus should satisfy the following requirements:
- Should be available as a Docker Image
- Should take configuration through a `config-map`
The `plugins` or `chaos-libraries` host the core logic to inject chaos.
These plugins are hosted at https://github.com/litmuschaos/litmus-ansible/tree/master/chaoslib
Litmus project has integration into the following chaos-libraries.
| Chaos Library | Logo | Experiments covered |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| <a href="https://github.com/litmuschaos/litmus" target="_blank">Litmus</a> | <img src="https://camo.githubusercontent.com/953211f24c1c246f7017703f67b9779e4589bf76/68747470733a2f2f6c616e6473636170652e636e63662e696f2f6c6f676f732f6c69746d75732e737667" width="50"> | Litmus native chaos libraries that encompasses the chaos capabilities for `pod-kill`, `container-kill`, `cpu-hog` |
| <a href="https://github.com/alexei-led/pumba" target="_blank">Pumba</a> | <img src="https://github.com/alexei-led/pumba/raw/master/docs/img/pumba_logo.png" width="50"> | Pumba provides chaos capabilities for `network-delay` |
| <a href="https://github.com/bloomberg/powerfulseal" target="_blank">PowerfulSeal</a> | <img src="https://github.com/bloomberg/powerfulseal/raw/master/media/powerful-seal.png" width="50"> | PowerfulSeal provides chaos capabilities for `pod-kill` |
| | | |
Usage of plugins is a configuration parameter inside the chaos experiment.
> Add an example snippet here.
<br>
<br>
<hr>
<br>
<br>

View File

@ -1,92 +0,0 @@
---
id: version-1.8.0-chaoshub
title: Using and contributing to ChaosHub
sidebar_label: ChaosHub
original_id: chaoshub
---
------
**Important links**
Chaos Hub is maintained at https://hub.litmuschaos.io
To contribute new chaos charts visit: https://github.com/litmuschaos/chaos-charts
**Introduction**
Litmus chaos hub is a place where the chaos engineering community members publish their chaos experiments. A set of related chaos experiments are bundled into a `Chaos Chart`. Chaos Charts are classified into the following categories.
- [Generic Chaos](#generic-chaos)
- [Application Chaos](#application-chaos)
- [Platform Chaos](#platform-chaos)
### Generic Chaos
Chaos actions that apply to generic Kubernetes resources are classified into this category. Following chaos experiments are supported under Generic Chaos Chart
| Experiment name | Description | User guide link |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| Container Kill | Kills the container in the application pod | [container-kill](container-kill.md)|
| Pod Delete | Deletes the application pod | [pod-delete](pod-delete.md) |
| Pod Network Latency | Injects network latency into the pod | [pod-network-latency](pod-network-latency.md) |
| Pod Network Loss | Injects network loss into the pod | [pod-network-loss](pod-network-loss.md) |
| Node CPU Hog | Exhaust CPU resources on the Kubernetes Node | [node-cpu-hog](node-cpu-hog.md) |
| Node Memory Hog | Exhaust Memory resources on the Kubernetes Node | [node-memory-hog](node-memory-hog.md) |
| Disk Fill | Fillup Ephemeral Storage of a Resource | [disk-fill](disk-fill.md) |
| Disk Loss | External disk loss from the node | [disk-loss](disk-loss.md)|
| Node Drain| Drains the node where application pod is scheduled | [node-drain](node-drain.md) |
| Pod CPU Hog | Consumes CPU resources on the application container | [pod-cpu-hog](pod-cpu-hog.md) |
| Pod Memory Hog | Consumes Memory resources on the application container | [pod-memory-hog](pod-memory-hog.md) |
| Pod Network Corruption | Injects Network Packet Corruption into Application Pod |[pod-network-corruption](pod-network-corruption.md) |
| Kubelet Service Kill | Kills the kubelet service on the application node |[kubelet-service-kill](kubelet-service-kill.md) |
| Docker Service Kill | Kills the docker service on the application node |[docker-service-kill](docker-service-kill.md) |
| Node Taint| Taints the node where application pod is scheduled | [node-taint](node-taint.md) |
| Pod Autoscaler| Scales the application replicas and test the node autoscaling on cluster | [pod-autoscaler](pod-autoscaler.md) |
| Pod Network Duplication | Injects Network Packet Duplication into Application Pod |[pod-network-duplication](pod-network-duplication.md) |
| Pod IO Stress | Injects IO stress resources on the application container | [pod-io-stress](pod-io-stress.md) |
| Node IO stress| Injects IO stress resources on the application node |[node-io-stress](node-io-stress.md) |
### Application Chaos
While Chaos Experiments under the Generic category offer the ability to induce chaos into Kubernetes resources, it is difficult to analyze and conclude if the chaos induced found a weakness in a given application. The application specific chaos experiments are built with some checks on *pre-conditions* and some expected outcomes after the chaos injection. The result of the chaos experiment is determined by matching the outcome with the expected outcome.
<div class="danger">
<strong>NOTE:</strong> If the result of the chaos experiment is `pass`, it means that the application is resilient to that chaos.
</div>
#### Benefits of contributing an application chaos experiment
Application developers write negative tests in their CI pipelines to test the resiliency of the applications. These negative can be converted into Litmus Chaos Experiments and contributed to ChaosHub, so that the users of the application can use them in staging/pre-production/production environments to check the resilience. Application environments vary considerably from where they are tested (CI pipelines) to where they are deployed (Production). Hence, running the same chaos tests in the user's environment will help determine the weaknesses of the deployment and fixing such weaknesses leads to increased resilience.
Following Application Chaos experiments are available on ChaosHub
| Application | Description | Chaos Experiments |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| OpenEBS | Container Attached Storage for Kubernetes | [openebs-pool-pod-failure](openebs-pool-pod-failure.md)<br>[openebs-pool-container-failure](openebs-pool-container-failure.md)<br>[openebs-target-pod-failure](openebs-target-pod-failure.md)<br>[openebs-target-container-failure](openebs-target-container-failure.md)<br>[openebs-target-network-delay](openebs-target-network-delay.md)<br>[openebs-target-network-loss](openebs-target-network-loss.md) <br>[openebs-control-plane-chaos](openebs-control-plane-chaos.md) <br>[openebs-nfs-provisioner-kill](openebs-nfs-provisioner-kill.md) <br>[openebs-target-network-loss](openebs-target-network-loss.md) <br>[openebs-pool-disk-loss](openebs-pool-disk-loss.md) <br>[openebs-pool-network-loss](openebs-pool-network-loss.md) <br>[openebs-pool-network-delay](openebs-pool-network-delay.md)|
| Kafka | Open-source stream processing software | [kafka-broker-pod-failure](kafka-broker-pod-failure.md)<br>[kafka-broker-disk-failure](kafka-broker-disk-failure.md)<br> |
| CoreDns | CoreDNS is a fast and flexible DNS server that chains plugins | [coredns-pod-delete](coredns-pod-delete.md)|
| Cassandra | Cassandra is an opensource distributed database | [cassandra-pod-delete](cassandra-pod-delete.md)|
### Platform Chaos
Chaos experiments that inject chaos into the platform resources of Kubernetes are classified into this category. Management of platform resources vary significantly from each other, Chaos Charts may be maintained separately for each platform (For example, AWS, GCP, Azure, etc)
Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -1,42 +0,0 @@
---
id: version-1.8.0-plugins
title: Using other chaos libraries as plugins
sidebar_label: Plugins
original_id: plugins
---
------
Litmus provides a way to use any chaos library or a tool to inject chaos. The chaos tool to be compatible with Litmus should satisfy the following requirements:
- Should be available as a Docker Image
- Should take configuration through a `config-map`
The `plugins` or `chaos-libraries` host the core logic to inject chaos.
These plugins are hosted at https://github.com/litmuschaos/litmus-ansible/tree/master/chaoslib
Litmus project has integration into the following chaos-libraries.
| Chaos Library | Logo | Experiments covered |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| <a href="https://github.com/litmuschaos/litmus" target="_blank">Litmus</a> | <img src="https://camo.githubusercontent.com/953211f24c1c246f7017703f67b9779e4589bf76/68747470733a2f2f6c616e6473636170652e636e63662e696f2f6c6f676f732f6c69746d75732e737667" width="50"> | Litmus native chaos libraries that encompasses the chaos capabilities for `pod-kill`, `container-kill`, `cpu-hog`, `network-chaos`, `disk-chaos`, `memory-hog`|
| <a href="https://github.com/alexei-led/pumba" target="_blank">Pumba</a> | <img src="https://github.com/alexei-led/pumba/raw/master/docs/img/pumba_logo.png" width="50"> | Pumba provides chaos capabilities for `network-delay` |
| <a href="https://github.com/bloomberg/powerfulseal" target="_blank">PowerfulSeal</a> | <img src="https://github.com/bloomberg/powerfulseal/raw/master/media/powerful-seal.png" width="50"> | PowerfulSeal provides chaos capabilities for `pod-kill` |
| | | |
Usage of plugins is a configuration parameter inside the chaos experiment.
> Add an example snippet here.
<br>
<br>
<hr>
<br>
<br>

View File

@ -1,92 +0,0 @@
---
id: version-1.9.0-chaoshub
title: Using and contributing to ChaosHub
sidebar_label: ChaosHub
original_id: chaoshub
---
------
**Important links**
Chaos Hub is maintained at https://hub.litmuschaos.io
To contribute new ChaosCharts visit: https://github.com/litmuschaos/chaos-charts
**Introduction**
Litmus chaos hub is a place where the Chaos Engineering community members publish their chaos experiments. A set of related chaos experiments are bundled into a `Chaos Chart`. Chaos Charts are classified into the following categories.
- [Generic Chaos](#generic-chaos)
- [Application Chaos](#application-chaos)
- [Platform Chaos](#platform-chaos)
### Generic Chaos
Chaos actions that apply to generic Kubernetes resources are classified into this category. Following chaos experiments are supported under Generic Chaos Chart
| Experiment name | Description | User guide link |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| Container Kill | Kills the container in the application pod | [container-kill](container-kill.md)|
| Pod Delete | Deletes the application pod | [pod-delete](pod-delete.md) |
| Pod Network Latency | Injects network latency into the pod | [pod-network-latency](pod-network-latency.md) |
| Pod Network Loss | Injects network loss into the pod | [pod-network-loss](pod-network-loss.md) |
| Node CPU Hog | Exhaust CPU resources on the Kubernetes Node | [node-cpu-hog](node-cpu-hog.md) |
| Node Memory Hog | Exhaust Memory resources on the Kubernetes Node | [node-memory-hog](node-memory-hog.md) |
| Disk Fill | Fillup Ephemeral Storage of a Resource | [disk-fill](disk-fill.md) |
| Disk Loss | External disk loss from the node | [disk-loss](disk-loss.md)|
| Node Drain| Drains the node where application pod is scheduled | [node-drain](node-drain.md) |
| Pod CPU Hog | Consumes CPU resources on the application container | [pod-cpu-hog](pod-cpu-hog.md) |
| Pod Memory Hog | Consumes Memory resources on the application container | [pod-memory-hog](pod-memory-hog.md) |
| Pod Network Corruption | Injects Network Packet Corruption into Application Pod |[pod-network-corruption](pod-network-corruption.md) |
| Kubelet Service Kill | Kills the kubelet service on the application node |[kubelet-service-kill](kubelet-service-kill.md) |
| Docker Service Kill | Kills the docker service on the application node |[docker-service-kill](docker-service-kill.md) |
| Node Taint| Taints the node where application pod is scheduled | [node-taint](node-taint.md) |
| Pod Autoscaler| Scales the application replicas and test the node autoscaling on cluster | [pod-autoscaler](pod-autoscaler.md) |
| Pod Network Duplication | Injects Network Packet Duplication into Application Pod |[pod-network-duplication](pod-network-duplication.md) |
| Pod IO Stress | Injects IO stress resources on the application container | [pod-io-stress](pod-io-stress.md) |
| Node IO stress| Injects IO stress resources on the application node |[node-io-stress](node-io-stress.md) |
### Application Chaos
While Chaos Experiments under the Generic category offer the ability to induce chaos into Kubernetes resources, it is difficult to analyze and conclude if the chaos induced found a weakness in a given application. The application specific chaos experiments are built with some checks on *pre-conditions* and some expected outcomes after the chaos injection. The result of the chaos experiment is determined by matching the outcome with the expected outcome.
<div class="danger">
<strong>NOTE:</strong> If the result of the chaos experiment is `pass`, it means that the application is resilient to that chaos.
</div>
#### Benefits of contributing an application chaos experiment
Application developers write negative tests in their CI pipelines to test the resiliency of the applications. These negative can be converted into Litmus Chaos Experiments and contributed to ChaosHub, so that the users of the application can use them in staging/pre-production/production environments to check the resilience. Application environments vary considerably from where they are tested (CI pipelines) to where they are deployed (Production). Hence, running the same chaos tests in the user's environment will help determine the weaknesses of the deployment and fixing such weaknesses leads to increased resilience.
Following Application Chaos experiments are available on ChaosHub
| Application | Description | Chaos Experiments |
| ----------- | ----------------------------------------- | --------------------------------------------------------- |
| OpenEBS | Container Attached Storage for Kubernetes | [openebs-pool-pod-failure](openebs-pool-pod-failure.md)<br>[openebs-pool-container-failure](openebs-pool-container-failure.md)<br>[openebs-target-pod-failure](openebs-target-pod-failure.md)<br>[openebs-target-container-failure](openebs-target-container-failure.md)<br>[openebs-target-network-delay](openebs-target-network-delay.md)<br>[openebs-target-network-loss](openebs-target-network-loss.md) <br>[openebs-control-plane-chaos](openebs-control-plane-chaos.md) <br>[openebs-nfs-provisioner-kill](openebs-nfs-provisioner-kill.md) <br>[openebs-target-network-loss](openebs-target-network-loss.md) <br>[openebs-pool-disk-loss](openebs-pool-disk-loss.md) <br>[openebs-pool-network-loss](openebs-pool-network-loss.md) <br>[openebs-pool-network-delay](openebs-pool-network-delay.md)|
| Kafka | Open-source stream processing software | [kafka-broker-pod-failure](kafka-broker-pod-failure.md)<br>[kafka-broker-disk-failure](kafka-broker-disk-failure.md)<br> |
| CoreDns | CoreDNS is a fast and flexible DNS server that chains plugins | [coredns-pod-delete](coredns-pod-delete.md)|
| Cassandra | Cassandra is an opensource distributed database | [cassandra-pod-delete](cassandra-pod-delete.md)|
### Platform Chaos
Chaos experiments that inject chaos into the platform resources of Kubernetes are classified into this category. Management of platform resources vary significantly from each other, Chaos Charts may be maintained separately for each platform (For example, AWS, GCP, Azure, etc)
Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -1,59 +0,0 @@
{
"version-1.0.0-docs": {
"Getting Started": [
"version-1.0.0-getstarted",
"version-1.0.0-chaoshub",
"version-1.0.0-plugins",
"version-1.0.0-architecture",
"version-1.0.0-resources",
"version-1.0.0-community",
"version-1.0.0-devguide"
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.0.0-pod-delete",
"version-1.0.0-container-kill",
"version-1.0.0-pod-network-latency",
"version-1.0.0-pod-network-loss",
"version-1.0.0-pod-network-corruption",
"version-1.0.0-pod-cpu-hog",
"version-1.0.0-disk-fill",
"version-1.0.0-disk-loss",
"version-1.0.0-cpu-hog",
"version-1.0.0-node-drain"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.0.0-openebs-target-container-failure",
"version-1.0.0-openebs-target-network-delay",
"version-1.0.0-openebs-target-network-loss",
"version-1.0.0-openebs-target-pod-failure",
"version-1.0.0-openebs-pool-pod-failure",
"version-1.0.0-openebs-pool-container-failure",
"version-1.0.0-openebs-target-network-delay"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.0.0-kafka-broker-pod-failure",
"version-1.0.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.0.0-coredns-pod-delete"
]
}
]
}
}

View File

@ -1,66 +0,0 @@
{
"version-1.1.0-docs": {
"Getting Started": [
"version-1.1.0-getstarted",
"version-1.1.0-chaoshub",
"version-1.1.0-plugins",
"version-1.1.0-architecture",
"version-1.1.0-resources",
"version-1.1.0-community",
"version-1.1.0-devguide"
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.1.0-pod-delete",
"version-1.1.0-container-kill",
"version-1.1.0-pod-network-latency",
"version-1.1.0-pod-network-loss",
"version-1.1.0-pod-network-corruption",
"version-1.1.0-pod-cpu-hog",
"version-1.1.0-disk-fill",
"version-1.1.0-disk-loss",
"version-1.1.0-node-cpu-hog",
"version-1.1.0-node-drain"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.1.0-openebs-target-container-failure",
"version-1.1.0-openebs-target-network-delay",
"version-1.1.0-openebs-target-network-loss",
"version-1.1.0-openebs-target-pod-failure",
"version-1.1.0-openebs-pool-pod-failure",
"version-1.1.0-openebs-pool-container-failure",
"version-1.1.0-openebs-pool-network-delay",
"version-1.1.0-openebs-pool-network-loss",
"version-1.1.0-openebs-control-plane-chaos",
"version-1.1.0-cStor-pool-chaos"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.1.0-kafka-broker-pod-failure",
"version-1.1.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.1.0-coredns-pod-delete"
]
}
],
"Litmus FAQs": [
"version-1.1.0-faq-general",
"version-1.1.0-faq-troubleshooting"
]
}
}

View File

@ -1,74 +0,0 @@
{
"version-1.2.0-docs": {
"Getting Started": [
"version-1.2.0-getstarted",
"version-1.2.0-chaoshub",
"version-1.2.0-plugins",
"version-1.2.0-architecture",
"version-1.2.0-resources",
"version-1.2.0-community",
"version-1.2.0-devguide"
],
"Concepts": [
"version-1.2.0-chaosengine"
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.2.0-pod-delete",
"version-1.2.0-container-kill",
"version-1.2.0-pod-network-latency",
"version-1.2.0-pod-network-loss",
"version-1.2.0-pod-network-corruption",
"version-1.2.0-pod-cpu-hog",
"version-1.2.0-disk-fill",
"version-1.2.0-disk-loss",
"version-1.2.0-node-cpu-hog",
"version-1.2.0-node-memory-hog",
"version-1.2.0-node-drain"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.2.0-openebs-target-container-failure",
"version-1.2.0-openebs-target-network-delay",
"version-1.2.0-openebs-target-network-loss",
"version-1.2.0-openebs-target-pod-failure",
"version-1.2.0-openebs-pool-pod-failure",
"version-1.2.0-openebs-pool-container-failure",
"version-1.2.0-openebs-pool-network-delay",
"version-1.2.0-openebs-pool-network-loss",
"version-1.2.0-openebs-control-plane-chaos",
"version-1.2.0-cStor-pool-chaos",
"version-1.2.0-openebs-pool-disk-loss"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.2.0-kafka-broker-pod-failure",
"version-1.2.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.2.0-coredns-pod-delete"
]
}
],
"Litmus FAQs": [
"version-1.2.0-faq-general",
"version-1.2.0-faq-troubleshooting"
],
"Advanced": [
"version-1.2.0-admin-mode"
]
}
}

View File

@ -1,83 +0,0 @@
{
"version-1.3.0-docs": {
"Getting Started": [
"version-1.3.0-getstarted",
"version-1.3.0-chaoshub",
"version-1.3.0-plugins",
"version-1.3.0-architecture",
"version-1.3.0-resources",
"version-1.3.0-community",
"version-1.3.0-devguide"
],
"Concepts": [
"version-1.3.0-chaosengine"
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.3.0-pod-delete",
"version-1.3.0-container-kill",
"version-1.3.0-pod-network-latency",
"version-1.3.0-pod-network-loss",
"version-1.3.0-pod-network-corruption",
"version-1.3.0-pod-cpu-hog",
"version-1.3.0-pod-memory-hog",
"version-1.3.0-disk-fill",
"version-1.3.0-disk-loss",
"version-1.3.0-node-cpu-hog",
"version-1.3.0-node-memory-hog",
"version-1.3.0-node-drain"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.3.0-openebs-target-container-failure",
"version-1.3.0-openebs-target-network-delay",
"version-1.3.0-openebs-target-network-loss",
"version-1.3.0-openebs-target-pod-failure",
"version-1.3.0-openebs-pool-pod-failure",
"version-1.3.0-openebs-pool-container-failure",
"version-1.3.0-openebs-pool-network-delay",
"version-1.3.0-openebs-pool-network-loss",
"version-1.3.0-openebs-control-plane-chaos",
"version-1.3.0-cStor-pool-chaos",
"version-1.3.0-openebs-pool-disk-loss",
"version-1.3.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.3.0-kafka-broker-pod-failure",
"version-1.3.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.3.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.3.0-cassandra-pod-delete"
]
}
],
"Litmus FAQs": [
"version-1.3.0-faq-general",
"version-1.3.0-faq-troubleshooting"
],
"Advanced": [
"version-1.3.0-admin-mode"
]
}
}

View File

@ -1,96 +0,0 @@
{
"version-1.4.0-docs": {
"Getting Started": [
"version-1.4.0-getstarted",
"version-1.4.0-chaoshub",
"version-1.4.0-plugins",
"version-1.4.0-architecture",
"version-1.4.0-resources",
"version-1.4.0-community",
"version-1.4.0-devguide"
],
"Concepts": [
"version-1.4.0-chaosengine",
"version-1.4.0-chaosschedule"
],
"Platforms": [
{
"type": "subcategory",
"label": "OpenShift",
"ids": [
"version-1.4.0-openshift-litmus"
]
}
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.4.0-pod-delete",
"version-1.4.0-container-kill",
"version-1.4.0-pod-network-latency",
"version-1.4.0-pod-network-loss",
"version-1.4.0-pod-network-corruption",
"version-1.4.0-pod-cpu-hog",
"version-1.4.0-pod-memory-hog",
"version-1.4.0-disk-fill",
"version-1.4.0-disk-loss",
"version-1.4.0-node-cpu-hog",
"version-1.4.0-node-memory-hog",
"version-1.4.0-node-drain"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.4.0-openebs-target-container-failure",
"version-1.4.0-openebs-target-network-delay",
"version-1.4.0-openebs-target-network-loss",
"version-1.4.0-openebs-target-pod-failure",
"version-1.4.0-openebs-pool-pod-failure",
"version-1.4.0-openebs-pool-container-failure",
"version-1.4.0-openebs-pool-network-delay",
"version-1.4.0-openebs-pool-network-loss",
"version-1.4.0-openebs-control-plane-chaos",
"version-1.4.0-cStor-pool-chaos",
"version-1.4.0-openebs-pool-disk-loss",
"version-1.4.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.4.0-kafka-broker-pod-failure",
"version-1.4.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.4.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.4.0-cassandra-pod-delete"
]
}
],
"Scheduler (alpha)": [
"version-1.4.0-scheduling"
],
"Litmus FAQs": [
"version-1.4.0-faq-general",
"version-1.4.0-faq-troubleshooting"
],
"Advanced": [
"version-1.4.0-admin-mode"
]
}
}

View File

@ -1,97 +0,0 @@
{
"version-1.5.0-docs": {
"Getting Started": [
"version-1.5.0-getstarted",
"version-1.5.0-chaoshub",
"version-1.5.0-plugins",
"version-1.5.0-architecture",
"version-1.5.0-resources",
"version-1.5.0-community",
"version-1.5.0-devguide"
],
"Concepts": [
"version-1.5.0-chaosengine",
"version-1.5.0-chaosschedule"
],
"Platforms": [
{
"type": "subcategory",
"label": "OpenShift",
"ids": [
"version-1.5.0-openshift-litmus"
]
}
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.5.0-pod-delete",
"version-1.5.0-container-kill",
"version-1.5.0-pod-network-latency",
"version-1.5.0-pod-network-loss",
"version-1.5.0-pod-network-corruption",
"version-1.5.0-pod-cpu-hog",
"version-1.5.0-pod-memory-hog",
"version-1.5.0-disk-fill",
"version-1.5.0-disk-loss",
"version-1.5.0-node-cpu-hog",
"version-1.5.0-node-memory-hog",
"version-1.5.0-node-drain",
"version-1.5.0-kubelet-service-kill"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.5.0-openebs-target-container-failure",
"version-1.5.0-openebs-target-network-delay",
"version-1.5.0-openebs-target-network-loss",
"version-1.5.0-openebs-target-pod-failure",
"version-1.5.0-openebs-pool-pod-failure",
"version-1.5.0-openebs-pool-container-failure",
"version-1.5.0-openebs-pool-network-delay",
"version-1.5.0-openebs-pool-network-loss",
"version-1.5.0-openebs-control-plane-chaos",
"version-1.5.0-cStor-pool-chaos",
"version-1.5.0-openebs-pool-disk-loss",
"version-1.5.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.5.0-kafka-broker-pod-failure",
"version-1.5.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.5.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.5.0-cassandra-pod-delete"
]
}
],
"Scheduler (alpha)": [
"version-1.5.0-scheduling"
],
"Litmus FAQs": [
"version-1.5.0-faq-general",
"version-1.5.0-faq-troubleshooting"
],
"Advanced": [
"version-1.5.0-admin-mode"
]
}
}

View File

@ -1,113 +0,0 @@
{
"version-1.6.0-docs": {
"Getting Started": [
"version-1.6.0-getstarted",
"version-1.6.0-chaoshub",
"version-1.6.0-plugins",
"version-1.6.0-architecture",
"version-1.6.0-resources",
"version-1.6.0-community",
"version-1.6.0-devguide"
],
"Litmus Demo": [
"version-1.6.0-litmus-demo"
],
"Concepts": [
"version-1.6.0-chaosengine",
"version-1.6.0-chaosschedule"
],
"Platforms": [
{
"type": "subcategory",
"label": "OpenShift",
"ids": [
"version-1.6.0-openshift-litmus"
]
},
{
"type": "subcategory",
"label": "Rancher",
"ids": [
"version-1.6.0-rancher-litmus"
]
}
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.6.0-pod-delete",
"version-1.6.0-container-kill",
"version-1.6.0-pod-network-latency",
"version-1.6.0-pod-network-loss",
"version-1.6.0-pod-network-corruption",
"version-1.6.0-pod-cpu-hog",
"version-1.6.0-pod-memory-hog",
"version-1.6.0-disk-fill",
"version-1.6.0-disk-loss",
"version-1.6.0-node-cpu-hog",
"version-1.6.0-node-memory-hog",
"version-1.6.0-node-drain",
"version-1.6.0-kubelet-service-kill",
"version-1.6.0-pod-network-duplication",
"version-1.6.0-node-taint",
"version-1.6.0-docker-service-kill"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.6.0-openebs-target-container-failure",
"version-1.6.0-openebs-target-network-delay",
"version-1.6.0-openebs-target-network-loss",
"version-1.6.0-openebs-target-pod-failure",
"version-1.6.0-openebs-pool-pod-failure",
"version-1.6.0-openebs-pool-container-failure",
"version-1.6.0-openebs-pool-network-delay",
"version-1.6.0-openebs-pool-network-loss",
"version-1.6.0-openebs-control-plane-chaos",
"version-1.6.0-cStor-pool-chaos",
"version-1.6.0-openebs-pool-disk-loss",
"version-1.6.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.6.0-kafka-broker-pod-failure",
"version-1.6.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.6.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.6.0-cassandra-pod-delete"
]
}
],
"Scheduler": [
"version-1.6.0-scheduling"
],
"Chaos Workflow": [
"version-1.6.0-chaos-workflows"
],
"Litmus FAQs": [
"version-1.6.0-faq-general",
"version-1.6.0-faq-troubleshooting"
],
"Advanced": [
"version-1.6.0-admin-mode"
]
}
}

View File

@ -1,126 +0,0 @@
{
"version-1.7.0-docs": {
"Getting Started": [
"version-1.7.0-getstarted",
"version-1.7.0-chaoshub",
"version-1.7.0-plugins",
"version-1.7.0-architecture",
"version-1.7.0-resources",
"version-1.7.0-community",
"version-1.7.0-devguide"
],
"Litmus Demo": [
"version-1.7.0-litmus-demo"
],
"Concepts": [
"version-1.7.0-chaosengine",
"version-1.7.0-chaosschedule",
"version-1.7.0-litmus-probe"
],
"Platforms": [
{
"type": "subcategory",
"label": "OpenShift",
"ids": [
"version-1.7.0-openshift-litmus"
]
},
{
"type": "subcategory",
"label": "Rancher",
"ids": [
"version-1.7.0-rancher-litmus"
]
}
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.7.0-pod-delete",
"version-1.7.0-container-kill",
"version-1.7.0-pod-network-latency",
"version-1.7.0-pod-network-loss",
"version-1.7.0-pod-network-corruption",
"version-1.7.0-pod-cpu-hog",
"version-1.7.0-pod-memory-hog",
"version-1.7.0-disk-fill",
"version-1.7.0-disk-loss",
"version-1.7.0-node-cpu-hog",
"version-1.7.0-node-memory-hog",
"version-1.7.0-node-drain",
"version-1.7.0-kubelet-service-kill",
"version-1.7.0-pod-network-duplication",
"version-1.7.0-node-taint",
"version-1.7.0-docker-service-kill",
"version-1.7.0-pod-autoscaler"
]
},
{
"type": "subcategory",
"label": "Kubernetes",
"ids": [
"version-1.7.0-Kubernetes-Chaostoolkit-Application",
"version-1.7.0-Kubernetes-Chaostoolkit-Service",
"version-1.7.0-Kubernetes-Chaostoolkit-Cluster-Kiam",
"version-1.7.0-Kubernetes-Chaostoolkit-AWS"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.7.0-openebs-target-container-failure",
"version-1.7.0-openebs-target-network-delay",
"version-1.7.0-openebs-target-network-loss",
"version-1.7.0-openebs-target-pod-failure",
"version-1.7.0-openebs-pool-pod-failure",
"version-1.7.0-openebs-pool-container-failure",
"version-1.7.0-openebs-pool-network-delay",
"version-1.7.0-openebs-pool-network-loss",
"version-1.7.0-openebs-control-plane-chaos",
"version-1.7.0-cStor-pool-chaos",
"version-1.7.0-openebs-pool-disk-loss",
"version-1.7.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.7.0-kafka-broker-pod-failure",
"version-1.7.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.7.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.7.0-cassandra-pod-delete"
]
}
],
"Scheduler": [
"version-1.7.0-scheduling"
],
"Chaos Workflow": [
"version-1.7.0-chaos-workflows"
],
"Litmus FAQs": [
"version-1.7.0-faq-general",
"version-1.7.0-faq-troubleshooting"
],
"Advanced": [
"version-1.7.0-admin-mode",
"version-1.7.0-namespaced-mode"
]
}
}

View File

@ -1,128 +0,0 @@
{
"version-1.8.0-docs": {
"Getting Started": [
"version-1.8.0-getstarted",
"version-1.8.0-chaoshub",
"version-1.8.0-plugins",
"version-1.8.0-architecture",
"version-1.8.0-resources",
"version-1.8.0-community",
"version-1.8.0-devguide"
],
"Litmus Demo": [
"version-1.8.0-litmus-demo"
],
"Concepts": [
"version-1.8.0-chaosengine",
"version-1.8.0-chaosschedule",
"version-1.8.0-litmus-probe"
],
"Platforms": [
{
"type": "subcategory",
"label": "OpenShift",
"ids": [
"version-1.8.0-openshift-litmus"
]
},
{
"type": "subcategory",
"label": "Rancher",
"ids": [
"version-1.8.0-rancher-litmus"
]
}
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.8.0-pod-delete",
"version-1.8.0-container-kill",
"version-1.8.0-pod-network-latency",
"version-1.8.0-pod-network-loss",
"version-1.8.0-pod-network-corruption",
"version-1.8.0-pod-cpu-hog",
"version-1.8.0-pod-memory-hog",
"version-1.8.0-disk-fill",
"version-1.8.0-disk-loss",
"version-1.8.0-node-cpu-hog",
"version-1.8.0-node-memory-hog",
"version-1.8.0-node-drain",
"version-1.8.0-kubelet-service-kill",
"version-1.8.0-pod-network-duplication",
"version-1.8.0-node-taint",
"version-1.8.0-docker-service-kill",
"version-1.8.0-pod-autoscaler",
"version-1.8.0-Kubernetes-Chaostoolkit-Application",
"version-1.8.0-Kubernetes-Chaostoolkit-Service",
"version-1.8.0-Kubernetes-Chaostoolkit-Cluster-Kiam",
"version-1.8.0-pod-io-stress",
"version-1.8.0-node-io-stress"
]
},
{
"type": "subcategory",
"label": "Kube-AWS",
"ids": [
"version-1.8.0-Kubernetes-Chaostoolkit-AWS"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.8.0-openebs-target-container-failure",
"version-1.8.0-openebs-target-network-delay",
"version-1.8.0-openebs-target-network-loss",
"version-1.8.0-openebs-target-pod-failure",
"version-1.8.0-openebs-pool-pod-failure",
"version-1.8.0-openebs-pool-container-failure",
"version-1.8.0-openebs-pool-network-delay",
"version-1.8.0-openebs-pool-network-loss",
"version-1.8.0-openebs-control-plane-chaos",
"version-1.8.0-cStor-pool-chaos",
"version-1.8.0-openebs-pool-disk-loss",
"version-1.8.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.8.0-kafka-broker-pod-failure",
"version-1.8.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.8.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.8.0-cassandra-pod-delete"
]
}
],
"Scheduler": [
"version-1.8.0-scheduling"
],
"Chaos Workflow": [
"version-1.8.0-chaos-workflows"
],
"Litmus FAQs": [
"version-1.8.0-faq-general",
"version-1.8.0-faq-troubleshooting"
],
"Advanced": [
"version-1.8.0-admin-mode",
"version-1.8.0-namespaced-mode"
]
}
}

View File

@ -1,130 +0,0 @@
{
"version-1.9.0-docs": {
"Getting Started": [
"version-1.9.0-getstarted",
"version-1.9.0-chaoshub",
"version-1.9.0-plugins",
"version-1.9.0-architecture",
"version-1.9.0-resources",
"version-1.9.0-community",
"version-1.9.0-devguide"
],
"Litmus Demo": [
"version-1.9.0-litmus-demo"
],
"Concepts": [
"version-1.9.0-chaosengine",
"version-1.9.0-chaosexperiment",
"version-1.9.0-chaosschedule",
"version-1.9.0-chaosresult",
"version-1.9.0-litmus-probe"
],
"Platforms": [
{
"type": "subcategory",
"label": "OpenShift",
"ids": [
"version-1.9.0-openshift-litmus"
]
},
{
"type": "subcategory",
"label": "Rancher",
"ids": [
"version-1.9.0-rancher-litmus"
]
}
],
"Experiments": [
{
"type": "subcategory",
"label": "Generic",
"ids": [
"version-1.9.0-pod-delete",
"version-1.9.0-container-kill",
"version-1.9.0-pod-network-latency",
"version-1.9.0-pod-network-loss",
"version-1.9.0-pod-network-corruption",
"version-1.9.0-pod-cpu-hog",
"version-1.9.0-pod-memory-hog",
"version-1.9.0-disk-fill",
"version-1.9.0-disk-loss",
"version-1.9.0-node-cpu-hog",
"version-1.9.0-node-memory-hog",
"version-1.9.0-node-drain",
"version-1.9.0-kubelet-service-kill",
"version-1.9.0-pod-network-duplication",
"version-1.9.0-node-taint",
"version-1.9.0-docker-service-kill",
"version-1.9.0-pod-autoscaler",
"version-1.9.0-Kubernetes-Chaostoolkit-Application",
"version-1.9.0-Kubernetes-Chaostoolkit-Service",
"version-1.9.0-Kubernetes-Chaostoolkit-Cluster-Kiam",
"version-1.9.0-pod-io-stress",
"version-1.9.0-node-io-stress"
]
},
{
"type": "subcategory",
"label": "Kube-AWS",
"ids": [
"version-1.9.0-Kubernetes-Chaostoolkit-AWS"
]
},
{
"type": "subcategory",
"label": "OpenEBS",
"ids": [
"version-1.9.0-openebs-target-container-failure",
"version-1.9.0-openebs-target-network-delay",
"version-1.9.0-openebs-target-network-loss",
"version-1.9.0-openebs-target-pod-failure",
"version-1.9.0-openebs-pool-pod-failure",
"version-1.9.0-openebs-pool-container-failure",
"version-1.9.0-openebs-pool-network-delay",
"version-1.9.0-openebs-pool-network-loss",
"version-1.9.0-openebs-control-plane-chaos",
"version-1.9.0-cStor-pool-chaos",
"version-1.9.0-openebs-pool-disk-loss",
"version-1.9.0-openebs-nfs-provisioner-kill"
]
},
{
"type": "subcategory",
"label": "Kafka",
"ids": [
"version-1.9.0-kafka-broker-pod-failure",
"version-1.9.0-kafka-broker-disk-failure"
]
},
{
"type": "subcategory",
"label": "CoreDns",
"ids": [
"version-1.9.0-coredns-pod-delete"
]
},
{
"type": "subcategory",
"label": "Cassandra",
"ids": [
"version-1.9.0-cassandra-pod-delete"
]
}
],
"Scheduler": [
"version-1.9.0-scheduling"
],
"Chaos Workflow": [
"version-1.9.0-chaos-workflows"
],
"Litmus FAQs": [
"version-1.9.0-faq-general",
"version-1.9.0-faq-troubleshooting"
],
"Advanced": [
"version-1.9.0-admin-mode",
"version-1.9.0-namespaced-mode"
]
}
}

View File

@ -1,6 +1,6 @@
--- ---
id: faq-troubleshooting id: faq-troubleshooting
title: Troubleshooting Litmus title: "Troubleshooting Litmus"
sidebar_label: Troubleshooting sidebar_label: Troubleshooting
--- ---

View File

@ -1,7 +1,6 @@
--- ---
id: getstarted id: getstarted
title: Getting Started with Litmus title: Getting Started with Litmus
slug: "/"
sidebar_label: Introduction sidebar_label: Introduction
--- ---

View File

@ -42,7 +42,7 @@ module.exports = {
tagline: "A website for testing", tagline: "A website for testing",
url: "https://docs.litmuschaos.io", url: "https://docs.litmuschaos.io",
baseUrl: "/", baseUrl: "/",
onBrokenLinks: "ignore", onBrokenLinks: "throw",
favicon: "img/favicon.ico", favicon: "img/favicon.ico",
organizationName: "litmuschaos", organizationName: "litmuschaos",
projectName: "litmus", projectName: "litmus",
@ -72,11 +72,11 @@ module.exports = {
}, },
...versions.slice(1).map((version) => ({ ...versions.slice(1).map((version) => ({
label: version, label: version,
to: `docs/${version}/`, to: `docs/${version}/getstarted`,
})), })),
{ {
label: "Master/Unreleased", label: "Master/Unreleased",
to: "docs/next/", to: "docs/next/getstarted",
}, },
], ],
}, },
@ -121,9 +121,9 @@ module.exports = {
"@docusaurus/preset-classic", "@docusaurus/preset-classic",
{ {
docs: { docs: {
routeBasePath: "docs",
sidebarPath: require.resolve("./sidebars.js"), sidebarPath: require.resolve("./sidebars.js"),
editUrl: "https://github.com/litmuschaos/litmus-docs-beta/edit/staging/", editUrl:
"https://github.com/litmuschaos/litmus-docs-beta/edit/staging/",
showLastUpdateTime: true, showLastUpdateTime: true,
}, },
theme: { theme: {

View File

@ -0,0 +1,7 @@
import React from "react";
import { Redirect } from "@docusaurus/router";
function Docs() {
return <Redirect to="/docs/getstarted" />;
}
export default Docs;

View File

@ -1,13 +1,13 @@
--- ---
id: version-1.0.0-architecture id: architecture
title: Litmus Architecture title: Litmus Architecture
sidebar_label: Architecture sidebar_label: Architecture
original_id: architecture original_id: architecture
--- ---
<hr> <hr />
<img src="/docs/assets/architecture.png" width="800"> <img src={require('./assets/architecture.png').default} width="800" />
**Chaos-Operator** **Chaos-Operator**
@ -23,32 +23,24 @@ During installation, the following three CRDs are installed on the Kubernetes cl
`chaosresults.litmuschaos.io` `chaosresults.litmuschaos.io`
**Chaos-Experiments** **Chaos-Experiments**
Chaos Experiment is a CR and are available as YAML files on <a href=" https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>. For more details visit Chaos Hub [documentation](chaoshub.md). Chaos Experiment is a CR and are available as YAML files on <a href="https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>. For more details visit Chaos Hub [documentation](chaoshub.md).
**Chaos-Engine** **Chaos-Engine**
ChaosEngine CR links application to experiments. User has to create ChaosEngine YAML by specifying the application label and experiments and create the CR. The CR is watched by Chaos-Operator and chaos-experiments are executed on a given application. ChaosEngine CR links application to experiments. User has to create ChaosEngine YAML by specifying the application label and experiments and create the CR. The CR is watched by Chaos-Operator and chaos-experiments are executed on a given application.
**Chaos-Exporter** **Chaos-Exporter**
Optionally metrics can be exported to a Prometheus database. Chaos-Exporter implements the Prometheus metrics endpoint. Optionally metrics can be exported to a Prometheus database. Chaos-Exporter implements the Prometheus metrics endpoint.
<br />
<br />
<br> <hr />
<br> <br />
<hr> <br />
<br>
<br>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,429 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1349.33333328" height="862.4" font-family="Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'" font-size="14px">
<style>
<!-- asciinema theme -->
.default-text-fill {fill: #cccccc}
.default-bg-fill {fill: #121314}
.c-0 {fill: #000000}
.c-1 {fill: #dd3c69}
.c-2 {fill: #4ebf22}
.c-3 {fill: #ddaf3c}
.c-4 {fill: #26b0d7}
.c-5 {fill: #b954e1}
.c-6 {fill: #54e1b9}
.c-7 {fill: #d9d9d9}
.c-8 {fill: #4d4d4d}
.c-9 {fill: #dd3c69}
.c-10 {fill: #4ebf22}
.c-11 {fill: #ddaf3c}
.c-12 {fill: #26b0d7}
.c-13 {fill: #b954e1}
.c-14 {fill: #54e1b9}
.c-15 {fill: #ffffff}
.c-8, .c-9, .c-10, .c-11, .c-12, .c-13, .c-14, .c-15 {font-weight: bold}
<!-- 256 colors -->
.c-16 {fill: #000000}
.c-17 {fill: #00005f}
.c-18 {fill: #000087}
.c-19 {fill: #0000af}
.c-20 {fill: #0000d7}
.c-21 {fill: #0000ff}
.c-22 {fill: #005f00}
.c-23 {fill: #005f5f}
.c-24 {fill: #005f87}
.c-25 {fill: #005faf}
.c-26 {fill: #005fd7}
.c-27 {fill: #005fff}
.c-28 {fill: #008700}
.c-29 {fill: #00875f}
.c-30 {fill: #008787}
.c-31 {fill: #0087af}
.c-32 {fill: #0087d7}
.c-33 {fill: #0087ff}
.c-34 {fill: #00af00}
.c-35 {fill: #00af5f}
.c-36 {fill: #00af87}
.c-37 {fill: #00afaf}
.c-38 {fill: #00afd7}
.c-39 {fill: #00afff}
.c-40 {fill: #00d700}
.c-41 {fill: #00d75f}
.c-42 {fill: #00d787}
.c-43 {fill: #00d7af}
.c-44 {fill: #00d7d7}
.c-45 {fill: #00d7ff}
.c-46 {fill: #00ff00}
.c-47 {fill: #00ff5f}
.c-48 {fill: #00ff87}
.c-49 {fill: #00ffaf}
.c-50 {fill: #00ffd7}
.c-51 {fill: #00ffff}
.c-52 {fill: #5f0000}
.c-53 {fill: #5f005f}
.c-54 {fill: #5f0087}
.c-55 {fill: #5f00af}
.c-56 {fill: #5f00d7}
.c-57 {fill: #5f00ff}
.c-58 {fill: #5f5f00}
.c-59 {fill: #5f5f5f}
.c-60 {fill: #5f5f87}
.c-61 {fill: #5f5faf}
.c-62 {fill: #5f5fd7}
.c-63 {fill: #5f5fff}
.c-64 {fill: #5f8700}
.c-65 {fill: #5f875f}
.c-66 {fill: #5f8787}
.c-67 {fill: #5f87af}
.c-68 {fill: #5f87d7}
.c-69 {fill: #5f87ff}
.c-70 {fill: #5faf00}
.c-71 {fill: #5faf5f}
.c-72 {fill: #5faf87}
.c-73 {fill: #5fafaf}
.c-74 {fill: #5fafd7}
.c-75 {fill: #5fafff}
.c-76 {fill: #5fd700}
.c-77 {fill: #5fd75f}
.c-78 {fill: #5fd787}
.c-79 {fill: #5fd7af}
.c-80 {fill: #5fd7d7}
.c-81 {fill: #5fd7ff}
.c-82 {fill: #5fff00}
.c-83 {fill: #5fff5f}
.c-84 {fill: #5fff87}
.c-85 {fill: #5fffaf}
.c-86 {fill: #5fffd7}
.c-87 {fill: #5fffff}
.c-88 {fill: #870000}
.c-89 {fill: #87005f}
.c-90 {fill: #870087}
.c-91 {fill: #8700af}
.c-92 {fill: #8700d7}
.c-93 {fill: #8700ff}
.c-94 {fill: #875f00}
.c-95 {fill: #875f5f}
.c-96 {fill: #875f87}
.c-97 {fill: #875faf}
.c-98 {fill: #875fd7}
.c-99 {fill: #875fff}
.c-100 {fill: #878700}
.c-101 {fill: #87875f}
.c-102 {fill: #878787}
.c-103 {fill: #8787af}
.c-104 {fill: #8787d7}
.c-105 {fill: #8787ff}
.c-106 {fill: #87af00}
.c-107 {fill: #87af5f}
.c-108 {fill: #87af87}
.c-109 {fill: #87afaf}
.c-110 {fill: #87afd7}
.c-111 {fill: #87afff}
.c-112 {fill: #87d700}
.c-113 {fill: #87d75f}
.c-114 {fill: #87d787}
.c-115 {fill: #87d7af}
.c-116 {fill: #87d7d7}
.c-117 {fill: #87d7ff}
.c-118 {fill: #87ff00}
.c-119 {fill: #87ff5f}
.c-120 {fill: #87ff87}
.c-121 {fill: #87ffaf}
.c-122 {fill: #87ffd7}
.c-123 {fill: #87ffff}
.c-124 {fill: #af0000}
.c-125 {fill: #af005f}
.c-126 {fill: #af0087}
.c-127 {fill: #af00af}
.c-128 {fill: #af00d7}
.c-129 {fill: #af00ff}
.c-130 {fill: #af5f00}
.c-131 {fill: #af5f5f}
.c-132 {fill: #af5f87}
.c-133 {fill: #af5faf}
.c-134 {fill: #af5fd7}
.c-135 {fill: #af5fff}
.c-136 {fill: #af8700}
.c-137 {fill: #af875f}
.c-138 {fill: #af8787}
.c-139 {fill: #af87af}
.c-140 {fill: #af87d7}
.c-141 {fill: #af87ff}
.c-142 {fill: #afaf00}
.c-143 {fill: #afaf5f}
.c-144 {fill: #afaf87}
.c-145 {fill: #afafaf}
.c-146 {fill: #afafd7}
.c-147 {fill: #afafff}
.c-148 {fill: #afd700}
.c-149 {fill: #afd75f}
.c-150 {fill: #afd787}
.c-151 {fill: #afd7af}
.c-152 {fill: #afd7d7}
.c-153 {fill: #afd7ff}
.c-154 {fill: #afff00}
.c-155 {fill: #afff5f}
.c-156 {fill: #afff87}
.c-157 {fill: #afffaf}
.c-158 {fill: #afffd7}
.c-159 {fill: #afffff}
.c-160 {fill: #d70000}
.c-161 {fill: #d7005f}
.c-162 {fill: #d70087}
.c-163 {fill: #d700af}
.c-164 {fill: #d700d7}
.c-165 {fill: #d700ff}
.c-166 {fill: #d75f00}
.c-167 {fill: #d75f5f}
.c-168 {fill: #d75f87}
.c-169 {fill: #d75faf}
.c-170 {fill: #d75fd7}
.c-171 {fill: #d75fff}
.c-172 {fill: #d78700}
.c-173 {fill: #d7875f}
.c-174 {fill: #d78787}
.c-175 {fill: #d787af}
.c-176 {fill: #d787d7}
.c-177 {fill: #d787ff}
.c-178 {fill: #d7af00}
.c-179 {fill: #d7af5f}
.c-180 {fill: #d7af87}
.c-181 {fill: #d7afaf}
.c-182 {fill: #d7afd7}
.c-183 {fill: #d7afff}
.c-184 {fill: #d7d700}
.c-185 {fill: #d7d75f}
.c-186 {fill: #d7d787}
.c-187 {fill: #d7d7af}
.c-188 {fill: #d7d7d7}
.c-189 {fill: #d7d7ff}
.c-190 {fill: #d7ff00}
.c-191 {fill: #d7ff5f}
.c-192 {fill: #d7ff87}
.c-193 {fill: #d7ffaf}
.c-194 {fill: #d7ffd7}
.c-195 {fill: #d7ffff}
.c-196 {fill: #ff0000}
.c-197 {fill: #ff005f}
.c-198 {fill: #ff0087}
.c-199 {fill: #ff00af}
.c-200 {fill: #ff00d7}
.c-201 {fill: #ff00ff}
.c-202 {fill: #ff5f00}
.c-203 {fill: #ff5f5f}
.c-204 {fill: #ff5f87}
.c-205 {fill: #ff5faf}
.c-206 {fill: #ff5fd7}
.c-207 {fill: #ff5fff}
.c-208 {fill: #ff8700}
.c-209 {fill: #ff875f}
.c-210 {fill: #ff8787}
.c-211 {fill: #ff87af}
.c-212 {fill: #ff87d7}
.c-213 {fill: #ff87ff}
.c-214 {fill: #ffaf00}
.c-215 {fill: #ffaf5f}
.c-216 {fill: #ffaf87}
.c-217 {fill: #ffafaf}
.c-218 {fill: #ffafd7}
.c-219 {fill: #ffafff}
.c-220 {fill: #ffd700}
.c-221 {fill: #ffd75f}
.c-222 {fill: #ffd787}
.c-223 {fill: #ffd7af}
.c-224 {fill: #ffd7d7}
.c-225 {fill: #ffd7ff}
.c-226 {fill: #ffff00}
.c-227 {fill: #ffff5f}
.c-228 {fill: #ffff87}
.c-229 {fill: #ffffaf}
.c-230 {fill: #ffffd7}
.c-231 {fill: #ffffff}
.c-232 {fill: #080808}
.c-233 {fill: #121212}
.c-234 {fill: #1c1c1c}
.c-235 {fill: #262626}
.c-236 {fill: #303030}
.c-237 {fill: #3a3a3a}
.c-238 {fill: #444444}
.c-239 {fill: #4e4e4e}
.c-240 {fill: #585858}
.c-241 {fill: #626262}
.c-242 {fill: #6c6c6c}
.c-243 {fill: #767676}
.c-244 {fill: #808080}
.c-245 {fill: #8a8a8a}
.c-246 {fill: #949494}
.c-247 {fill: #9e9e9e}
.c-248 {fill: #a8a8a8}
.c-249 {fill: #b2b2b2}
.c-250 {fill: #bcbcbc}
.c-251 {fill: #c6c6c6}
.c-252 {fill: #d0d0d0}
.c-253 {fill: #dadada}
.c-254 {fill: #e4e4e4}
.c-255 {fill: #eeeeee}
.br { font-weight: bold }
.it { font-style: italic }
.un { text-decoration: underline }
</style>
<rect width="100%" height="100%" class="default-bg-fill" />
<svg x="0.625%" y="1.136%" class="default-text-fill">
<g style="shape-rendering: optimizeSpeed">
<rect x="5.625%" y="6.818%" width="0.625%" height="19.7" class="c-7" />
<rect x="0.000%" y="95.455%" width="98.750%" height="19.7" class="c-2" />
</g>
<text class="default-text-fill">
<tspan y="0.000%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="5.625%">#</tspan><tspan x="6.875%">B</tspan><tspan x="7.500%">u</tspan><tspan x="8.125%">i</tspan><tspan x="8.750%">l</tspan><tspan x="9.375%">d</tspan><tspan x="10.625%">a</tspan><tspan x="11.250%">n</tspan><tspan x="11.875%">d</tspan><tspan x="13.125%">a</tspan><tspan x="13.750%">p</tspan><tspan x="14.375%">p</tspan><tspan x="15.000%">l</tspan><tspan x="15.625%">y</tspan><tspan x="16.875%">C</tspan><tspan x="17.500%">h</tspan><tspan x="18.125%">a</tspan><tspan x="18.750%">o</tspan><tspan x="19.375%">s</tspan><tspan x="20.000%">E</tspan><tspan x="20.625%">n</tspan><tspan x="21.250%">g</tspan><tspan x="21.875%">i</tspan><tspan x="22.500%">n</tspan><tspan x="23.125%">e</tspan><tspan x="24.375%">C</tspan><tspan x="25.000%">R</tspan><tspan x="26.250%">t</tspan><tspan x="26.875%">o</tspan><tspan x="28.125%">u</tspan><tspan x="28.750%">n</tspan><tspan x="29.375%">l</tspan><tspan x="30.000%">e</tspan><tspan x="30.625%">a</tspan><tspan x="31.250%">s</tspan><tspan x="31.875%">h</tspan><tspan x="33.125%">C</tspan><tspan x="33.750%">h</tspan><tspan x="34.375%">a</tspan><tspan x="35.000%">o</tspan><tspan x="35.625%">s</tspan><tspan x="49.375%" class="c-2"></tspan><tspan x="50.000%">E</tspan><tspan x="50.625%">v</tspan><tspan x="51.250%">e</tspan><tspan x="51.875%">r</tspan><tspan x="52.500%">y</tspan><tspan x="53.750%">1</tspan><tspan x="54.375%">.</tspan><tspan x="55.000%">0</tspan><tspan x="55.625%">s</tspan><tspan x="56.250%">:</tspan><tspan x="57.500%">k</tspan><tspan x="58.125%">u</tspan><tspan x="58.750%">b</tspan><tspan x="59.375%">e</tspan><tspan x="60.000%">c</tspan><tspan x="60.625%">t</tspan><tspan x="61.250%">l</tspan><tspan x="62.500%">g</tspan><tspan x="63.125%">e</tspan><tspan x="63.750%">t</tspan><tspan x="65.000%">p</tspan><tspan x="65.625%">o</tspan><tspan x="83.750%">F</tspan><tspan x="84.375%">r</tspan><tspan x="85.000%">i</tspan><tspan x="86.250%">O</tspan><tspan x="86.875%">c</tspan><tspan x="87.500%">t</tspan><tspan x="89.375%">4</tspan><tspan x="90.625%">1</tspan><tspan x="91.250%">9</tspan><tspan x="91.875%">:</tspan><tspan x="92.500%">3</tspan><tspan x="93.125%">2</tspan><tspan x="93.750%">:</tspan><tspan x="94.375%">3</tspan><tspan x="95.000%">5</tspan><tspan x="96.250%">2</tspan><tspan x="96.875%">0</tspan><tspan x="97.500%">1</tspan><tspan x="98.125%">9</tspan>
</tspan>
<tspan y="2.273%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="4.545%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="5.625%">v</tspan><tspan x="6.250%">i</tspan><tspan x="7.500%">c</tspan><tspan x="8.125%">h</tspan><tspan x="8.750%">a</tspan><tspan x="9.375%">o</tspan><tspan x="10.000%">s</tspan><tspan x="10.625%">e</tspan><tspan x="11.250%">n</tspan><tspan x="11.875%">g</tspan><tspan x="12.500%">i</tspan><tspan x="13.125%">n</tspan><tspan x="13.750%">e</tspan><tspan x="14.375%">.</tspan><tspan x="15.000%">y</tspan><tspan x="15.625%">a</tspan><tspan x="16.250%">m</tspan><tspan x="16.875%">l</tspan><tspan x="49.375%" class="c-2"></tspan><tspan x="50.000%">N</tspan><tspan x="50.625%">A</tspan><tspan x="51.250%">M</tspan><tspan x="51.875%">E</tspan><tspan x="69.375%">R</tspan><tspan x="70.000%">E</tspan><tspan x="70.625%">A</tspan><tspan x="71.250%">D</tspan><tspan x="71.875%">Y</tspan><tspan x="74.375%">S</tspan><tspan x="75.000%">T</tspan><tspan x="75.625%">A</tspan><tspan x="76.250%">T</tspan><tspan x="76.875%">U</tspan><tspan x="77.500%">S</tspan><tspan x="80.625%">R</tspan><tspan x="81.250%">E</tspan><tspan x="81.875%">S</tspan><tspan x="82.500%">T</tspan><tspan x="83.125%">A</tspan><tspan x="83.750%">R</tspan><tspan x="84.375%">T</tspan><tspan x="85.000%">S</tspan><tspan x="87.500%">A</tspan><tspan x="88.125%">G</tspan><tspan x="88.750%">E</tspan>
</tspan>
<tspan y="6.818%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="49.375%" class="c-2"></tspan><tspan x="50.000%">h</tspan><tspan x="50.625%">e</tspan><tspan x="51.250%">l</tspan><tspan x="51.875%">l</tspan><tspan x="52.500%">o</tspan><tspan x="53.125%">-</tspan><tspan x="53.750%">d</tspan><tspan x="54.375%">e</tspan><tspan x="55.000%">p</tspan><tspan x="55.625%">l</tspan><tspan x="56.250%">o</tspan><tspan x="56.875%">y</tspan><tspan x="57.500%">-</tspan><tspan x="58.125%">d</tspan><tspan x="58.750%">d</tspan><tspan x="59.375%">5</tspan><tspan x="60.000%">9</tspan><tspan x="60.625%">b</tspan><tspan x="61.250%">8</tspan><tspan x="61.875%">9</tspan><tspan x="62.500%">5</tspan><tspan x="63.125%">6</tspan><tspan x="63.750%">-</tspan><tspan x="64.375%">h</tspan><tspan x="65.000%">x</tspan><tspan x="65.625%">c</tspan><tspan x="66.250%">j</tspan><tspan x="66.875%">v</tspan><tspan x="69.375%">1</tspan><tspan x="70.000%">/</tspan><tspan x="70.625%">1</tspan><tspan x="74.375%">R</tspan><tspan x="75.000%">u</tspan><tspan x="75.625%">n</tspan><tspan x="76.250%">n</tspan><tspan x="76.875%">i</tspan><tspan x="77.500%">n</tspan><tspan x="78.125%">g</tspan><tspan x="80.625%">0</tspan><tspan x="87.500%">1</tspan><tspan x="88.125%">9</tspan><tspan x="88.750%">m</tspan>
</tspan>
<tspan y="9.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="11.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="13.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="15.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="18.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="20.455%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="22.727%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="25.000%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="27.273%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="29.545%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="31.818%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="34.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="36.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="38.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="40.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="43.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="45.455%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="47.727%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%"></tspan><tspan x="50.625%"></tspan><tspan x="51.250%"></tspan><tspan x="51.875%"></tspan><tspan x="52.500%"></tspan><tspan x="53.125%"></tspan><tspan x="53.750%"></tspan><tspan x="54.375%"></tspan><tspan x="55.000%"></tspan><tspan x="55.625%"></tspan><tspan x="56.250%"></tspan><tspan x="56.875%"></tspan><tspan x="57.500%"></tspan><tspan x="58.125%"></tspan><tspan x="58.750%"></tspan><tspan x="59.375%"></tspan><tspan x="60.000%"></tspan><tspan x="60.625%"></tspan><tspan x="61.250%"></tspan><tspan x="61.875%"></tspan><tspan x="62.500%"></tspan><tspan x="63.125%"></tspan><tspan x="63.750%"></tspan><tspan x="64.375%"></tspan><tspan x="65.000%"></tspan><tspan x="65.625%"></tspan><tspan x="66.250%"></tspan><tspan x="66.875%"></tspan><tspan x="67.500%"></tspan><tspan x="68.125%"></tspan><tspan x="68.750%"></tspan><tspan x="69.375%"></tspan><tspan x="70.000%"></tspan><tspan x="70.625%"></tspan><tspan x="71.250%"></tspan><tspan x="71.875%"></tspan><tspan x="72.500%"></tspan><tspan x="73.125%"></tspan><tspan x="73.750%"></tspan><tspan x="74.375%"></tspan><tspan x="75.000%"></tspan><tspan x="75.625%"></tspan><tspan x="76.250%"></tspan><tspan x="76.875%"></tspan><tspan x="77.500%"></tspan><tspan x="78.125%"></tspan><tspan x="78.750%"></tspan><tspan x="79.375%"></tspan><tspan x="80.000%"></tspan><tspan x="80.625%"></tspan><tspan x="81.250%"></tspan><tspan x="81.875%"></tspan><tspan x="82.500%"></tspan><tspan x="83.125%"></tspan><tspan x="83.750%"></tspan><tspan x="84.375%"></tspan><tspan x="85.000%"></tspan><tspan x="85.625%"></tspan><tspan x="86.250%"></tspan><tspan x="86.875%"></tspan><tspan x="87.500%"></tspan><tspan x="88.125%"></tspan><tspan x="88.750%"></tspan><tspan x="89.375%"></tspan><tspan x="90.000%"></tspan><tspan x="90.625%"></tspan><tspan x="91.250%"></tspan><tspan x="91.875%"></tspan><tspan x="92.500%"></tspan><tspan x="93.125%"></tspan><tspan x="93.750%"></tspan><tspan x="94.375%"></tspan><tspan x="95.000%"></tspan><tspan x="95.625%"></tspan><tspan x="96.250%"></tspan><tspan x="96.875%"></tspan><tspan x="97.500%"></tspan><tspan x="98.125%"></tspan>
</tspan>
<tspan y="50.000%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="52.273%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="54.545%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="56.818%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="59.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="61.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="63.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="65.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="68.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="70.455%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="72.727%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="75.000%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="77.273%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="79.545%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="81.818%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="84.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="86.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="88.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="90.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="93.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="95.455%">
<tspan dy="1em" x="0.000%" class="c-0">[</tspan><tspan x="0.625%" class="c-0">d</tspan><tspan x="1.250%" class="c-0">e</tspan><tspan x="1.875%" class="c-0">m</tspan><tspan x="2.500%" class="c-0">o</tspan><tspan x="3.125%" class="c-0">]</tspan><tspan x="4.375%" class="c-0">0</tspan><tspan x="5.000%" class="c-0">:</tspan><tspan x="5.625%" class="c-0">s</tspan><tspan x="6.250%" class="c-0">s</tspan><tspan x="6.875%" class="c-0">h</tspan><tspan x="7.500%" class="c-0">*</tspan><tspan x="75.625%" class="c-0">&quot;</tspan><tspan x="76.250%" class="c-0">r</tspan><tspan x="76.875%" class="c-0">a</tspan><tspan x="77.500%" class="c-0">h</tspan><tspan x="78.125%" class="c-0">u</tspan><tspan x="78.750%" class="c-0">l</tspan><tspan x="79.375%" class="c-0">-</tspan><tspan x="80.000%" class="c-0">T</tspan><tspan x="80.625%" class="c-0">h</tspan><tspan x="81.250%" class="c-0">i</tspan><tspan x="81.875%" class="c-0">n</tspan><tspan x="82.500%" class="c-0">k</tspan><tspan x="83.125%" class="c-0">P</tspan><tspan x="83.750%" class="c-0">a</tspan><tspan x="84.375%" class="c-0">d</tspan><tspan x="85.000%" class="c-0">-</tspan><tspan x="85.625%" class="c-0">E</tspan><tspan x="86.250%" class="c-0">4</tspan><tspan x="86.875%" class="c-0">9</tspan><tspan x="87.500%" class="c-0">0</tspan><tspan x="88.125%" class="c-0">&quot;</tspan><tspan x="89.375%" class="c-0">0</tspan><tspan x="90.000%" class="c-0">1</tspan><tspan x="90.625%" class="c-0">:</tspan><tspan x="91.250%" class="c-0">0</tspan><tspan x="91.875%" class="c-0">2</tspan><tspan x="93.125%" class="c-0">0</tspan><tspan x="93.750%" class="c-0">5</tspan><tspan x="94.375%" class="c-0">-</tspan><tspan x="95.000%" class="c-0">O</tspan><tspan x="95.625%" class="c-0">c</tspan><tspan x="96.250%" class="c-0">t</tspan><tspan x="96.875%" class="c-0">-</tspan><tspan x="97.500%" class="c-0">1</tspan><tspan x="98.125%" class="c-0">9</tspan>
</tspan>
</text>
<g transform="translate(-50 -50)">
<svg x="50%" y="50%" width="100" height="100">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 866.0254037844387 866.0254037844387">
<defs>
<mask id="small-triangle-mask">
<rect width="100%" height="100%" fill="white"/>
<polygon points="508.01270189221935 433.01270189221935, 208.0127018922194 259.8076211353316, 208.01270189221927 606.217782649107" fill="black"></polygon>
</mask>
</defs>
<polygon points="808.0127018922194 433.01270189221935, 58.01270189221947 -1.1368683772161603e-13, 58.01270189221913 866.0254037844386" mask="url(#small-triangle-mask)" fill="white"></polygon>
<polyline points="481.2177826491071 333.0127018922194, 134.80762113533166 533.0127018922194" stroke="white" stroke-width="90"></polyline>
</svg>
</svg>
</g>
</svg>
</svg>

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View File

@ -0,0 +1,71 @@
---
id: chaoshub
title: Using and contributing to ChaosHub
sidebar_label: ChaosHub
original_id: chaoshub
---
---
**Important links**
Chaos Hub is maintained at https://hub.litmuschaos.io
To contribute new chaos charts visit: https://github.com/litmuschaos/chaos-charts
**Introduction**
Litmus chaos hub is a place where the chaos engineering community members publish their chaos experiments. A set of related chaos experiments are bundled into a `Chaos Chart`. Chaos Charts are classified into the following categories.
- [Generic Chaos](#generic-chaos)
- [Application Chaos](#application-chaos)
- [Platform Chaos](#platform-chaos)
### Generic Chaos
Chaos actions that apply to generic Kubernetes resources are classified into this category. Following chaos experiments are supported under Generic Chaos Chart
| Experiment name | Description | User guide link |
| ---------------------- | ----------------------------------------------------- | --------------------------------------------------- |
| Container Kill | Kill one container in the application pod | [container-kill](container-kill.md) |
| Pod Delete | Fail the application pod | [pod-delete](pod-delete.md) |
| Pod Network Latency | Experiment to inject network latency to the POD | [pod-network-latency](pod-network-latency.md) |
| Pod Network Loss | Experiment to inject network loss to the POD | [pod-network-loss](pod-network-loss.md) |
| CPU Hog | Exhaust CPU resources on the Kubernetes Node | [cpu-hog](cpu-hog.md) |
| Disk Fill | Fillup Ephemeral Storage of a Resource | [disk-fill](disk-fill.md) |
| Disk Loss | External disk loss from the node | [disk-loss](disk-loss.md) |
| Node Drain | Drain the node where application pod is scheduled | [node-drain](node-drain.md) |
| Pod CPU Hog | Consume CPU resources on the application container | [pod-cpu-hog](pod-cpu-hog.md) |
| Pod Network Corruption | Inject Network Packet Corruption Into Application Pod | [pod-network-corruption](pod-network-corruption.md) |
### Application Chaos
While Chaos Experiments under the Generic category offer the ability to induce chaos into Kubernetes resources, it is difficult to analyze and conclude if the chaos induced found a weakness in a given application. The application specific chaos experiments are built with some checks on _pre-conditions_ and some expected outcomes after the chaos injection. The result of the chaos experiment is determined by matching the outcome with the expected outcome.
<div class="danger">
<strong>NOTE:</strong> If the result of the chaos experiment is `pass`, it means that the application is resilient to that chaos.
</div>
#### Benefits of contributing an application chaos experiment
Application developers write negative tests in their CI pipelines to test the resiliency of the applications. These negative can be converted into Litmus Chaos Experiments and contributed to ChaosHub, so that the users of the application can use them in staging/pre-production/production environments to check the resilience. Application environments vary considerably from where they are tested (CI pipelines) to where they are deployed (Production). Hence, running the same chaos tests in the user's environment will help determine the weaknesses of the deployment and fixing such weaknesses leads to increased resilience.
Following Application Chaos experiments are available on ChaosHub
| Application | Description | Chaos Experiments |
| ----------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OpenEBS | Container Attached Storage for Kubernetes | [openebs-pool-pod-failure](openebs-pool-pod-failure.md)<br/>[openebs-pool-container-failure](openebs-pool-container-failure.md)<br/>[openebs-target-pod-failure](openebs-target-pod-failure.md)<br/>[openebs-target-container-failure](openebs-target-container-failure.md)<br/>[openebs-target-network-delay](openebs-target-network-delay.md)<br/>[openebs-target-network-loss](openebs-target-network-loss.md) |
| Kafka | Open-source stream processing software | [kafka-broker-pod-failure](kafka-broker-pod-failure.md)<br/>[kafka-broker-disk-failure](kafka-broker-disk-failure.md)<br/> |
| CoreDns | CoreDNS is a fast and flexible DNS server that chains plugins | [coredns-pod-delete](coredns-pod-delete.md) |
### Platform Chaos
Chaos experiments that inject chaos into the platform resources of Kubernetes are classified into this category. Management of platform resources vary significantly from each other, Chaos Charts may be maintained separately for each platform (For example, AWS, GCP, Azure, etc)
Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -0,0 +1,24 @@
---
id: community
title: Join Litmus Community
sidebar_label: Community
original_id: community
---
---
Litmus community is a subset of the larger Kubernetes community. Have a question? Want to stay in touch with the happenings on Chaos Engineering on Kubernetes? Join `#litmus` channel on Kubernetes Slack.
<br/><br/>
<a href="https://kubernetes.slack.com/messages/CNXNB0ZTN" target="_blank"><img src={require("./assets/join-community.png").default} width="400"/></a>
<br/>
<br/>
<hr/>
<br/>
<br/>

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.0.0-container-kill id: container-kill
title: Container Kill Experiment Details title: Container Kill Experiment Details
sidebar_label: Container Kill sidebar_label: Container Kill
original_id: container-kill original_id: container-kill

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.0.0-coredns-pod-delete id: coredns-pod-delete
title: CoreDNS Pod Delete Experiment Details title: CoreDNS Pod Delete Experiment Details
sidebar_label: CoreDNS Pod Delete sidebar_label: CoreDNS Pod Delete
original_id: coredns-pod-delete original_id: coredns-pod-delete

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.0.0-cpu-hog id: cpu-hog
title: CPU Hog Experiment Details title: CPU Hog Experiment Details
sidebar_label: CPU Hog sidebar_label: CPU Hog
original_id: cpu-hog original_id: cpu-hog

View File

@ -1,11 +1,11 @@
--- ---
id: version-1.0.0-devguide id: devguide
title: Developer Guide for Chaos Charts title: Developer Guide for Chaos Charts
sidebar_label: Developer Guide sidebar_label: Developer Guide
original_id: devguide original_id: devguide
--- ---
------ ---
This page serves as a guide to develop either a new Chaos Chart or a new experiment in a Chaos Chart which are published at <a href="https://hub.litmuschaos.io" target="_blank">ChaosHub</a>. This page serves as a guide to develop either a new Chaos Chart or a new experiment in a Chaos Chart which are published at <a href="https://hub.litmuschaos.io" target="_blank">ChaosHub</a>.
@ -21,7 +21,7 @@ The experiments & chaos libraries are typically written in Ansible, though not m
the experiments can be executed in a container & can read/update the litmuschaos custom resources. For example, the experiments can be executed in a container & can read/update the litmuschaos custom resources. For example,
if you are writing an experiment in Go, use this [clientset](https://github.com/litmuschaos/chaos-operator/tree/master/pkg/client) if you are writing an experiment in Go, use this [clientset](https://github.com/litmuschaos/chaos-operator/tree/master/pkg/client)
<hr> <hr/>
## Glossary ## Glossary
@ -33,7 +33,6 @@ A chaos chart also consists of a `package` manifest that is an index of availabl
Here is an example of the [ChartServiceVersion](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/generic.chartserviceversion.yaml) & [package](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/generic.package.yaml) manifests of the generic chaos chart. Here is an example of the [ChartServiceVersion](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/generic.chartserviceversion.yaml) & [package](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/generic.package.yaml) manifests of the generic chaos chart.
### Chaos Experiment ### Chaos Experiment
ChaosExperiment is a CRD that specifies the nature of a Chaos Experiment. The YAML file that constitutes a Chaos Experiment CR ChaosExperiment is a CRD that specifies the nature of a Chaos Experiment. The YAML file that constitutes a Chaos Experiment CR
@ -53,17 +52,16 @@ Here is an example of the litmus book for the [pod-delete](https://github.com/li
The `ansible` business logic inside Litmus books can make use of readily available chaos functions. The chaos functions are available as `task-files` which are wrapped in one of the chaos libraries. See [plugins](plugins.md) for more details. The `ansible` business logic inside Litmus books can make use of readily available chaos functions. The chaos functions are available as `task-files` which are wrapped in one of the chaos libraries. See [plugins](plugins.md) for more details.
<hr> <hr/>
## Developing a Chaos Experiment ## Developing a Chaos Experiment
A detailed how-to guide on developing chaos experiments is available [here](https://github.com/litmuschaos/litmus-ansible/tree/master/contribute/developer_guide) A detailed how-to guide on developing chaos experiments is available [here](https://github.com/litmuschaos/litmus-ansible/tree/master/contribute/developer_guide)
<br> <br/>
<hr> <hr/>
<br> <br/>
<br>
<br/>

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.0.0-disk-fill id: disk-fill
title: Disk Fill Experiment Details title: Disk Fill Experiment Details
sidebar_label: Disk Fill sidebar_label: Disk Fill
original_id: disk-fill original_id: disk-fill
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -54,7 +55,7 @@ spec:
ephemeral-storage: "2Gi" ephemeral-storage: "2Gi"
limits: limits:
ephemeral-storage: "4Gi" ephemeral-storage: "4Gi"
``` ```
## Entry-Criteria ## Entry-Criteria
@ -106,9 +107,18 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch"] - apiGroups: ["", "apps", "litmuschaos.io", "batch"]
resources: ["pods","jobs","pods/exec","daemonsets","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"pods/exec",
"daemonsets",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -121,10 +131,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -184,12 +193,12 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be app/infra # It can be app/infra
chaosType: 'infra' chaosType: "infra"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
appinfo: appinfo:
appns: default appns: default
applabel: 'app=nginx' applabel: "app=nginx"
appkind: deployment appkind: deployment
chaosServiceAccount: nginx-sa chaosServiceAccount: nginx-sa
monitoring: false monitoring: false

View File

@ -1,10 +1,12 @@
--- ---
id: version-1.0.0-disk-loss id: disk-loss
title: Disk Loss Experiment Details title: Disk Loss Experiment Details
sidebar_label: Disk Loss sidebar_label: Disk Loss
original_id: disk-loss original_id: disk-loss
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
<table> <table>
@ -21,6 +23,7 @@ original_id: disk-loss
</table> </table>
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml)
- Ensure that the `disk-loss` experiment resource is available in the cluster by `kubectl get chaosexperiments` in the desired namespace. If not, install from <a href="https://hub.litmuschaos.io/charts/generic/experiments/disk-loss" target="_blank">here</a> - Ensure that the `disk-loss` experiment resource is available in the cluster by `kubectl get chaosexperiments` in the desired namespace. If not, install from <a href="https://hub.litmuschaos.io/charts/generic/experiments/disk-loss" target="_blank">here</a>
- Ensure to create a Kubernetes secret having the gcloud/aws access configuration(key) in the namespace of `CHAOS_NAMESPACE`. - Ensure to create a Kubernetes secret having the gcloud/aws access configuration(key) in the namespace of `CHAOS_NAMESPACE`.
@ -87,9 +90,17 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","secrets","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"secrets",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -102,10 +113,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -267,17 +277,21 @@ spec:
- name: CHAOS_SERVICE_ACCOUNT - name: CHAOS_SERVICE_ACCOUNT
value: '' value: ''
``` ```
## Create the ChaosEngine Resource ## Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos. - Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
`kubectl apply -f chaosengine.yml` `kubectl apply -f chaosengine.yml`
## Watch Chaos progress ## Watch Chaos progress
- Setting up a watch of the app which is using the disk in the Kubernetes Cluster - Setting up a watch of the app which is using the disk in the Kubernetes Cluster
`watch -n 1 kubectl get pods` `watch -n 1 kubectl get pods`
## Check Chaos Experiment Result ## Check Chaos Experiment Result
- Check whether the application is resilient to the disk loss, once the experiment (job) is completed. The ChaosResult resource name is derived like this: <ChaosEngine-Name>-<ChaosExperiment-Name>.
- Check whether the application is resilient to the disk loss, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-disk-loss -n <CHAOS_NAMESPACE>` `kubectl describe chaosresult nginx-chaos-disk-loss -n <CHAOS_NAMESPACE>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.0.0-getstarted id: getstarted
title: Getting Started with Litmus title: Getting Started with Litmus
sidebar_label: Introduction sidebar_label: Introduction
original_id: getstarted original_id: getstarted
--- ---
------
---
## Pre-requisites ## Pre-requisites
@ -28,9 +29,7 @@ Running chaos on your application involves the following steps:
[Observe chaos results](#observe-chaos-results) [Observe chaos results](#observe-chaos-results)
<hr> <hr/>
### Install Litmus ### Install Litmus
@ -48,14 +47,9 @@ The above command install all the CRDs, required service account configuration,
kubectl get pods -n litmus kubectl get pods -n litmus
``` ```
Expected output: Expected output:
>chaos-operator-ce-554d6c8f9f-slc8k 1/1 Running 0 6m41s
> chaos-operator-ce-554d6c8f9f-slc8k 1/1 Running 0 6m41s
- Verify if chaos CRDs are installed - Verify if chaos CRDs are installed
@ -73,7 +67,7 @@ Expected output:
- Verify if the chaos api resources are successfully created in the desired (application) namespace. - Verify if the chaos api resources are successfully created in the desired (application) namespace.
*Note*: Sometimes, it can take a few seconds for the resources to be available post the CRD installation _Note_: Sometimes, it can take a few seconds for the resources to be available post the CRD installation
``` ```
kubectl api-resources | grep chaos kubectl api-resources | grep chaos
@ -87,8 +81,6 @@ Expected output:
> >
> chaosresults litmuschaos.io true ChaosResult > chaosresults litmuschaos.io true ChaosResult
<div class="danger"> <div class="danger">
<strong>NOTE</strong>: <strong>NOTE</strong>:
In this guide, we shall describe the steps to inject chaos on an application In this guide, we shall describe the steps to inject chaos on an application
@ -97,7 +89,7 @@ deployed in the default namespace.
### Install Chaos Experiments ### Install Chaos Experiments
Chaos experiments contain the actual chaos details. These experiments are installed on your cluster as Kubernetes CRs (Custom Resources). The Chaos Experiments are grouped as Chaos Charts and are published on <a href=" https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>. Chaos experiments contain the actual chaos details. These experiments are installed on your cluster as Kubernetes CRs (Custom Resources). The Chaos Experiments are grouped as Chaos Charts and are published on <a href="https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>.
The generic chaos experiments such as `pod-kill`, `container-kill`,` network-delay` are available under Generic Chaos Chart. This is the first chart you install. You can later install application specific chaos charts for running application oriented chaos. The generic chaos experiments such as `pod-kill`, `container-kill`,` network-delay` are available under Generic Chaos Chart. This is the first chart you install. You can later install application specific chaos charts for running application oriented chaos.
@ -132,9 +124,18 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","jobs","daemonsets","pods/exec","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"daemonsets",
"pods/exec",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -148,7 +149,7 @@ roleRef:
kind: Role kind: Role
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
@ -174,28 +175,28 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
components: components:
runner: runner:
image: 'litmuschaos/chaos-executor:1.0.0' image: "litmuschaos/chaos-executor:1.0.0"
type: 'go' type: "go"
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
monitoring: false monitoring: false
appinfo: appinfo:
appns: 'default' appns: "default"
# FYI, To see app label, apply kubectl get pods --show-labels # FYI, To see app label, apply kubectl get pods --show-labels
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: nginx-sa chaosServiceAccount: nginx-sa
experiments: experiments:
- name: container-kill - name: container-kill
spec: spec:
components: components:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
``` ```
### Override Default Chaos Experiments Variables ### Override Default Chaos Experiments Variables
@ -212,11 +213,8 @@ experiments:
value: nginx value: nginx
``` ```
### Run Chaos ### Run Chaos
```console ```console
kubectl apply -f chaosengine.yaml kubectl apply -f chaosengine.yaml
``` ```
@ -227,9 +225,9 @@ kubectl apply -f chaosengine.yaml
### Observe Chaos results ### Observe Chaos results
Describe the ChaosResult CR to know the status of each experiment. The ```spec.verdict``` is set to Running when the experiment is in progress, eventually changing to either pass or fail. Describe the ChaosResult CR to know the status of each experiment. The `spec.verdict` is set to Running when the experiment is in progress, eventually changing to either pass or fail.
<strong> NOTE:</strong> ChaosResult CR name will be `<chaos-engine-name>-<chaos-experiment-name>` <strong> NOTE:</strong> ChaosResult CR name will be `{"<chaos-engine-name>-<chaos-experiment-name>"}`
```console ```console
kubectl describe chaosresult engine-nginx-container-kill kubectl describe chaosresult engine-nginx-container-kill

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.0.0-kafka-broker-disk-failure id: kafka-broker-disk-failure
title: Kafka Broker Disk Failure Experiment Details title: Kafka Broker Disk Failure Experiment Details
sidebar_label: Broker Disk Failure sidebar_label: Broker Disk Failure
original_id: kafka-broker-disk-failure original_id: kafka-broker-disk-failure
@ -7,9 +7,9 @@ original_id: kafka-broker-disk-failure
## Experiment Metadata ## Experiment Metadata
| Type | Description | Kafka Distribution | Tested K8s Platform | Type | Description | Kafka Distribution | Tested K8s Platform |
| ----- | -------------------------------|----------------------|--------------------- | ----- | ------------------------------ | --------------------- | ------------------- |
| Kafka | Fail kafka broker disk/storage | Confluent, Kudo-Kafka| GKE | Kafka | Fail kafka broker disk/storage | Confluent, Kudo-Kafka | GKE |
## Prerequisites ## Prerequisites
@ -78,9 +78,19 @@ metadata:
labels: labels:
name: kafka-sa name: kafka-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","jobs","pod/exec","statefulsets","secrets","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","delete"] [
"pods",
"jobs",
"pod/exec",
"statefulsets",
"secrets",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -93,10 +103,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: kafka-role name: kafka-role
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: kafka-sa name: kafka-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -106,8 +115,8 @@ subjects:
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description |Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|---------------------------------------------------------| | ------------------------ | ---------------------------------------------------------------------------- | --------- | -------------------------------------------------------- |
| KAFKA_NAMESPACE | Namespace of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.appns` | | KAFKA_NAMESPACE | Namespace of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.appns` |
| KAFKA_LABEL | Unique label of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.applabel` | | KAFKA_LABEL | Unique label of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.applabel` |
| KAFKA_SERVICE | Headless service of the Kafka Statefulset | Mandatory | | | KAFKA_SERVICE | Headless service of the Kafka Statefulset | Mandatory | |
@ -121,12 +130,12 @@ subjects:
| DISK_NAME | GCloud Disk attached to the Cluster Node where specified broker is scheduled | Mandatory | | | DISK_NAME | GCloud Disk attached to the Cluster Node where specified broker is scheduled | Mandatory | |
| ZONE_NAME | Zone in which the Disks/Cluster are created | Mandatory | | | ZONE_NAME | Zone in which the Disks/Cluster are created | Mandatory | |
| KAFKA_BROKER | Kafka broker pod which is using the specified disk | Mandatory | Experiment verifies this by mapping node details | | KAFKA_BROKER | Kafka broker pod which is using the specified disk | Mandatory | Experiment verifies this by mapping node details |
| KAFKA_KIND | Kafka deployment type | Optional | Same as `spec.appinfo.appkind`. Supported: `statefulset`| | KAFKA_KIND | Kafka deployment type | Optional | Same as `spec.appinfo.appkind`. Supported: `statefulset` |
| KAFKA_LIVENESS_STREAM | Kafka liveness message stream | Optional | Supported: `enabled`, `disabled` | | KAFKA_LIVENESS_STREAM | Kafka liveness message stream | Optional | Supported: `enabled`, `disabled` |
| KAFKA_LIVENESS_IMAGE | Image used for liveness message stream | Optional | Image as `<registry_url>/<repository>/<image>:<tag>` | | KAFKA_LIVENESS_IMAGE | Image used for liveness message stream | Optional | Image as `<registry_url>/<repository>/<image>:<tag>` |
| KAFKA_REPLICATION_FACTOR| Number of partition replicas for liveness topic partition | Optional | Necessary if KAFKA_LIVENESS_STREAM is `enabled` | | KAFKA_REPLICATION_FACTOR | Number of partition replicas for liveness topic partition | Optional | Necessary if KAFKA_LIVENESS_STREAM is `enabled` |
| KAFKA_INSTANCE_NAME | Name of the Kafka chroot path on zookeeper | Optional | Necessary if installation involves use of such path | | KAFKA_INSTANCE_NAME | Name of the Kafka chroot path on zookeeper | Optional | Necessary if installation involves use of such path |
| KAFKA_CONSUMER_TIMEOUT| Kafka consumer message timeout, post which it terminates | Optional | Defaults to 30000ms | | KAFKA_CONSUMER_TIMEOUT | Kafka consumer message timeout, post which it terminates | Optional | Defaults to 30000ms |
| TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 15s | | TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 15s |
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
@ -139,12 +148,12 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
appinfo: appinfo:
appns: default appns: default
applabel: 'app=cp-kafka' applabel: "app=cp-kafka"
appkind: statefulset appkind: statefulset
chaosServiceAccount: kafka-sa chaosServiceAccount: kafka-sa
monitoring: false monitoring: false
@ -160,66 +169,66 @@ spec:
components: components:
# choose based on available kafka broker replicas # choose based on available kafka broker replicas
- name: KAFKA_REPLICATION_FACTOR - name: KAFKA_REPLICATION_FACTOR
value: '3' value: "3"
# get via "kubectl get pods --show-labels -n <kafka-namespace>" # get via "kubectl get pods --show-labels -n <kafka-namespace>"
- name: KAFKA_LABEL - name: KAFKA_LABEL
value: 'app=cp-kafka' value: "app=cp-kafka"
- name: KAFKA_NAMESPACE - name: KAFKA_NAMESPACE
value: 'default' value: "default"
# get via "kubectl get svc -n <kafka-namespace>" # get via "kubectl get svc -n <kafka-namespace>"
- name: KAFKA_SERVICE - name: KAFKA_SERVICE
value: 'kafka-cp-kafka-headless' value: "kafka-cp-kafka-headless"
# get via "kubectl get svc -n <kafka-namespace> # get via "kubectl get svc -n <kafka-namespace>
- name: KAFKA_PORT - name: KAFKA_PORT
value: '9092' value: "9092"
# in milliseconds # in milliseconds
- name: KAFKA_CONSUMER_TIMEOUT - name: KAFKA_CONSUMER_TIMEOUT
value: '70000' value: "70000"
# ensure to set the instance name if using KUDO operator # ensure to set the instance name if using KUDO operator
- name: KAFKA_INSTANCE_NAME - name: KAFKA_INSTANCE_NAME
value: '' value: ""
- name: ZOOKEEPER_NAMESPACE - name: ZOOKEEPER_NAMESPACE
value: 'default' value: "default"
# get via "kubectl get pods --show-labels -n <zk-namespace>" # get via "kubectl get pods --show-labels -n <zk-namespace>"
- name: ZOOKEEPER_LABEL - name: ZOOKEEPER_LABEL
value: 'app=cp-zookeeper' value: "app=cp-zookeeper"
# get via "kubectl get svc -n <zk-namespace> # get via "kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_SERVICE - name: ZOOKEEPER_SERVICE
value: 'kafka-cp-zookeeper-headless' value: "kafka-cp-zookeeper-headless"
# get via "kubectl get svc -n <zk-namespace> # get via "kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_PORT - name: ZOOKEEPER_PORT
value: '2181' value: "2181"
# get from google cloud console or "gcloud projects list" # get from google cloud console or "gcloud projects list"
- name: PROJECT_ID - name: PROJECT_ID
value: 'argon-tractor-237811' value: "argon-tractor-237811"
# attached to (in use by) node where 'kafka-0' is scheduled # attached to (in use by) node where 'kafka-0' is scheduled
- name: DISK_NAME - name: DISK_NAME
value: 'disk-1' value: "disk-1"
- name: ZONE_NAME - name: ZONE_NAME
value: 'us-central1-a' value: "us-central1-a"
# Uses "disk-1" attached to the node on which it is scheduled # Uses "disk-1" attached to the node on which it is scheduled
- name: KAFKA_BROKER - name: KAFKA_BROKER
value: 'kafka-0' value: "kafka-0"
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' value: "60"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos. - Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
@ -254,4 +263,4 @@ spec:
- TODO: A sample recording of this experiment execution is provided here. - TODO: A sample recording of this experiment execution is provided here.
------ ---

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.0.0-kafka-broker-pod-failure id: kafka-broker-pod-failure
title: Kafka Broker Pod Failure Experiment Details title: Kafka Broker Pod Failure Experiment Details
sidebar_label: Broker Pod Failure sidebar_label: Broker Pod Failure
original_id: kafka-broker-pod-failure original_id: kafka-broker-pod-failure
@ -7,9 +7,9 @@ original_id: kafka-broker-pod-failure
## Experiment Metadata ## Experiment Metadata
| Type | Description | Kafka Distribution | Tested K8s Platform | Type | Description | Kafka Distribution | Tested K8s Platform |
| ----- | -------------------------------|----------------------|--------------------- | ----- | ----------------------------- | --------------------- | ------------------- |
| Kafka | Fail kafka leader-broker pods | Confluent, Kudo-Kafka| AWS Konvoy, GKE | Kafka | Fail kafka leader-broker pods | Confluent, Kudo-Kafka | AWS Konvoy, GKE |
## Prerequisites ## Prerequisites
@ -26,7 +26,6 @@ original_id: kafka-broker-pod-failure
- Ensure that the kafka-broker-disk failure experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/kafka/experiments/kafka-broker-pod-failure) - Ensure that the kafka-broker-disk failure experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/kafka/experiments/kafka-broker-pod-failure)
## Entry Criteria ## Entry Criteria
- Kafka Cluster (comprising the Kafka-broker & Zookeeper Statefulsets) is healthy - Kafka Cluster (comprising the Kafka-broker & Zookeeper Statefulsets) is healthy
@ -77,12 +76,23 @@ metadata:
labels: labels:
name: kafka-sa name: kafka-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","deployments","jobs","pod/exec","statefulsets","configmaps","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","delete"] [
- apiGroups: [""] "pods",
"deployments",
"jobs",
"pod/exec",
"statefulsets",
"configmaps",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -95,10 +105,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: kafka-role name: kafka-role
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: kafka-sa name: kafka-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -108,8 +117,8 @@ subjects:
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description |Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|---------------------------------------------------------| | ------------------------ | --------------------------------------------------------- | --------- | -------------------------------------------------------- |
| KAFKA_NAMESPACE | Namespace of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.appns` | | KAFKA_NAMESPACE | Namespace of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.appns` |
| KAFKA_LABEL | Unique label of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.applabel` | | KAFKA_LABEL | Unique label of Kafka Brokers | Mandatory | May be same as value for `spec.appinfo.applabel` |
| KAFKA_SERVICE | Headless service of the Kafka Statefulset | Mandatory | | | KAFKA_SERVICE | Headless service of the Kafka Statefulset | Mandatory | |
@ -118,16 +127,16 @@ subjects:
| ZOOKEEPER_LABEL | Unique label of Zokeeper statefulset | Mandatory | | | ZOOKEEPER_LABEL | Unique label of Zokeeper statefulset | Mandatory | |
| ZOOKEEPER_SERVICE | Headless service of the Zookeeper Statefulset | Mandatory | | | ZOOKEEPER_SERVICE | Headless service of the Zookeeper Statefulset | Mandatory | |
| ZOOKEEPER_PORT | Port of the Zookeeper ClusterIP service | Mandatory | | | ZOOKEEPER_PORT | Port of the Zookeeper ClusterIP service | Mandatory | |
| KAFKA_KIND | Kafka deployment type | Optional | Same as `spec.appinfo.appkind`. Supported: `statefulset`| | KAFKA_KIND | Kafka deployment type | Optional | Same as `spec.appinfo.appkind`. Supported: `statefulset` |
| KAFKA_LIVENESS_STREAM | Kafka liveness message stream | Optional | Supported: `enabled`, `disabled` | | KAFKA_LIVENESS_STREAM | Kafka liveness message stream | Optional | Supported: `enabled`, `disabled` |
| KAFKA_LIVENESS_IMAGE | Image used for liveness message stream | Optional | Image as `<registry_url>/<repository>/<image>:<tag>` | | KAFKA_LIVENESS_IMAGE | Image used for liveness message stream | Optional | Image as `<registry_url>/<repository>/<image>:<tag>` |
| KAFKA_REPLICATION_FACTOR| Number of partition replicas for liveness topic partition | Optional | Necessary if KAFKA_LIVENESS_STREAM is `enabled` | | KAFKA_REPLICATION_FACTOR | Number of partition replicas for liveness topic partition | Optional | Necessary if KAFKA_LIVENESS_STREAM is `enabled` |
| KAFKA_INSTANCE_NAME | Name of the Kafka chroot path on zookeeper | Optional | Necessary if installation involves use of such path | | KAFKA_INSTANCE_NAME | Name of the Kafka chroot path on zookeeper | Optional | Necessary if installation involves use of such path |
| KAFKA_CONSUMER_TIMEOUT| Kafka consumer message timeout, post which it terminates | Optional | Defaults to 30000ms | | KAFKA_CONSUMER_TIMEOUT | Kafka consumer message timeout, post which it terminates | Optional | Defaults to 30000ms |
| KAFKA_BROKER | Kafka broker pod (name) to be deleted | Optional | A target selection mode (random/liveness-based/specific)| | KAFKA_BROKER | Kafka broker pod (name) to be deleted | Optional | A target selection mode (random/liveness-based/specific) |
| TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 15s | | TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 15s |
| CHAOS_INTERVAL | Time interval b/w two successive broker failures (sec) | Optional | Defaults to 5s | | CHAOS_INTERVAL | Time interval b/w two successive broker failures (sec) | Optional | Defaults to 5s |
| LIB | The chaos lib used to inject the chaos | Optional | Defaults to `litmus`. Supported: `litmus`, `powerfulseal| | LIB | The chaos lib used to inject the chaos | Optional | Defaults to `litmus`. Supported: `litmus`, `powerfulseal |
| CHAOS_SERVICE_ACCOUNT | Service account used by the powerfulseal deployment | Optional | Defaults to `default` on namespace `spec.appinfo.appns` | | CHAOS_SERVICE_ACCOUNT | Service account used by the powerfulseal deployment | Optional | Defaults to `default` on namespace `spec.appinfo.appns` |
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
@ -140,12 +149,12 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
appinfo: appinfo:
appns: default appns: default
applabel: 'app=cp-kafka' applabel: "app=cp-kafka"
appkind: statefulset appkind: statefulset
chaosServiceAccount: kafka-sa chaosServiceAccount: kafka-sa
monitoring: false monitoring: false
@ -161,53 +170,53 @@ spec:
components: components:
# choose based on available kafka broker replicas # choose based on available kafka broker replicas
- name: KAFKA_REPLICATION_FACTOR - name: KAFKA_REPLICATION_FACTOR
value: '3' value: "3"
# get via "kubectl get pods --show-labels -n <kafka-namespace>" # get via "kubectl get pods --show-labels -n <kafka-namespace>"
- name: KAFKA_LABEL - name: KAFKA_LABEL
value: 'app=cp-kafka' value: "app=cp-kafka"
- name: KAFKA_NAMESPACE - name: KAFKA_NAMESPACE
value: 'default' value: "default"
# get via "kubectl get svc -n <kafka-namespace>" # get via "kubectl get svc -n <kafka-namespace>"
- name: KAFKA_SERVICE - name: KAFKA_SERVICE
value: 'kafka-cp-kafka-headless' value: "kafka-cp-kafka-headless"
# get via "kubectl get svc -n <kafka-namespace> # get via "kubectl get svc -n <kafka-namespace>
- name: KAFKA_PORT - name: KAFKA_PORT
value: '9092' value: "9092"
# in milliseconds # in milliseconds
- name: KAFKA_CONSUMER_TIMEOUT - name: KAFKA_CONSUMER_TIMEOUT
value: '70000' value: "70000"
# ensure to set the instance name if using KUDO operator # ensure to set the instance name if using KUDO operator
- name: KAFKA_INSTANCE_NAME - name: KAFKA_INSTANCE_NAME
value: '' value: ""
- name: ZOOKEEPER_NAMESPACE - name: ZOOKEEPER_NAMESPACE
value: 'default' value: "default"
# get via "kubectl get pods --show-labels -n <zk-namespace>" # get via "kubectl get pods --show-labels -n <zk-namespace>"
- name: ZOOKEEPER_LABEL - name: ZOOKEEPER_LABEL
value: 'app=cp-zookeeper' value: "app=cp-zookeeper"
# get via "kubectl get svc -n <zk-namespace> # get via "kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_SERVICE - name: ZOOKEEPER_SERVICE
value: 'kafka-cp-zookeeper-headless' value: "kafka-cp-zookeeper-headless"
# get via "kubectl get svc -n <zk-namespace> # get via "kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_PORT - name: ZOOKEEPER_PORT
value: '2181' value: "2181"
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' value: "60"
# set chaos interval (in sec) as desired # set chaos interval (in sec) as desired
- name: CHAOS_INTERVAL - name: CHAOS_INTERVAL
value: '20' value: "20"
# pod failures without '--force' & default terminationGracePeriodSeconds # pod failures without '--force' & default terminationGracePeriodSeconds
- name: FORCE - name: FORCE
@ -237,4 +246,4 @@ spec:
- TODO: A sample recording of this experiment execution is provided here. - TODO: A sample recording of this experiment execution is provided here.
------ ---

View File

@ -1,16 +1,17 @@
--- ---
id: version-1.0.0-node-drain id: node-drain
title: Node Drain Experiment Details title: Node Drain Experiment Details
sidebar_label: Node Drain sidebar_label: Node Drain
original_id: node-drain original_id: node-drain
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| -------------------------------------------- | ------------------------------------------------------------------| | ------- | -------------------------------------------------- | -------------------------------------- |
| Generic | Drain the node where application pod is scheduled. | GKE, AWS, Packet(Kubeadm), Konvoy(AWS)| | Generic | Drain the node where application pod is scheduled. | GKE, AWS, Packet(Kubeadm), Konvoy(AWS) |
## Prerequisites ## Prerequisites
@ -34,7 +35,6 @@ original_id: node-drain
- This experiment drains the node where application pod is running and verifies if it is scheduled on another available node. - This experiment drains the node where application pod is running and verifies if it is scheduled on another available node.
- In the end of experiment it uncordons the specified node so that it can be utilised in future. - In the end of experiment it uncordons the specified node so that it can be utilised in future.
## Integrations ## Integrations
- Drain node can be effected using the chaos library: `litmus` - Drain node can be effected using the chaos library: `litmus`
@ -68,12 +68,21 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","extensions"] - apiGroups: ["", "litmuschaos.io", "batch", "extensions"]
resources: ["pods","jobs","chaosengines","daemonsets","pods/eviction","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"jobs",
"chaosengines",
"daemonsets",
"pods/eviction",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs: ["patch","get","list"] verbs: ["patch", "get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -86,7 +95,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
@ -130,12 +139,12 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be app/infra # It can be app/infra
chaosType: 'infra' chaosType: "infra"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
appinfo: appinfo:
appns: default appns: default
applabel: 'app=nginx' applabel: "app=nginx"
appkind: deployment appkind: deployment
chaosServiceAccount: nginx-sa chaosServiceAccount: nginx-sa
monitoring: false monitoring: false
@ -151,7 +160,7 @@ spec:
components: components:
# set node name # set node name
- name: APP_NODE - name: APP_NODE
value: 'node-1' value: "node-1"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-openebs-pool-container-failure id: openebs-pool-container-failure
title: OpenEBS Pool Container Failure Experiment Details title: OpenEBS Pool Container Failure Experiment Details
sidebar_label: Pool Container Failure sidebar_label: Pool Container Failure
original_id: openebs-pool-container-failure original_id: openebs-pool-container-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- |
| OpenEBS | Kill the cstor pool pod container and check if gets created again | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) | | OpenEBS | Kill the cstor pool pod container and check if gets created again | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) |
## Prerequisites ## Prerequisites
@ -31,6 +32,7 @@ original_id: openebs-pool-container-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -75,10 +77,10 @@ If the experiment tunable DATA_PERSISTENCE is set to 'enabled':
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | -------------------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------- | --- |
| APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC must use OpenEBS cStor storage class | | APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC must use OpenEBS cStor storage class |
| DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset`| | | DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset` | |
| LIB_IMAGE | The chaos library image used to inject the latency | Optional | Defaults to `gaiaadm/pumba:0.4.8`. Supported: `gaiaadm/pumba:0.4.8`| | LIB_IMAGE | The chaos library image used to inject the latency | Optional | Defaults to `gaiaadm/pumba:0.4.8`. Supported: `gaiaadm/pumba:0.4.8` |
| TOTAL_CHAOS_DURATION | Amount of soak time for I/O post pod kill | Optional | Defaults to 600 seconds | | TOTAL_CHAOS_DURATION | Amount of soak time for I/O post pod kill | Optional | Defaults to 600 seconds |
| DATA_PERSISTENCE | Flag to perform data consistency checks on the application | Optional | Default value is disabled (empty/unset). Set to `enabled` to perform data checks. Ensure configmap with app details are created | | DATA_PERSISTENCE | Flag to perform data consistency checks on the application | Optional | Default value is disabled (empty/unset). Set to `enabled` to perform data checks. Ensure configmap with app details are created |
@ -93,7 +95,7 @@ metadata:
spec: spec:
appinfo: appinfo:
appns: default appns: default
applabel: 'app=percona' applabel: "app=percona"
appkind: deployment appkind: deployment
chaosServiceAccount: percona-sa chaosServiceAccount: percona-sa
monitoring: false monitoring: false
@ -103,7 +105,7 @@ spec:
spec: spec:
components: components:
- name: APP_PVC - name: APP_PVC
value: 'pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d' value: "pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: deployment value: deployment
``` ```

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-openebs-pool-pod-failure id: openebs-pool-pod-failure
title: OpenEBS Pool Pod Failure Experiment Details title: OpenEBS Pool Pod Failure Experiment Details
sidebar_label: Pool Pod Failure sidebar_label: Pool Pod Failure
original_id: openebs-pool-pod-failure original_id: openebs-pool-pod-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ------------------------------------------------------- | ----------------------------------------------------------------- |
| OpenEBS | Kill the cstor pool pod and check if gets created again | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) | | OpenEBS | Kill the cstor pool pod and check if gets created again | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) |
## Prerequisites ## Prerequisites
@ -31,6 +32,7 @@ original_id: openebs-pool-pod-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -73,9 +75,9 @@ If the experiment tunable DATA_PERSISTENCE is set to 'enabled':
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | -------------------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------- | --- |
| APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC must use OpenEBS cStor storage class | | APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC must use OpenEBS cStor storage class |
| DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset`| | | DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset` | |
| TOTAL_CHAOS_DURATION | Amount of soak time for I/O post pod kill | Optional | Defaults to 600 seconds | | TOTAL_CHAOS_DURATION | Amount of soak time for I/O post pod kill | Optional | Defaults to 600 seconds |
| DATA_PERSISTENCE | Flag to perform data consistency checks on the application | Optional | Default value is disabled (empty/unset). Set to `enabled` to perform data checks. Ensure configmap with app details are created | | DATA_PERSISTENCE | Flag to perform data consistency checks on the application | Optional | Default value is disabled (empty/unset). Set to `enabled` to perform data checks. Ensure configmap with app details are created |
@ -90,7 +92,7 @@ metadata:
spec: spec:
appinfo: appinfo:
appns: default appns: default
applabel: 'app=percona' applabel: "app=percona"
appkind: deployment appkind: deployment
chaosServiceAccount: percona-sa chaosServiceAccount: percona-sa
monitoring: false monitoring: false
@ -100,9 +102,9 @@ spec:
spec: spec:
components: components:
- name: FORCE - name: FORCE
value: 'true' value: "true"
- name: APP_PVC - name: APP_PVC
value: 'pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d' value: "pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: deployment value: deployment
``` ```

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-openebs-target-container-failure id: openebs-target-container-failure
title: OpenEBS Target Failure Experiment Details title: OpenEBS Target Failure Experiment Details
sidebar_label: Target Container Failure sidebar_label: Target Container Failure
original_id: openebs-target-container-failure original_id: openebs-target-container-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ----------------------------------------------- | ----------------------------------------------------------------- |
| OpenEBS | Kill the cStor target/Jiva controller container | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) | | OpenEBS | Kill the cStor target/Jiva controller container | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) |
## Prerequisites ## Prerequisites
@ -31,6 +32,7 @@ original_id: openebs-target-container-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -76,9 +78,9 @@ If the experiment tunable DATA_PERSISTENCE is set to 'enabled':
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | -------------------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------- |
| APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC may use either OpenEBS Jiva/cStor storage class | | APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC may use either OpenEBS Jiva/cStor storage class |
| DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset`| | DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset` |
| CONTAINER_RUNTIME | The container runtime used in the Kubernetes Cluster | Optional | Defaults to `docker`. Supported: `docker`, `containerd` | | CONTAINER_RUNTIME | The container runtime used in the Kubernetes Cluster | Optional | Defaults to `docker`. Supported: `docker`, `containerd` |
| LIB_IMAGE | The chaos library image used to run the kill command | Optional | Defaults to `gaiaadm/pumba:0.4.8`. Supported: `{docker : gaiaadm/pumba:0.4.8, containerd: gprasath/crictl:ci}` | | LIB_IMAGE | The chaos library image used to run the kill command | Optional | Defaults to `gaiaadm/pumba:0.4.8`. Supported: `{docker : gaiaadm/pumba:0.4.8, containerd: gprasath/crictl:ci}` |
| TARGET_CONTAINER | The container to be killed in the storage controller pod | Optional | Defaults to `cstor-volume-mgmt` | | TARGET_CONTAINER | The container to be killed in the storage controller pod | Optional | Defaults to `cstor-volume-mgmt` |
@ -96,7 +98,7 @@ metadata:
spec: spec:
appinfo: appinfo:
appns: default appns: default
applabel: 'app=percona' applabel: "app=percona"
appkind: deployment appkind: deployment
chaosServiceAccount: percona-sa chaosServiceAccount: percona-sa
monitoring: false monitoring: false
@ -106,9 +108,9 @@ spec:
spec: spec:
components: components:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'cstor-istgt' value: "cstor-istgt"
- name: APP_PVC - name: APP_PVC
value: 'pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d' value: "pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: deployment value: deployment
``` ```
@ -135,4 +137,3 @@ spec:
## OpenEBS Target Container Failure Demo [TODO] ## OpenEBS Target Container Failure Demo [TODO]
- A sample recording of this experiment execution is provided here. - A sample recording of this experiment execution is provided here.

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-openebs-target-network-delay id: openebs-target-network-delay
title: OpenEBS Target Network Latency Experiment Details title: OpenEBS Target Network Latency Experiment Details
sidebar_label: Target Network Latency sidebar_label: Target Network Latency
original_id: openebs-target-network-delay original_id: openebs-target-network-delay
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | -------------------------------------------------------------- | ------------------------------------------------------- |
| OpenEBS | Induce latency into the cStor target/Jiva controller container | GKE, Konvoy(AWS), Packet(Kubeadm), OpenShift(Baremetal) | | OpenEBS | Induce latency into the cStor target/Jiva controller container | GKE, Konvoy(AWS), Packet(Kubeadm), OpenShift(Baremetal) |
## Prerequisites ## Prerequisites
@ -32,6 +33,7 @@ original_id: openebs-target-network-delay
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -76,11 +78,11 @@ If the experiment tunable DATA_PERSISTENCE is set to 'enabled':
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | -------------------- | -------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------- |
| APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC may use either OpenEBS Jiva/cStor storage class | | APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC may use either OpenEBS Jiva/cStor storage class |
| DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset`| | DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset` |
| CONTAINER_RUNTIME | The container runtime used in the Kubernetes Cluster | Optional | Defaults to `docker`. Supported: `docker` | | CONTAINER_RUNTIME | The container runtime used in the Kubernetes Cluster | Optional | Defaults to `docker`. Supported: `docker` |
| LIB_IMAGE | The chaos library image used to inject the latency | Optional | Defaults to `gaiaadm/pumba:0.4.8`. Supported: `gaiaadm/pumba:0.4.8`| | LIB_IMAGE | The chaos library image used to inject the latency | Optional | Defaults to `gaiaadm/pumba:0.4.8`. Supported: `gaiaadm/pumba:0.4.8` |
| TARGET_CONTAINER | The container into which delays are injected in the storage controller pod | Optional | Defaults to `cstor-istgt` | | TARGET_CONTAINER | The container into which delays are injected in the storage controller pod | Optional | Defaults to `cstor-istgt` |
| NETWORK_DELAY | Egress delay injected into the target container | Optional | Defaults to 60000 milliseconds (60s) | | NETWORK_DELAY | Egress delay injected into the target container | Optional | Defaults to 60000 milliseconds (60s) |
| TOTAL_CHAOS_DURATION | Total duration for which latency is injected | Optional | Defaults to 60000 milliseconds (60s) | | TOTAL_CHAOS_DURATION | Total duration for which latency is injected | Optional | Defaults to 60000 milliseconds (60s) |
@ -97,7 +99,7 @@ metadata:
spec: spec:
appinfo: appinfo:
appns: default appns: default
applabel: 'app=percona' applabel: "app=percona"
appkind: deployment appkind: deployment
chaosServiceAccount: percona-sa chaosServiceAccount: percona-sa
monitoring: false monitoring: false
@ -107,15 +109,15 @@ spec:
spec: spec:
components: components:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'cstor-istgt' value: "cstor-istgt"
- name: APP_PVC - name: APP_PVC
value: 'pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d' value: "pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: deployment value: deployment
- name: NETWORK_DELAY - name: NETWORK_DELAY
value: '30000' value: "30000"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60000' value: "60000"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.0.0-openebs-target-network-loss id: openebs-target-network-loss
title: OpenEBS Target Network Loss Experiment Details title: OpenEBS Target Network Loss Experiment Details
sidebar_label: Target Network Loss sidebar_label: Target Network Loss
original_id: openebs-target-network-loss original_id: openebs-target-network-loss

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-openebs-target-pod-failure id: openebs-target-pod-failure
title: OpenEBS Target Pod Failure Experiment Details title: OpenEBS Target Pod Failure Experiment Details
sidebar_label: Target Pod Failure sidebar_label: Target Pod Failure
original_id: openebs-target-pod-failure original_id: openebs-target-pod-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| OpenEBS | Kill the cstor/jiva target/controller pod and check if gets created again | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) | | OpenEBS | Kill the cstor/jiva target/controller pod and check if gets created again | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube, OpenShift(Baremetal) |
## Prerequisites ## Prerequisites
@ -31,6 +32,7 @@ original_id: openebs-target-pod-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -73,9 +75,9 @@ If the experiment tunable DATA_PERSISTENCE is set to 'enabled':
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | -------------------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------- | --- |
| APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC may use either OpenEBS Jiva/cStor storage class | | APP_PVC | The PersistentVolumeClaim used by the stateful application | Mandatory | PVC may use either OpenEBS Jiva/cStor storage class |
| DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset`| | | DEPLOY_TYPE | Type of Kubernetes resource used by the stateful application | Optional | Defaults to `deployment`. Supported: `deployment`, `statefulset` | |
| TOTAL_CHAOS_DURATION | Amount of soak time for I/O post container kill | Optional | Defaults to 60 seconds | | TOTAL_CHAOS_DURATION | Amount of soak time for I/O post container kill | Optional | Defaults to 60 seconds |
| DATA_PERSISTENCE | Flag to perform data consistency checks on the application | Optional | Default value is disabled (empty/unset). Set to `enabled` to perform data checks. Ensure configmap with app details are created | | DATA_PERSISTENCE | Flag to perform data consistency checks on the application | Optional | Default value is disabled (empty/unset). Set to `enabled` to perform data checks. Ensure configmap with app details are created |
@ -90,7 +92,7 @@ metadata:
spec: spec:
appinfo: appinfo:
appns: default appns: default
applabel: 'app=percona' applabel: "app=percona"
appkind: deployment appkind: deployment
chaosServiceAccount: percona-sa chaosServiceAccount: percona-sa
monitoring: false monitoring: false
@ -100,9 +102,9 @@ spec:
spec: spec:
components: components:
- name: FORCE - name: FORCE
value: 'true' value: "true"
- name: APP_PVC - name: APP_PVC
value: 'pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d' value: "pvc-c466262a-a5f2-4f0f-b594-5daddfc2e29d"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: deployment value: deployment
``` ```

View File

@ -0,0 +1,40 @@
---
id: plugins
title: Using other chaos libraries as plugins
sidebar_label: Plugins
original_id: plugins
---
---
Litmus provides a way to use any chaos library or a tool to inject chaos. The chaos tool to be compatible with Litmus should satisfy the following requirements:
- Should be available as a Docker Image
- Should take configuration through a `config-map`
The `plugins` or `chaos-libraries` host the core logic to inject chaos.
These plugins are hosted at https://github.com/litmuschaos/litmus-ansible/tree/master/chaoslib
Litmus project has integration into the following chaos-libraries.
| Chaos Library | Logo | Experiments covered |
| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| <a href="https://github.com/litmuschaos/litmus-ansible" target="_blank">Litmus</a> | <img src="https://camo.githubusercontent.com/953211f24c1c246f7017703f67b9779e4589bf76/68747470733a2f2f6c616e6473636170652e636e63662e696f2f6c6f676f732f6c69746d75732e737667" width="50"/> | Litmus native chaos libraries that encompasses the chaos capabilities for `pod-kill`, `container-kill`, `cpu-hog` |
| <a href="https://github.com/alexei-led/pumba" target="_blank">Pumba</a> | <img src="https://github.com/alexei-led/pumba/raw/master/docs/img/pumba_logo.png" width="50"/> | Pumba provides chaos capabilities for `network-delay` |
| <a href="https://github.com/bloomberg/powerfulseal" target="_blank">PowerfulSeal</a> | <img src="https://github.com/bloomberg/powerfulseal/raw/master/media/powerful-seal.png" width="50"/> | PowerfulSeal provides chaos capabilities for `pod-kill` |
| | | |
Usage of plugins is a configuration parameter inside the chaos experiment.
> Add an example snippet here.
<br/>
<br/>
<hr/>
<br/>
<br/>

View File

@ -1,16 +1,17 @@
--- ---
id: version-1.0.0-pod-cpu-hog id: pod-cpu-hog
title: Pod CPU Hog Details title: Pod CPU Hog Details
sidebar_label: Pod CPU Hog sidebar_label: Pod CPU Hog
original_id: pod-cpu-hog original_id: pod-cpu-hog
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| -------------------------------------------- | ------------------------------------------------------------------| | ------- | -------------------------------------------------- | ------------------------------ |
| Generic | Consume CPU resources on the application container| GKE, Packet(Kubeadm), Minikube | | Generic | Consume CPU resources on the application container | GKE, Packet(Kubeadm), Minikube |
## Prerequisites ## Prerequisites
@ -32,7 +33,6 @@ original_id: pod-cpu-hog
- It simulates conditions where app pods experience CPU spikes either due to expected/undesired processes thereby testing how the - It simulates conditions where app pods experience CPU spikes either due to expected/undesired processes thereby testing how the
overall application stack behaves when this occurs. overall application stack behaves when this occurs.
## Integrations ## Integrations
- Pod CPU can be effected using the chaos library: `litmus` - Pod CPU can be effected using the chaos library: `litmus`
@ -66,9 +66,10 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -81,7 +82,7 @@ roleRef:
kind: Role kind: Role
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
@ -138,12 +139,12 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
appinfo: appinfo:
appns: default appns: default
applabel: 'app=nginx' applabel: "app=nginx"
appkind: deployment appkind: deployment
chaosServiceAccount: nginx-sa chaosServiceAccount: nginx-sa
monitoring: false monitoring: false
@ -158,7 +159,7 @@ spec:
spec: spec:
components: components:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
#number of cpu cores to be consumed #number of cpu cores to be consumed
#verify the resources the app has been launched with #verify the resources the app has been launched with
- name: CPU_CORES - name: CPU_CORES
@ -166,7 +167,6 @@ spec:
# in ms # in ms
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: "60000" value: "60000"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-pod-delete id: pod-delete
title: Pod Delete Experiment Details title: Pod Delete Experiment Details
sidebar_label: Pod Delete sidebar_label: Pod Delete
original_id: pod-delete original_id: pod-delete
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ------------------------ | ------------------------------------------- |
| Generic | Fail the application pod | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube | | Generic | Fail the application pod | GKE, Konvoy(AWS), Packet(Kubeadm), Minikube |
## Prerequisites ## Prerequisites
@ -65,12 +66,21 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","deployments","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"deployments",
"jobs",
"configmaps",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -83,10 +93,9 @@ roleRef:
kind: Role kind: Role
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -97,14 +106,13 @@ subjects:
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | -------------------- | --------------------------------------------------- | -------- | ---------------------------------------------------------------------------------------- |
| TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 15s | | TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 15s |
| CHAOS_INTERVAL | Time interval b/w two successive pod failures (sec) | Optional | Defaults to 5s | | CHAOS_INTERVAL | Time interval b/w two successive pod failures (sec) | Optional | Defaults to 5s |
| LIB | The chaos lib used to inject the chaos | Optional | Defaults to `litmus`. Supported: `litmus`, `powerfulseal` | | LIB | The chaos lib used to inject the chaos | Optional | Defaults to `litmus`. Supported: `litmus`, `powerfulseal` |
| FORCE | Application Pod failures type | Optional | Default to `true`, With `terminationGracePeriodSeconds=0` | | FORCE | Application Pod failures type | Optional | Default to `true`, With `terminationGracePeriodSeconds=0` |
| KILL_COUNT | No. of application pods to be deleted | Optional | Default to `1`, kill_count > 1 is only supported by litmus lib , not by the powerfulseal | | KILL_COUNT | No. of application pods to be deleted | Optional | Default to `1`, kill_count > 1 is only supported by litmus lib , not by the powerfulseal |
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
```yaml ```yaml
@ -116,10 +124,10 @@ metadata:
spec: spec:
appinfo: appinfo:
appns: default appns: default
applabel: 'app=nginx' applabel: "app=nginx"
appkind: deployment appkind: deployment
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
chaosServiceAccount: nginx-sa chaosServiceAccount: nginx-sa
@ -136,10 +144,10 @@ spec:
components: components:
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '30' value: "30"
# set chaos interval (in sec) as desired # set chaos interval (in sec) as desired
- name: CHAOS_INTERVAL - name: CHAOS_INTERVAL
value: '10' value: "10"
# pod failures without '--force' & default terminationGracePeriodSeconds # pod failures without '--force' & default terminationGracePeriodSeconds
- name: FORCE - name: FORCE
value: "false" value: "false"

View File

@ -1,18 +1,20 @@
--- ---
id: version-1.0.0-pod-network-corruption id: pod-network-corruption
title: Pod Network Corruption Experiment Details title: Pod Network Corruption Experiment Details
sidebar_label: Pod Network Corruption sidebar_label: Pod Network Corruption
original_id: pod-network-corruption original_id: pod-network-corruption
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ----------------------------------------------------- | --------------------------------------- |
| Generic | Inject Network Packet Corruption Into Application Pod | GKE, Packet(Kubeadm), Minikube > v1.6.0 | | Generic | Inject Network Packet Corruption Into Application Pod | GKE, Packet(Kubeadm), Minikube > v1.6.0 |
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml)
- Ensure that the `pod-network-corruption` experiment resource is available in the cluster by `kubectl get chaosexperiments` command. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-corruption) - Ensure that the `pod-network-corruption` experiment resource is available in the cluster by `kubectl get chaosexperiments` command. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-corruption)
- Cluster must run docker container runtime - Cluster must run docker container runtime
@ -66,9 +68,10 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -81,10 +84,9 @@ roleRef:
kind: Role kind: Role
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -95,14 +97,14 @@ subjects:
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | ------------------------------------ | ----------------------------------------------------------- | --------- | --------------------------------- |
| NETWORK_INTERFACE | Name of ethernet interface considered for shaping traffic | Mandatory | | | NETWORK_INTERFACE | Name of ethernet interface considered for shaping traffic | Mandatory | |
| TARGET_CONTAINER | Name of container which is subjected to network latency | Mandatory | | | TARGET_CONTAINER | Name of container which is subjected to network latency | Mandatory | |
| NETWORK_PACKET_CORRUPTION_PERCENTAGE | Packet corruption in percentage | Mandatory | Default (100) | NETWORK_PACKET_CORRUPTION_PERCENTAGE | Packet corruption in percentage | Mandatory | Default (100) |
| LIB | The chaos lib used to inject the chaos eg. Pumba | Optional | only `pumba` supported currently | | LIB | The chaos lib used to inject the chaos eg. Pumba | Optional | only `pumba` supported currently |
| CHAOSENGINE | ChaosEngine CR name associated with the experiment instance | Optional | | | CHAOSENGINE | ChaosEngine CR name associated with the experiment instance | Optional | |
| CHAOS_SERVICE_ACCOUNT | Service account used by the pumba daemonset Optional | Optional | | | CHAOS_SERVICE_ACCOUNT | Service account used by the pumba daemonset Optional | Optional | |
| TOTAL_CHAOS_DURATION | The time duration for chaos insertion in milliseconds | Optional| Default (60000ms)| | TOTAL_CHAOS_DURATION | The time duration for chaos insertion in milliseconds | Optional | Default (60000ms) |
| LIB_IMAGE | The pumba image used to run the kill command | Optional | Defaults to `gaiaadm/pumba:0.6.5` | | LIB_IMAGE | The pumba image used to run the kill command | Optional | Defaults to `gaiaadm/pumba:0.6.5` |
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
@ -117,7 +119,7 @@ spec:
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: delete jobCleanUpPolicy: delete
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
monitoring: false monitoring: false
@ -144,6 +146,7 @@ spec:
#Network interface inside target container #Network interface inside target container
value: eth0 value: eth0
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos. - Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
@ -162,7 +165,6 @@ spec:
`kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>` `kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>`
## Application Pod Network Packet Corruption Demo ## Application Pod Network Packet Corruption Demo
- A sample recording of this experiment execution is provided [here](https://youtu.be/kSiLrIaILvs). - A sample recording of this experiment execution is provided [here](https://youtu.be/kSiLrIaILvs).

View File

@ -1,22 +1,23 @@
--- ---
id: version-1.0.0-pod-network-latency id: pod-network-latency
title: Pod Network Latency Experiment Details title: Pod Network Latency Experiment Details
sidebar_label: Pod Network Latency sidebar_label: Pod Network Latency
original_id: pod-network-latency original_id: pod-network-latency
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | ------------------------------------------- | --------------------------------------- |
| Generic | Inject Network Latency Into Application Pod | GKE, Packet(Kubeadm), Minikube > v1.6.0 | | Generic | Inject Network Latency Into Application Pod | GKE, Packet(Kubeadm), Minikube > v1.6.0 |
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml)
- Ensure that the `pod-network-latency` experiment resource is available in the cluster by executing kubectl `get chaosexperiments` in the desired namespace. . If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-latency) - Ensure that the `pod-network-latency` experiment resource is available in the cluster by executing kubectl `get chaosexperiments` in the desired namespace. . If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-latency)
<div class="danger"> <div class="danger">
<strong>NOTE</strong>: <strong>NOTE</strong>:
Experiment is supported only on Docker Runtime. Support for containerd/CRIO runtimes will be added in subsequent releases. Experiment is supported only on Docker Runtime. Support for containerd/CRIO runtimes will be added in subsequent releases.
@ -67,9 +68,10 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -82,10 +84,9 @@ roleRef:
kind: Role kind: Role
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -96,11 +97,11 @@ subjects:
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | --------------------- | ----------------------------------------------------------- | --------- | ----------------- |
| NETWORK_INTERFACE | Name of ethernet interface considered for shaping traffic | Mandatory | | | NETWORK_INTERFACE | Name of ethernet interface considered for shaping traffic | Mandatory | |
| TARGET_CONTAINER | Name of container which is subjected to network latency | Mandatory | | | TARGET_CONTAINER | Name of container which is subjected to network latency | Mandatory | |
| TOTAL_CHAOS_DURATION | The time duration for chaos insertion in milliseconds | Optional| Default (60000ms)| | TOTAL_CHAOS_DURATION | The time duration for chaos insertion in milliseconds | Optional | Default (60000ms) |
| NETWORK_LATENCY | The latency/delay in milliseconds | Optional | Default (60000ms) | NETWORK_LATENCY | The latency/delay in milliseconds | Optional | Default (60000ms) |
| LIB | The chaos lib used to inject the chaos eg. Pumba | Optional | | | LIB | The chaos lib used to inject the chaos eg. Pumba | Optional | |
| CHAOSENGINE | ChaosEngine CR name associated with the experiment instance | Optional | | | CHAOSENGINE | ChaosEngine CR name associated with the experiment instance | Optional | |
| CHAOS_SERVICE_ACCOUNT | Service account used by the pumba daemonset Optional | Optional | | | CHAOS_SERVICE_ACCOUNT | Service account used by the pumba daemonset Optional | Optional | |
@ -117,7 +118,7 @@ spec:
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: delete jobCleanUpPolicy: delete
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
monitoring: false monitoring: false
@ -152,6 +153,7 @@ spec:
- name: LIB - name: LIB
value: pumba value: pumba
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos. - Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
@ -170,7 +172,6 @@ spec:
`kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>` `kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>`
## Application Pod Network Latency Demo ## Application Pod Network Latency Demo
- A sample recording of this experiment execution is provided [here](https://youtu.be/QsQZyXVCcCw). - A sample recording of this experiment execution is provided [here](https://youtu.be/QsQZyXVCcCw).

View File

@ -1,15 +1,16 @@
--- ---
id: version-1.0.0-pod-network-loss id: pod-network-loss
title: Pod Network Loss Experiment Details title: Pod Network Loss Experiment Details
sidebar_label: Pod Network Loss sidebar_label: Pod Network Loss
original_id: pod-network-loss original_id: pod-network-loss
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
| Type | Description | Tested K8s Platform | | Type | Description | Tested K8s Platform |
| ----------| ------------------------ | ------------------------------------------------------------------| | ------- | --------------------------------------- | --------------------------------------- |
| Generic | Inject Packet Loss Into Application Pod | GKE, Packet(Kubeadm), Minikube > v1.6.0 | | Generic | Inject Packet Loss Into Application Pod | GKE, Packet(Kubeadm), Minikube > v1.6.0 |
## Prerequisites ## Prerequisites
@ -35,7 +36,6 @@ original_id: pod-network-loss
- The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos.
- Causes loss of access to application replica by injecting packet loss using pumba - Causes loss of access to application replica by injecting packet loss using pumba
## Steps to Execute the Chaos Experiment ## Steps to Execute the Chaos Experiment
- This Chaos Experiment can be triggered by creating a ChaosEngine resource on the cluster. To understand the values to provide in a ChaosEngine specification, refer [Getting Started](getstarted.md/#prepare-chaosengine) - This Chaos Experiment can be triggered by creating a ChaosEngine resource on the cluster. To understand the values to provide in a ChaosEngine specification, refer [Getting Started](getstarted.md/#prepare-chaosengine)
@ -65,9 +65,10 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -80,10 +81,9 @@ roleRef:
kind: Role kind: Role
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -94,7 +94,7 @@ subjects:
#### Supported Experiment Tunables #### Supported Experiment Tunables
| Variables | Description | Type | Notes | | Variables | Description | Type | Notes |
| ----------------------| ------------------------------------------------------------ |-----------|------------------------------------------------------------| | ------------------------------ | ----------------------------------------------------------- | --------- | ------------------------------ |
| NETWORK_INTERFACE | Name of ethernet interface considered for shaping traffic | Mandatory | | | NETWORK_INTERFACE | Name of ethernet interface considered for shaping traffic | Mandatory | |
| TARGET_CONTAINER | Name of container which is subjected to network latency | Mandatory | | | TARGET_CONTAINER | Name of container which is subjected to network latency | Mandatory | |
| NETWORK_PACKET_LOSS_PERCENTAGE | The packet loss in percentage | Mandatory | | | NETWORK_PACKET_LOSS_PERCENTAGE | The packet loss in percentage | Mandatory | |
@ -117,7 +117,7 @@ spec:
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: delete jobCleanUpPolicy: delete
# It can be app/infra # It can be app/infra
chaosType: 'app' chaosType: "app"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: "" auxiliaryAppInfo: ""
monitoring: false monitoring: false
@ -152,6 +152,7 @@ spec:
- name: LIB - name: LIB
value: pumba value: pumba
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos. - Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
@ -170,7 +171,6 @@ spec:
`kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>` `kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>`
## Application Pod Network Loss Demo ## Application Pod Network Loss Demo
- A sample recording of this experiment execution is provided [here](https://youtu.be/jqvYy-nWc_I). - A sample recording of this experiment execution is provided [here](https://youtu.be/jqvYy-nWc_I).

View File

@ -1,42 +1,40 @@
--- ---
id: version-1.0.0-resources id: resources
title: Resources related to Chaos Engineering on Kubernetes title: Resources related to Chaos Engineering on Kubernetes
sidebar_label: Resources sidebar_label: Resources
original_id: resources original_id: resources
--- ---
------
---
## Chaos Demos ## Chaos Demos
### Getting Started ### Getting Started
Use this video to learn how to get started with Litmus. You will learn how to install Litmus, how to inject a fault into your application using one of the experiments available at ChaosHub. Use this video to learn how to get started with Litmus. You will learn how to install Litmus, how to inject a fault into your application using one of the experiments available at ChaosHub.
<a href="https://asciinema.org/a/G9TcXpgikLuGTBY7btIUNSuWN" target="_blank"> <a href="https://asciinema.org/a/G9TcXpgikLuGTBY7btIUNSuWN" target="_blank">
<img src="/docs/assets/getstarted.svg" width="300"> <img src={require("./assets/getstarted.svg").default} width="300"/>
</a> </a>
<hr> <hr/>
## Reference Implementations ## Reference Implementations
| Reference | Description | | Reference | Description |
| ------------------ | ------------------------------------------------------------ | | ------------------ | ---------------------------------------------------------------------- |
| https://openebs.ci | CNCF SandBox project uses Litmus chaos experiments in its CI pipelines | | https://openebs.ci | CNCF SandBox project uses Litmus chaos experiments in its CI pipelines |
| | | | | |
| | | | | |
<br> <br/>
<br> <br/>
<hr> <hr/>
<br> <br/>
<br>
<br/>

View File

@ -1,12 +1,13 @@
--- ---
id: version-1.5.0-architecture id: architecture
original_id: architecture
title: Litmus Architecture title: Litmus Architecture
sidebar_label: Architecture sidebar_label: Architecture
original_id: architecture
--- ---
<hr>
<img src="/docs/assets/litmus-schematic.png" width="800"> <hr />
<img src={require("./assets/architecture.png").default} width="800" />
**Chaos-Operator** **Chaos-Operator**
@ -22,34 +23,24 @@ During installation, the following three CRDs are installed on the Kubernetes cl
`chaosresults.litmuschaos.io` `chaosresults.litmuschaos.io`
**Chaos-Experiments** **Chaos-Experiments**
Chaos Experiment is a CR and are available as YAML files on <a href=" https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>. For more details visit Chaos Hub [documentation](chaoshub.md). Chaos Experiment is a CR and are available as YAML files on <a href="https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>. For more details visit Chaos Hub [documentation](chaoshub.md).
**Chaos-Engine** **Chaos-Engine**
ChaosEngine CR links application to experiments. User has to create ChaosEngine YAML by specifying the application label and experiments and create the CR. The CR is watched by Chaos-Operator and chaos-experiments are executed on a given application. ChaosEngine CR links application to experiments. User has to create ChaosEngine YAML by specifying the application label and experiments and create the CR. The CR is watched by Chaos-Operator and chaos-experiments are executed on a given application.
**Chaos-Exporter** **Chaos-Exporter**
Optionally metrics can be exported to a Prometheus database. Chaos-Exporter implements the Prometheus metrics endpoint. Optionally metrics can be exported to a Prometheus database. Chaos-Exporter implements the Prometheus metrics endpoint.
<br />
<br />
<br> <hr />
<br>
<hr>
<br>
<br>
<br />
<br />

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,429 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1349.33333328" height="862.4" font-family="Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'" font-size="14px">
<style>
<!-- asciinema theme -->
.default-text-fill {fill: #cccccc}
.default-bg-fill {fill: #121314}
.c-0 {fill: #000000}
.c-1 {fill: #dd3c69}
.c-2 {fill: #4ebf22}
.c-3 {fill: #ddaf3c}
.c-4 {fill: #26b0d7}
.c-5 {fill: #b954e1}
.c-6 {fill: #54e1b9}
.c-7 {fill: #d9d9d9}
.c-8 {fill: #4d4d4d}
.c-9 {fill: #dd3c69}
.c-10 {fill: #4ebf22}
.c-11 {fill: #ddaf3c}
.c-12 {fill: #26b0d7}
.c-13 {fill: #b954e1}
.c-14 {fill: #54e1b9}
.c-15 {fill: #ffffff}
.c-8, .c-9, .c-10, .c-11, .c-12, .c-13, .c-14, .c-15 {font-weight: bold}
<!-- 256 colors -->
.c-16 {fill: #000000}
.c-17 {fill: #00005f}
.c-18 {fill: #000087}
.c-19 {fill: #0000af}
.c-20 {fill: #0000d7}
.c-21 {fill: #0000ff}
.c-22 {fill: #005f00}
.c-23 {fill: #005f5f}
.c-24 {fill: #005f87}
.c-25 {fill: #005faf}
.c-26 {fill: #005fd7}
.c-27 {fill: #005fff}
.c-28 {fill: #008700}
.c-29 {fill: #00875f}
.c-30 {fill: #008787}
.c-31 {fill: #0087af}
.c-32 {fill: #0087d7}
.c-33 {fill: #0087ff}
.c-34 {fill: #00af00}
.c-35 {fill: #00af5f}
.c-36 {fill: #00af87}
.c-37 {fill: #00afaf}
.c-38 {fill: #00afd7}
.c-39 {fill: #00afff}
.c-40 {fill: #00d700}
.c-41 {fill: #00d75f}
.c-42 {fill: #00d787}
.c-43 {fill: #00d7af}
.c-44 {fill: #00d7d7}
.c-45 {fill: #00d7ff}
.c-46 {fill: #00ff00}
.c-47 {fill: #00ff5f}
.c-48 {fill: #00ff87}
.c-49 {fill: #00ffaf}
.c-50 {fill: #00ffd7}
.c-51 {fill: #00ffff}
.c-52 {fill: #5f0000}
.c-53 {fill: #5f005f}
.c-54 {fill: #5f0087}
.c-55 {fill: #5f00af}
.c-56 {fill: #5f00d7}
.c-57 {fill: #5f00ff}
.c-58 {fill: #5f5f00}
.c-59 {fill: #5f5f5f}
.c-60 {fill: #5f5f87}
.c-61 {fill: #5f5faf}
.c-62 {fill: #5f5fd7}
.c-63 {fill: #5f5fff}
.c-64 {fill: #5f8700}
.c-65 {fill: #5f875f}
.c-66 {fill: #5f8787}
.c-67 {fill: #5f87af}
.c-68 {fill: #5f87d7}
.c-69 {fill: #5f87ff}
.c-70 {fill: #5faf00}
.c-71 {fill: #5faf5f}
.c-72 {fill: #5faf87}
.c-73 {fill: #5fafaf}
.c-74 {fill: #5fafd7}
.c-75 {fill: #5fafff}
.c-76 {fill: #5fd700}
.c-77 {fill: #5fd75f}
.c-78 {fill: #5fd787}
.c-79 {fill: #5fd7af}
.c-80 {fill: #5fd7d7}
.c-81 {fill: #5fd7ff}
.c-82 {fill: #5fff00}
.c-83 {fill: #5fff5f}
.c-84 {fill: #5fff87}
.c-85 {fill: #5fffaf}
.c-86 {fill: #5fffd7}
.c-87 {fill: #5fffff}
.c-88 {fill: #870000}
.c-89 {fill: #87005f}
.c-90 {fill: #870087}
.c-91 {fill: #8700af}
.c-92 {fill: #8700d7}
.c-93 {fill: #8700ff}
.c-94 {fill: #875f00}
.c-95 {fill: #875f5f}
.c-96 {fill: #875f87}
.c-97 {fill: #875faf}
.c-98 {fill: #875fd7}
.c-99 {fill: #875fff}
.c-100 {fill: #878700}
.c-101 {fill: #87875f}
.c-102 {fill: #878787}
.c-103 {fill: #8787af}
.c-104 {fill: #8787d7}
.c-105 {fill: #8787ff}
.c-106 {fill: #87af00}
.c-107 {fill: #87af5f}
.c-108 {fill: #87af87}
.c-109 {fill: #87afaf}
.c-110 {fill: #87afd7}
.c-111 {fill: #87afff}
.c-112 {fill: #87d700}
.c-113 {fill: #87d75f}
.c-114 {fill: #87d787}
.c-115 {fill: #87d7af}
.c-116 {fill: #87d7d7}
.c-117 {fill: #87d7ff}
.c-118 {fill: #87ff00}
.c-119 {fill: #87ff5f}
.c-120 {fill: #87ff87}
.c-121 {fill: #87ffaf}
.c-122 {fill: #87ffd7}
.c-123 {fill: #87ffff}
.c-124 {fill: #af0000}
.c-125 {fill: #af005f}
.c-126 {fill: #af0087}
.c-127 {fill: #af00af}
.c-128 {fill: #af00d7}
.c-129 {fill: #af00ff}
.c-130 {fill: #af5f00}
.c-131 {fill: #af5f5f}
.c-132 {fill: #af5f87}
.c-133 {fill: #af5faf}
.c-134 {fill: #af5fd7}
.c-135 {fill: #af5fff}
.c-136 {fill: #af8700}
.c-137 {fill: #af875f}
.c-138 {fill: #af8787}
.c-139 {fill: #af87af}
.c-140 {fill: #af87d7}
.c-141 {fill: #af87ff}
.c-142 {fill: #afaf00}
.c-143 {fill: #afaf5f}
.c-144 {fill: #afaf87}
.c-145 {fill: #afafaf}
.c-146 {fill: #afafd7}
.c-147 {fill: #afafff}
.c-148 {fill: #afd700}
.c-149 {fill: #afd75f}
.c-150 {fill: #afd787}
.c-151 {fill: #afd7af}
.c-152 {fill: #afd7d7}
.c-153 {fill: #afd7ff}
.c-154 {fill: #afff00}
.c-155 {fill: #afff5f}
.c-156 {fill: #afff87}
.c-157 {fill: #afffaf}
.c-158 {fill: #afffd7}
.c-159 {fill: #afffff}
.c-160 {fill: #d70000}
.c-161 {fill: #d7005f}
.c-162 {fill: #d70087}
.c-163 {fill: #d700af}
.c-164 {fill: #d700d7}
.c-165 {fill: #d700ff}
.c-166 {fill: #d75f00}
.c-167 {fill: #d75f5f}
.c-168 {fill: #d75f87}
.c-169 {fill: #d75faf}
.c-170 {fill: #d75fd7}
.c-171 {fill: #d75fff}
.c-172 {fill: #d78700}
.c-173 {fill: #d7875f}
.c-174 {fill: #d78787}
.c-175 {fill: #d787af}
.c-176 {fill: #d787d7}
.c-177 {fill: #d787ff}
.c-178 {fill: #d7af00}
.c-179 {fill: #d7af5f}
.c-180 {fill: #d7af87}
.c-181 {fill: #d7afaf}
.c-182 {fill: #d7afd7}
.c-183 {fill: #d7afff}
.c-184 {fill: #d7d700}
.c-185 {fill: #d7d75f}
.c-186 {fill: #d7d787}
.c-187 {fill: #d7d7af}
.c-188 {fill: #d7d7d7}
.c-189 {fill: #d7d7ff}
.c-190 {fill: #d7ff00}
.c-191 {fill: #d7ff5f}
.c-192 {fill: #d7ff87}
.c-193 {fill: #d7ffaf}
.c-194 {fill: #d7ffd7}
.c-195 {fill: #d7ffff}
.c-196 {fill: #ff0000}
.c-197 {fill: #ff005f}
.c-198 {fill: #ff0087}
.c-199 {fill: #ff00af}
.c-200 {fill: #ff00d7}
.c-201 {fill: #ff00ff}
.c-202 {fill: #ff5f00}
.c-203 {fill: #ff5f5f}
.c-204 {fill: #ff5f87}
.c-205 {fill: #ff5faf}
.c-206 {fill: #ff5fd7}
.c-207 {fill: #ff5fff}
.c-208 {fill: #ff8700}
.c-209 {fill: #ff875f}
.c-210 {fill: #ff8787}
.c-211 {fill: #ff87af}
.c-212 {fill: #ff87d7}
.c-213 {fill: #ff87ff}
.c-214 {fill: #ffaf00}
.c-215 {fill: #ffaf5f}
.c-216 {fill: #ffaf87}
.c-217 {fill: #ffafaf}
.c-218 {fill: #ffafd7}
.c-219 {fill: #ffafff}
.c-220 {fill: #ffd700}
.c-221 {fill: #ffd75f}
.c-222 {fill: #ffd787}
.c-223 {fill: #ffd7af}
.c-224 {fill: #ffd7d7}
.c-225 {fill: #ffd7ff}
.c-226 {fill: #ffff00}
.c-227 {fill: #ffff5f}
.c-228 {fill: #ffff87}
.c-229 {fill: #ffffaf}
.c-230 {fill: #ffffd7}
.c-231 {fill: #ffffff}
.c-232 {fill: #080808}
.c-233 {fill: #121212}
.c-234 {fill: #1c1c1c}
.c-235 {fill: #262626}
.c-236 {fill: #303030}
.c-237 {fill: #3a3a3a}
.c-238 {fill: #444444}
.c-239 {fill: #4e4e4e}
.c-240 {fill: #585858}
.c-241 {fill: #626262}
.c-242 {fill: #6c6c6c}
.c-243 {fill: #767676}
.c-244 {fill: #808080}
.c-245 {fill: #8a8a8a}
.c-246 {fill: #949494}
.c-247 {fill: #9e9e9e}
.c-248 {fill: #a8a8a8}
.c-249 {fill: #b2b2b2}
.c-250 {fill: #bcbcbc}
.c-251 {fill: #c6c6c6}
.c-252 {fill: #d0d0d0}
.c-253 {fill: #dadada}
.c-254 {fill: #e4e4e4}
.c-255 {fill: #eeeeee}
.br { font-weight: bold }
.it { font-style: italic }
.un { text-decoration: underline }
</style>
<rect width="100%" height="100%" class="default-bg-fill" />
<svg x="0.625%" y="1.136%" class="default-text-fill">
<g style="shape-rendering: optimizeSpeed">
<rect x="5.625%" y="6.818%" width="0.625%" height="19.7" class="c-7" />
<rect x="0.000%" y="95.455%" width="98.750%" height="19.7" class="c-2" />
</g>
<text class="default-text-fill">
<tspan y="0.000%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="5.625%">#</tspan><tspan x="6.875%">B</tspan><tspan x="7.500%">u</tspan><tspan x="8.125%">i</tspan><tspan x="8.750%">l</tspan><tspan x="9.375%">d</tspan><tspan x="10.625%">a</tspan><tspan x="11.250%">n</tspan><tspan x="11.875%">d</tspan><tspan x="13.125%">a</tspan><tspan x="13.750%">p</tspan><tspan x="14.375%">p</tspan><tspan x="15.000%">l</tspan><tspan x="15.625%">y</tspan><tspan x="16.875%">C</tspan><tspan x="17.500%">h</tspan><tspan x="18.125%">a</tspan><tspan x="18.750%">o</tspan><tspan x="19.375%">s</tspan><tspan x="20.000%">E</tspan><tspan x="20.625%">n</tspan><tspan x="21.250%">g</tspan><tspan x="21.875%">i</tspan><tspan x="22.500%">n</tspan><tspan x="23.125%">e</tspan><tspan x="24.375%">C</tspan><tspan x="25.000%">R</tspan><tspan x="26.250%">t</tspan><tspan x="26.875%">o</tspan><tspan x="28.125%">u</tspan><tspan x="28.750%">n</tspan><tspan x="29.375%">l</tspan><tspan x="30.000%">e</tspan><tspan x="30.625%">a</tspan><tspan x="31.250%">s</tspan><tspan x="31.875%">h</tspan><tspan x="33.125%">C</tspan><tspan x="33.750%">h</tspan><tspan x="34.375%">a</tspan><tspan x="35.000%">o</tspan><tspan x="35.625%">s</tspan><tspan x="49.375%" class="c-2"></tspan><tspan x="50.000%">E</tspan><tspan x="50.625%">v</tspan><tspan x="51.250%">e</tspan><tspan x="51.875%">r</tspan><tspan x="52.500%">y</tspan><tspan x="53.750%">1</tspan><tspan x="54.375%">.</tspan><tspan x="55.000%">0</tspan><tspan x="55.625%">s</tspan><tspan x="56.250%">:</tspan><tspan x="57.500%">k</tspan><tspan x="58.125%">u</tspan><tspan x="58.750%">b</tspan><tspan x="59.375%">e</tspan><tspan x="60.000%">c</tspan><tspan x="60.625%">t</tspan><tspan x="61.250%">l</tspan><tspan x="62.500%">g</tspan><tspan x="63.125%">e</tspan><tspan x="63.750%">t</tspan><tspan x="65.000%">p</tspan><tspan x="65.625%">o</tspan><tspan x="83.750%">F</tspan><tspan x="84.375%">r</tspan><tspan x="85.000%">i</tspan><tspan x="86.250%">O</tspan><tspan x="86.875%">c</tspan><tspan x="87.500%">t</tspan><tspan x="89.375%">4</tspan><tspan x="90.625%">1</tspan><tspan x="91.250%">9</tspan><tspan x="91.875%">:</tspan><tspan x="92.500%">3</tspan><tspan x="93.125%">2</tspan><tspan x="93.750%">:</tspan><tspan x="94.375%">3</tspan><tspan x="95.000%">5</tspan><tspan x="96.250%">2</tspan><tspan x="96.875%">0</tspan><tspan x="97.500%">1</tspan><tspan x="98.125%">9</tspan>
</tspan>
<tspan y="2.273%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="4.545%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="5.625%">v</tspan><tspan x="6.250%">i</tspan><tspan x="7.500%">c</tspan><tspan x="8.125%">h</tspan><tspan x="8.750%">a</tspan><tspan x="9.375%">o</tspan><tspan x="10.000%">s</tspan><tspan x="10.625%">e</tspan><tspan x="11.250%">n</tspan><tspan x="11.875%">g</tspan><tspan x="12.500%">i</tspan><tspan x="13.125%">n</tspan><tspan x="13.750%">e</tspan><tspan x="14.375%">.</tspan><tspan x="15.000%">y</tspan><tspan x="15.625%">a</tspan><tspan x="16.250%">m</tspan><tspan x="16.875%">l</tspan><tspan x="49.375%" class="c-2"></tspan><tspan x="50.000%">N</tspan><tspan x="50.625%">A</tspan><tspan x="51.250%">M</tspan><tspan x="51.875%">E</tspan><tspan x="69.375%">R</tspan><tspan x="70.000%">E</tspan><tspan x="70.625%">A</tspan><tspan x="71.250%">D</tspan><tspan x="71.875%">Y</tspan><tspan x="74.375%">S</tspan><tspan x="75.000%">T</tspan><tspan x="75.625%">A</tspan><tspan x="76.250%">T</tspan><tspan x="76.875%">U</tspan><tspan x="77.500%">S</tspan><tspan x="80.625%">R</tspan><tspan x="81.250%">E</tspan><tspan x="81.875%">S</tspan><tspan x="82.500%">T</tspan><tspan x="83.125%">A</tspan><tspan x="83.750%">R</tspan><tspan x="84.375%">T</tspan><tspan x="85.000%">S</tspan><tspan x="87.500%">A</tspan><tspan x="88.125%">G</tspan><tspan x="88.750%">E</tspan>
</tspan>
<tspan y="6.818%">
<tspan dy="1em" x="0.000%">c</tspan><tspan x="0.625%">h</tspan><tspan x="1.250%">a</tspan><tspan x="1.875%">o</tspan><tspan x="2.500%">s</tspan><tspan x="3.125%">:</tspan><tspan x="3.750%">~</tspan><tspan x="4.375%">$</tspan><tspan x="49.375%" class="c-2"></tspan><tspan x="50.000%">h</tspan><tspan x="50.625%">e</tspan><tspan x="51.250%">l</tspan><tspan x="51.875%">l</tspan><tspan x="52.500%">o</tspan><tspan x="53.125%">-</tspan><tspan x="53.750%">d</tspan><tspan x="54.375%">e</tspan><tspan x="55.000%">p</tspan><tspan x="55.625%">l</tspan><tspan x="56.250%">o</tspan><tspan x="56.875%">y</tspan><tspan x="57.500%">-</tspan><tspan x="58.125%">d</tspan><tspan x="58.750%">d</tspan><tspan x="59.375%">5</tspan><tspan x="60.000%">9</tspan><tspan x="60.625%">b</tspan><tspan x="61.250%">8</tspan><tspan x="61.875%">9</tspan><tspan x="62.500%">5</tspan><tspan x="63.125%">6</tspan><tspan x="63.750%">-</tspan><tspan x="64.375%">h</tspan><tspan x="65.000%">x</tspan><tspan x="65.625%">c</tspan><tspan x="66.250%">j</tspan><tspan x="66.875%">v</tspan><tspan x="69.375%">1</tspan><tspan x="70.000%">/</tspan><tspan x="70.625%">1</tspan><tspan x="74.375%">R</tspan><tspan x="75.000%">u</tspan><tspan x="75.625%">n</tspan><tspan x="76.250%">n</tspan><tspan x="76.875%">i</tspan><tspan x="77.500%">n</tspan><tspan x="78.125%">g</tspan><tspan x="80.625%">0</tspan><tspan x="87.500%">1</tspan><tspan x="88.125%">9</tspan><tspan x="88.750%">m</tspan>
</tspan>
<tspan y="9.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="11.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="13.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="15.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="18.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="20.455%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="22.727%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="25.000%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="27.273%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="29.545%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="31.818%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="34.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="36.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="38.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="40.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="43.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="45.455%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="47.727%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%"></tspan><tspan x="50.625%"></tspan><tspan x="51.250%"></tspan><tspan x="51.875%"></tspan><tspan x="52.500%"></tspan><tspan x="53.125%"></tspan><tspan x="53.750%"></tspan><tspan x="54.375%"></tspan><tspan x="55.000%"></tspan><tspan x="55.625%"></tspan><tspan x="56.250%"></tspan><tspan x="56.875%"></tspan><tspan x="57.500%"></tspan><tspan x="58.125%"></tspan><tspan x="58.750%"></tspan><tspan x="59.375%"></tspan><tspan x="60.000%"></tspan><tspan x="60.625%"></tspan><tspan x="61.250%"></tspan><tspan x="61.875%"></tspan><tspan x="62.500%"></tspan><tspan x="63.125%"></tspan><tspan x="63.750%"></tspan><tspan x="64.375%"></tspan><tspan x="65.000%"></tspan><tspan x="65.625%"></tspan><tspan x="66.250%"></tspan><tspan x="66.875%"></tspan><tspan x="67.500%"></tspan><tspan x="68.125%"></tspan><tspan x="68.750%"></tspan><tspan x="69.375%"></tspan><tspan x="70.000%"></tspan><tspan x="70.625%"></tspan><tspan x="71.250%"></tspan><tspan x="71.875%"></tspan><tspan x="72.500%"></tspan><tspan x="73.125%"></tspan><tspan x="73.750%"></tspan><tspan x="74.375%"></tspan><tspan x="75.000%"></tspan><tspan x="75.625%"></tspan><tspan x="76.250%"></tspan><tspan x="76.875%"></tspan><tspan x="77.500%"></tspan><tspan x="78.125%"></tspan><tspan x="78.750%"></tspan><tspan x="79.375%"></tspan><tspan x="80.000%"></tspan><tspan x="80.625%"></tspan><tspan x="81.250%"></tspan><tspan x="81.875%"></tspan><tspan x="82.500%"></tspan><tspan x="83.125%"></tspan><tspan x="83.750%"></tspan><tspan x="84.375%"></tspan><tspan x="85.000%"></tspan><tspan x="85.625%"></tspan><tspan x="86.250%"></tspan><tspan x="86.875%"></tspan><tspan x="87.500%"></tspan><tspan x="88.125%"></tspan><tspan x="88.750%"></tspan><tspan x="89.375%"></tspan><tspan x="90.000%"></tspan><tspan x="90.625%"></tspan><tspan x="91.250%"></tspan><tspan x="91.875%"></tspan><tspan x="92.500%"></tspan><tspan x="93.125%"></tspan><tspan x="93.750%"></tspan><tspan x="94.375%"></tspan><tspan x="95.000%"></tspan><tspan x="95.625%"></tspan><tspan x="96.250%"></tspan><tspan x="96.875%"></tspan><tspan x="97.500%"></tspan><tspan x="98.125%"></tspan>
</tspan>
<tspan y="50.000%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="52.273%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="54.545%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="56.818%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="59.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="61.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="63.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="65.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="68.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="70.455%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="72.727%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="75.000%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="77.273%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="79.545%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="81.818%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="84.091%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="86.364%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="88.636%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="90.909%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan><tspan x="50.000%" class="br c-10">H</tspan><tspan x="50.625%" class="br c-10">e</tspan><tspan x="51.250%" class="br c-10">l</tspan><tspan x="51.875%" class="br c-10">l</tspan><tspan x="52.500%" class="br c-10">o</tspan><tspan x="53.750%" class="br c-10">W</tspan><tspan x="54.375%" class="br c-10">o</tspan><tspan x="55.000%" class="br c-10">r</tspan><tspan x="55.625%" class="br c-10">l</tspan><tspan x="56.250%" class="br c-10">d</tspan><tspan x="57.500%" class="br c-10">i</tspan><tspan x="58.125%" class="br c-10">s</tspan><tspan x="59.375%" class="br c-10">o</tspan><tspan x="60.000%" class="br c-10">n</tspan><tspan x="60.625%" class="br c-10">l</tspan><tspan x="61.250%" class="br c-10">i</tspan><tspan x="61.875%" class="br c-10">n</tspan><tspan x="62.500%" class="br c-10">e</tspan><tspan x="63.750%">H</tspan><tspan x="64.375%">T</tspan><tspan x="65.000%">T</tspan><tspan x="65.625%">P</tspan><tspan x="66.250%">/</tspan><tspan x="66.875%">2</tspan><tspan x="68.125%">2</tspan><tspan x="68.750%">0</tspan><tspan x="69.375%">0</tspan><tspan x="70.625%">O</tspan><tspan x="71.250%">K</tspan>
</tspan>
<tspan y="93.182%">
<tspan dy="1em" x="49.375%" class="c-2"></tspan>
</tspan>
<tspan y="95.455%">
<tspan dy="1em" x="0.000%" class="c-0">[</tspan><tspan x="0.625%" class="c-0">d</tspan><tspan x="1.250%" class="c-0">e</tspan><tspan x="1.875%" class="c-0">m</tspan><tspan x="2.500%" class="c-0">o</tspan><tspan x="3.125%" class="c-0">]</tspan><tspan x="4.375%" class="c-0">0</tspan><tspan x="5.000%" class="c-0">:</tspan><tspan x="5.625%" class="c-0">s</tspan><tspan x="6.250%" class="c-0">s</tspan><tspan x="6.875%" class="c-0">h</tspan><tspan x="7.500%" class="c-0">*</tspan><tspan x="75.625%" class="c-0">&quot;</tspan><tspan x="76.250%" class="c-0">r</tspan><tspan x="76.875%" class="c-0">a</tspan><tspan x="77.500%" class="c-0">h</tspan><tspan x="78.125%" class="c-0">u</tspan><tspan x="78.750%" class="c-0">l</tspan><tspan x="79.375%" class="c-0">-</tspan><tspan x="80.000%" class="c-0">T</tspan><tspan x="80.625%" class="c-0">h</tspan><tspan x="81.250%" class="c-0">i</tspan><tspan x="81.875%" class="c-0">n</tspan><tspan x="82.500%" class="c-0">k</tspan><tspan x="83.125%" class="c-0">P</tspan><tspan x="83.750%" class="c-0">a</tspan><tspan x="84.375%" class="c-0">d</tspan><tspan x="85.000%" class="c-0">-</tspan><tspan x="85.625%" class="c-0">E</tspan><tspan x="86.250%" class="c-0">4</tspan><tspan x="86.875%" class="c-0">9</tspan><tspan x="87.500%" class="c-0">0</tspan><tspan x="88.125%" class="c-0">&quot;</tspan><tspan x="89.375%" class="c-0">0</tspan><tspan x="90.000%" class="c-0">1</tspan><tspan x="90.625%" class="c-0">:</tspan><tspan x="91.250%" class="c-0">0</tspan><tspan x="91.875%" class="c-0">2</tspan><tspan x="93.125%" class="c-0">0</tspan><tspan x="93.750%" class="c-0">5</tspan><tspan x="94.375%" class="c-0">-</tspan><tspan x="95.000%" class="c-0">O</tspan><tspan x="95.625%" class="c-0">c</tspan><tspan x="96.250%" class="c-0">t</tspan><tspan x="96.875%" class="c-0">-</tspan><tspan x="97.500%" class="c-0">1</tspan><tspan x="98.125%" class="c-0">9</tspan>
</tspan>
</text>
<g transform="translate(-50 -50)">
<svg x="50%" y="50%" width="100" height="100">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 866.0254037844387 866.0254037844387">
<defs>
<mask id="small-triangle-mask">
<rect width="100%" height="100%" fill="white"/>
<polygon points="508.01270189221935 433.01270189221935, 208.0127018922194 259.8076211353316, 208.01270189221927 606.217782649107" fill="black"></polygon>
</mask>
</defs>
<polygon points="808.0127018922194 433.01270189221935, 58.01270189221947 -1.1368683772161603e-13, 58.01270189221913 866.0254037844386" mask="url(#small-triangle-mask)" fill="white"></polygon>
<polyline points="481.2177826491071 333.0127018922194, 134.80762113533166 533.0127018922194" stroke="white" stroke-width="90"></polyline>
</svg>
</svg>
</g>
</svg>
</svg>

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View File

@ -0,0 +1,71 @@
---
id: chaoshub
title: Using and contributing to ChaosHub
sidebar_label: ChaosHub
original_id: chaoshub
---
---
**Important links**
Chaos Hub is maintained at https://hub.litmuschaos.io
To contribute new chaos charts visit: https://github.com/litmuschaos/chaos-charts
**Introduction**
Litmus chaos hub is a place where the chaos engineering community members publish their chaos experiments. A set of related chaos experiments are bundled into a `Chaos Chart`. Chaos Charts are classified into the following categories.
- [Generic Chaos](#generic-chaos)
- [Application Chaos](#application-chaos)
- [Platform Chaos](#platform-chaos)
### Generic Chaos
Chaos actions that apply to generic Kubernetes resources are classified into this category. Following chaos experiments are supported under Generic Chaos Chart
| Experiment name | Description | User guide link |
| ---------------------- | ----------------------------------------------------- | --------------------------------------------------- |
| Container Kill | Kill one container in the application pod | [container-kill](container-kill.md) |
| Pod Delete | Fail the application pod | [pod-delete](pod-delete.md) |
| Pod Network Latency | Experiment to inject network latency to the POD | [pod-network-latency](pod-network-latency.md) |
| Pod Network Loss | Experiment to inject network loss to the POD | [pod-network-loss](pod-network-loss.md) |
| Node CPU Hog | Exhaust CPU resources on the Kubernetes Node | [node-cpu-hog](node-cpu-hog.md) |
| Disk Fill | Fillup Ephemeral Storage of a Resource | [disk-fill](disk-fill.md) |
| Disk Loss | External disk loss from the node | [disk-loss](disk-loss.md) |
| Node Drain | Drain the node where application pod is scheduled | [node-drain](node-drain.md) |
| Pod CPU Hog | Consume CPU resources on the application container | [pod-cpu-hog](pod-cpu-hog.md) |
| Pod Network Corruption | Inject Network Packet Corruption Into Application Pod | [pod-network-corruption](pod-network-corruption.md) |
### Application Chaos
While Chaos Experiments under the Generic category offer the ability to induce chaos into Kubernetes resources, it is difficult to analyze and conclude if the chaos induced found a weakness in a given application. The application specific chaos experiments are built with some checks on _pre-conditions_ and some expected outcomes after the chaos injection. The result of the chaos experiment is determined by matching the outcome with the expected outcome.
<div class="danger">
<strong>NOTE:</strong> If the result of the chaos experiment is `pass`, it means that the application is resilient to that chaos.
</div>
#### Benefits of contributing an application chaos experiment
Application developers write negative tests in their CI pipelines to test the resiliency of the applications. These negative can be converted into Litmus Chaos Experiments and contributed to ChaosHub, so that the users of the application can use them in staging/pre-production/production environments to check the resilience. Application environments vary considerably from where they are tested (CI pipelines) to where they are deployed (Production). Hence, running the same chaos tests in the user's environment will help determine the weaknesses of the deployment and fixing such weaknesses leads to increased resilience.
Following Application Chaos experiments are available on ChaosHub
| Application | Description | Chaos Experiments |
| ----------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| OpenEBS | Container Attached Storage for Kubernetes | [openebs-pool-pod-failure](openebs-pool-pod-failure.md)<br/>[openebs-pool-container-failure](openebs-pool-container-failure.md)<br/>[openebs-target-pod-failure](openebs-target-pod-failure.md)<br/>[openebs-target-container-failure](openebs-target-container-failure.md)<br/>[openebs-target-network-delay](openebs-target-network-delay.md)<br/>[openebs-target-network-loss](openebs-target-network-loss.md) |
| Kafka | Open-source stream processing software | [kafka-broker-pod-failure](kafka-broker-pod-failure.md)<br/>[kafka-broker-disk-failure](kafka-broker-disk-failure.md)<br/> |
| CoreDns | CoreDNS is a fast and flexible DNS server that chains plugins | [coredns-pod-delete](coredns-pod-delete.md) |
### Platform Chaos
Chaos experiments that inject chaos into the platform resources of Kubernetes are classified into this category. Management of platform resources vary significantly from each other, Chaos Charts may be maintained separately for each platform (For example, AWS, GCP, Azure, etc)
Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -0,0 +1,24 @@
---
id: community
title: Join Litmus Community
sidebar_label: Community
original_id: community
---
---
Litmus community is a subset of the larger Kubernetes community. Have a question? Want to stay in touch with the happenings on Chaos Engineering on Kubernetes? Join `#litmus` channel on Kubernetes Slack.
<br/><br/>
<a href="https://kubernetes.slack.com/messages/CNXNB0ZTN" target="_blank"><img src={require("./assets/join-community.png").default} width="400"/></a>
<br/>
<br/>
<hr/>
<br/>
<br/>

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-container-kill id: container-kill
title: Container Kill Experiment Details title: Container Kill Experiment Details
sidebar_label: Container Kill sidebar_label: Container Kill
original_id: container-kill original_id: container-kill
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -65,7 +66,8 @@ original_id: container-kill
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -84,9 +86,18 @@ metadata:
labels: labels:
name: container-kill-sa name: container-kill-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","jobs","daemonsets","pods/exec","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"daemonsets",
"pods/exec",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -100,10 +111,9 @@ roleRef:
kind: Role kind: Role
name: container-kill-sa name: container-kill-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: container-kill-sa name: container-kill-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -148,7 +158,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -157,19 +168,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: container-kill-sa chaosServiceAccount: container-kill-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: container-kill - name: container-kill
spec: spec:
@ -177,7 +188,7 @@ spec:
env: env:
# specify the name of the container to be killed # specify the name of the container to be killed
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -194,7 +205,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the container kill, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the container kill, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-container-kill -n <application-namespace>` `kubectl describe chaosresult nginx-chaos-container-kill -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-coredns-pod-delete id: coredns-pod-delete
title: CoreDNS Pod Delete Experiment Details title: CoreDNS Pod Delete Experiment Details
sidebar_label: CoreDNS Pod Delete sidebar_label: CoreDNS Pod Delete
original_id: coredns-pod-delete original_id: coredns-pod-delete
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -22,6 +23,7 @@ original_id: coredns-pod-delete
</table> </table>
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `coredns-pod-delete` experiment resource is available in the cluster by executing `kubectl get chaosexperiments` in the desired namespace. If not, install from [here](https://hub.litmuschaos.io/api/chaos?file=charts/coredns/coredns-pod-delete/experiment.yaml) - Ensure that the `coredns-pod-delete` experiment resource is available in the cluster by executing `kubectl get chaosexperiments` in the desired namespace. If not, install from [here](https://hub.litmuschaos.io/api/chaos?file=charts/coredns/coredns-pod-delete/experiment.yaml)
@ -52,11 +54,13 @@ original_id: coredns-pod-delete
- Follow the steps in the sections below to create the chaosServiceAccount, prepare the ChaosEngine & execute the experiment. - Follow the steps in the sections below to create the chaosServiceAccount, prepare the ChaosEngine & execute the experiment.
## Prepare chaosServiceAccount ## Prepare chaosServiceAccount
- Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app) namespace. This example consists of the minimum necessary role permissions to execute the experiment. - Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app) namespace. This example consists of the minimum necessary role permissions to execute the experiment.
### Sample Rbac Manifest ### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/coredns/coredns-pod-delete/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/coredns/coredns-pod-delete/rbac.yaml yaml"
```yaml ```yaml
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
@ -73,9 +77,17 @@ metadata:
labels: labels:
name: coredns-pod-delete-sa name: coredns-pod-delete-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["services", "pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"services",
"pods",
"jobs",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -88,7 +100,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: coredns-pod-delete-sa name: coredns-pod-delete-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: coredns-pod-delete-sa name: coredns-pod-delete-sa
namespace: kube-system namespace: kube-system
``` ```
@ -96,6 +108,7 @@ subjects:
### Prepare ChaosEngine ### Prepare ChaosEngine
- Provide the application info in `spec.appinfo` - Provide the application info in `spec.appinfo`
- It will be default as - It will be default as
``` ```
appinfo: appinfo:
@ -143,7 +156,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/coredns/coredns-pod-delete/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/coredns/coredns-pod-delete/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -152,19 +166,19 @@ metadata:
namespace: kube-system namespace: kube-system
spec: spec:
appinfo: appinfo:
appns: 'kube-system' appns: "kube-system"
applabel: 'k8s-app=kube-dns' applabel: "k8s-app=kube-dns"
appkind: 'deployment' appkind: "deployment"
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
chaosServiceAccount: coredns-pod-delete-sa chaosServiceAccount: coredns-pod-delete-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: coredns-pod-delete - name: coredns-pod-delete
spec: spec:
@ -172,14 +186,14 @@ spec:
env: env:
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '30' value: "30"
# set chaos interval (in sec) as desired # set chaos interval (in sec) as desired
- name: CHAOS_INTERVAL - name: CHAOS_INTERVAL
value: '10' value: "10"
- name: CHAOS_NAMESPACE - name: CHAOS_NAMESPACE
value: 'kube-system' value: "kube-system"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -196,6 +210,6 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the coredns pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the coredns pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult engine-coredns-coredns-pod-delete -n <chaos-namespace>` `kubectl describe chaosresult engine-coredns-coredns-pod-delete -n <chaos-namespace>`

View File

@ -0,0 +1,179 @@
---
id: cpu-hog
title: CPU Hog Experiment Details
sidebar_label: CPU Hog
original_id: cpu-hog
---
---
## Experiment Metadata
| Type | Description | Tested K8s Platform |
| ------- | -------------------------------------------- | ------------------- |
| Generic | Exhaust CPU resources on the Kubernetes Node | GKE |
## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml)
- Ensure that the `cpu-hog` experiment resource is available in the cluster by executing `kubectl get chaosexperiments` in the desired namespace. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/cpu-hog)
- There should be administrative access to the platform on which the Kubernetes cluster is hosted, as the recovery of the affected node could be manual. For example, gcloud access to the GKE project
## Entry Criteria
- Application pods are healthy on the respective Nodes before chaos injection
## Exit Criteria
- Application pods may or may not be healthy post chaos injection
## Details
- This experiment causes CPU resource exhaustion on the Kubernetes node. The experiment aims to verify resiliency of applications whose replicas may be evicted on account on nodes turning unschedulable (Not Ready) due to lack of CPU resources.
- The CPU chaos is injected using a daemonset running the linux stress tool (a workload generator). The chaos is effected for a period equalling the TOTAL_CHAOS_DURATION
- Application implies services. Can be reframed as:
Tests application resiliency upon replica evictions caused due to lack of CPU resources
## Integrations
- CPU Hog can be effected using the chaos library: `litmus`
- The desired chaos library can be selected by setting `litmus` as value for the env variable `LIB`
## Steps to Execute the Chaos Experiment
- This Chaos Experiment can be triggered by creating a ChaosEngine resource on the cluster. To understand the values to provide in a ChaosEngine specification, refer [Getting Started](getstarted.md/#prepare-chaosengine)
- Follow the steps in the sections below to create the chaosServiceAccount, prepare the ChaosEngine & execute the experiment.
### Prepare chaosServiceAccount
- Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app) namespace. This example consists of the minimum necessary role permissions to execute the experiment.
#### Sample Rbac Manifest
```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: nginx-sa
namespace: default
labels:
name: nginx-sa
---
# Source: openebs/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: nginx-sa
labels:
name: nginx-sa
rules:
- apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources:
[
"pods",
"daemonsets",
"jobs",
"pods/exec",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: nginx-sa
labels:
name: nginx-sa
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: nginx-sa
subjects:
- kind: ServiceAccount
name: nginx-sa
namespace: default
```
### Prepare ChaosEngine
- Provide the application info in `spec.appinfo`
- Provide the auxiliary applications info (ns & labels) in `spec.auxiliaryAppInfo`
- Override the experiment tunables if desired
#### Supported Experiment Tunables
| Variables | Description | Type | Notes |
| -------------------- | --------------------------------------------------- | --------- | ----------------------------------------- |
| TOTAL_CHAOS_DURATION | The time duration for chaos insertion (seconds) | Optional | Defaults to 60s |
| PLATFORM | The platform on which the chaos experiment will run | Mandatory | Defaults to GKE |
| LIB | The chaos lib used to inject the chaos | Optional | Defaults to `litmus`. Supported: `litmus` |
#### Sample ChaosEngine Manifest
```yaml
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: nginx-chaos
namespace: default
spec:
chaosType: 'infra' # It can be app/infra
auxiliaryAppInfo: "ns1:name=percona,ns2:run=nginx"
appinfo:
appns: default
applabel: 'app=nginx'
appkind: deployment
# It can be app/infra
chaosType: 'infra'
#ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: ""
chaosServiceAccount: nginx-sa
monitoring: false
components:
runner:
image: "litmuschaos/chaos-executor:1.0.0"
type: "go"
# It can be delete/retain
jobCleanUpPolicy: delete
experiments:
- name: cpu-hog
spec:
components:
# set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION
value: '60'
# set chaos platform as desired
- name: PLATFORM
value: 'GKE'
# chaos lib used to inject the chaos
- name: LIB
value: 'litmus'
```
### Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
`kubectl apply -f chaosengine.yml`
### Watch Chaos progress
- Setting up a watch of the CPU consumed by nodes in the Kubernetes Cluster
`watch kubectl top nodes`
### Check Chaos Experiment Result
- Check whether the application is resilient to the CPU hog, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`.
`kubectl describe chaosresult nginx-chaos-cpu-hog -n <application-namespace>`
## Application Pod Failure Demo
- A sample recording of this experiment execution is provided here.

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-cStor-pool-chaos id: cStor-pool-chaos
title: cStor Pool Chaos Experiment Details title: cStor Pool Chaos Experiment Details
sidebar_label: cStor Pool Chaos sidebar_label: cStor Pool Chaos
original_id: cStor-pool-chaos original_id: cStor-pool-chaos
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -73,12 +74,21 @@ metadata:
labels: labels:
name: cStor-pool-chaos-sa name: cStor-pool-chaos-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","deployments","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"deployments",
"jobs",
"configmaps",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -92,7 +102,7 @@ roleRef:
kind: Role kind: Role
name: cStor-pool-chaos-sa name: cStor-pool-chaos-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: cStor-pool-chaos-sa name: cStor-pool-chaos-sa
namespace: openebs namespace: openebs
``` ```
@ -135,15 +145,15 @@ metadata:
namespace: openebs namespace: openebs
spec: spec:
appinfo: appinfo:
appns: 'openebs' appns: "openebs"
applabel: 'app=cstor-pool' applabel: "app=cstor-pool"
appkind: 'deployment' appkind: "deployment"
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
chaosServiceAccount: cStor-pool-chaos-sa chaosServiceAccount: cStor-pool-chaos-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-pool-pod-failure - name: openebs-pool-pod-failure
spec: spec:
@ -151,10 +161,10 @@ spec:
env: env:
# Namespace where openebs has been installed # Namespace where openebs has been installed
- name: OPENEBS_NS - name: OPENEBS_NS
value: 'openebs' value: "openebs"
# please leave it blank, for this experiment # please leave it blank, for this experiment
- name: APP_PVC - name: APP_PVC
value: '' value: ""
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -171,7 +181,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the cStor pool pod is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the cStor pool pod is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult cStor-pool-chaos-openebs-pool-pod-failure -n openebs` `kubectl describe chaosresult cStor-pool-chaos-openebs-pool-pod-failure -n openebs`

View File

@ -0,0 +1,67 @@
---
id: devguide
title: Developer Guide for Chaos Charts
sidebar_label: Developer Guide
original_id: devguide
---
---
This page serves as a guide to develop either a new Chaos Chart or a new experiment in a Chaos Chart which are published at <a href="https://hub.litmuschaos.io" target="_blank">ChaosHub</a>.
Below are some key points to remember before understanding how to write a new chart or an experiment.
> Chaos Charts repository : https://github.com/litmuschaos/chaos-charts
>
> Litmusbooks repository : https://github.com/litmuschaos/litmus-ansible/tree/master/experiments
>
> Website rendering code repository: https://github.com/litmuschaos/charthub.litmuschaos.io
The experiments & chaos libraries are typically written in Ansible, though not mandatory. Ensure that
the experiments can be executed in a container & can read/update the litmuschaos custom resources. For example,
if you are writing an experiment in Go, use this [clientset](https://github.com/litmuschaos/chaos-operator/tree/master/pkg/client)
<hr/>
## Glossary
### Chaos Chart
A group of Choas Experiments put together in a YAML file. Each group or chart has a metadata manifest called `ChartServiceVersion`
that holds data such as `ChartVersion`, `Contributors`, `Description`, `links` etc.., This metadata is rendered on the ChartHub.
A chaos chart also consists of a `package` manifest that is an index of available experiments in the chart.
Here is an example of the [ChartServiceVersion](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/generic.chartserviceversion.yaml) & [package](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/generic.package.yaml) manifests of the generic chaos chart.
### Chaos Experiment
ChaosExperiment is a CRD that specifies the nature of a Chaos Experiment. The YAML file that constitutes a Chaos Experiment CR
is stored under a Chaos Chart of ChaosHub and typically consists of low-level chaos parameters specific to that experiment, set
to their default values.
Here is an example chaos experiment CR for a [pod-delete](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/pod-delete/experiment.yaml) experiment
### Litmus Book
Litmus book is an `ansible` playbook that encompasses the logic of pre-checks, chaos-injection, post-checks, and result-updates.
Typically, these are accompanied by a Kubernetes job that can execute the respective playbook.
Here is an example of the litmus book for the [pod-delete](https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/generic/pod_delete) experiment.
### Chaos functions
The `ansible` business logic inside Litmus books can make use of readily available chaos functions. The chaos functions are available as `task-files` which are wrapped in one of the chaos libraries. See [plugins](plugins.md) for more details.
<hr/>
## Developing a Chaos Experiment
A detailed how-to guide on developing chaos experiments is available [here](https://github.com/litmuschaos/litmus-ansible/tree/master/contribute/developer_guide)
<br/>
<hr/>
<br/>
<br/>

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-disk-fill id: disk-fill
title: Disk Fill Experiment Details title: Disk Fill Experiment Details
sidebar_label: Disk Fill sidebar_label: Disk Fill
original_id: disk-fill original_id: disk-fill
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -89,7 +90,8 @@ spec:
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-fill/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-fill/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -107,9 +109,18 @@ metadata:
labels: labels:
name: disk-fill-sa name: disk-fill-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch"] - apiGroups: ["", "apps", "litmuschaos.io", "batch"]
resources: ["pods","jobs","pods/exec","daemonsets","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"pods/exec",
"daemonsets",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -122,7 +133,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: disk-fill-sa name: disk-fill-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: disk-fill-sa name: disk-fill-sa
namespace: default namespace: default
``` ```
@ -182,7 +193,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-fill/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-fill/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -191,19 +203,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: disk-fill-sa chaosServiceAccount: disk-fill-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: disk-fill - name: disk-fill
spec: spec:
@ -211,9 +223,9 @@ spec:
env: env:
# specify the fill percentage according to the disk pressure required # specify the fill percentage according to the disk pressure required
- name: FILL_PERCENTAGE - name: FILL_PERCENTAGE
value: '80' value: "80"
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -234,7 +246,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the container kill, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the container kill, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-disk-fill -n <application-namespace>` `kubectl describe chaosresult nginx-chaos-disk-fill -n <application-namespace>`

View File

@ -1,10 +1,12 @@
--- ---
id: version-1.1.0-disk-loss id: disk-loss
title: Disk Loss Experiment Details title: Disk Loss Experiment Details
sidebar_label: Disk Loss sidebar_label: Disk Loss
original_id: disk-loss original_id: disk-loss
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
<table> <table>
@ -21,6 +23,7 @@ original_id: disk-loss
</table> </table>
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml)
- Ensure that the `disk-loss` experiment resource is available in the cluster by `kubectl get chaosexperiments` in the desired namespace. If not, install from <a href="https://hub.litmuschaos.io/charts/generic/experiments/disk-loss" target="_blank">here</a> - Ensure that the `disk-loss` experiment resource is available in the cluster by `kubectl get chaosexperiments` in the desired namespace. If not, install from <a href="https://hub.litmuschaos.io/charts/generic/experiments/disk-loss" target="_blank">here</a>
- Ensure to create a Kubernetes secret having the gcloud/aws access configuration(key) in the namespace of `CHAOS_NAMESPACE`. - Ensure to create a Kubernetes secret having the gcloud/aws access configuration(key) in the namespace of `CHAOS_NAMESPACE`.
@ -70,7 +73,8 @@ stringData:
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-loss/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-loss/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -88,9 +92,17 @@ metadata:
labels: labels:
name: nginx-sa name: nginx-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","secrets","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"secrets",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -103,7 +115,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: nginx-sa name: nginx-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: nginx-sa name: nginx-sa
namespace: default namespace: default
``` ```
@ -211,7 +223,8 @@ subjects:
## Sample ChaosEngine Manifest ## Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-loss/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/disk-loss/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -220,21 +233,21 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: nginx-sa chaosServiceAccount: nginx-sa
monitoring: false monitoring: false
components: components:
runner: runner:
image: 'litmuschaos/chaos-executor:1.0.0' image: "litmuschaos/chaos-executor:1.0.0"
type: 'go' type: "go"
# It can be retain/delete # It can be retain/delete
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: disk-loss - name: disk-loss
spec: spec:
@ -242,52 +255,55 @@ spec:
env: env:
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' value: "60"
# set cloud platform name # set cloud platform name
- name: CLOUD_PLATFORM - name: CLOUD_PLATFORM
value: 'GCP' value: "GCP"
# set app_check to check application state # set app_check to check application state
- name: APP_CHECK - name: APP_CHECK
value: 'true' value: "true"
# This is a chaos namespace into which all infra chaos resources are created # This is a chaos namespace into which all infra chaos resources are created
- name: CHAOS_NAMESPACE - name: CHAOS_NAMESPACE
value: 'default' value: "default"
# GCP project ID # GCP project ID
- name: PROJECT_ID - name: PROJECT_ID
value: 'litmus-demo-123' value: "litmus-demo-123"
# Node name of the cluster # Node name of the cluster
- name: NODE_NAME - name: NODE_NAME
value: 'demo-node-123' value: "demo-node-123"
# Disk Name of the node, it must be an external disk. # Disk Name of the node, it must be an external disk.
- name: DISK_NAME - name: DISK_NAME
value: 'demo-disk-123' value: "demo-disk-123"
# Enter the device name which you wanted to mount only for AWS. # Enter the device name which you wanted to mount only for AWS.
- name: DEVICE_NAME - name: DEVICE_NAME
value: '/dev/sdb' value: "/dev/sdb"
# Name of Zone in which node is present (GCP) # Name of Zone in which node is present (GCP)
# Use Region Name when running with AWS (ex: us-central1) # Use Region Name when running with AWS (ex: us-central1)
- name: ZONE_NAME - name: ZONE_NAME
value: 'us-central1-a' value: "us-central1-a"
# ChaosEngine CR name associated with the experiment instance # ChaosEngine CR name associated with the experiment instance
- name: CHAOSENGINE - name: CHAOSENGINE
value: '' value: ""
# Service account used by the litmus # Service account used by the litmus
- name: CHAOS_SERVICE_ACCOUNT - name: CHAOS_SERVICE_ACCOUNT
value: '' value: ""
``` ```
## Create the ChaosEngine Resource ## Create the ChaosEngine Resource
- Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos. - Create the ChaosEngine manifest prepared in the previous step to trigger the Chaos.
`kubectl apply -f chaosengine.yml` `kubectl apply -f chaosengine.yml`
## Watch Chaos progress ## Watch Chaos progress
- Setting up a watch of the app which is using the disk in the Kubernetes Cluster - Setting up a watch of the app which is using the disk in the Kubernetes Cluster
`watch -n 1 kubectl get pods` `watch -n 1 kubectl get pods`
## Check Chaos Experiment Result ## Check Chaos Experiment Result
- Check whether the application is resilient to the disk loss, once the experiment (job) is completed. The ChaosResult resource name is derived like this: <ChaosEngine-Name>-<ChaosExperiment-Name>.
- Check whether the application is resilient to the disk loss, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-disk-loss -n <CHAOS_NAMESPACE>` `kubectl describe chaosresult nginx-chaos-disk-loss -n <CHAOS_NAMESPACE>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-faq-general id: faq-general
title: The What, Why & How of Litmus title: The What, Why & How of Litmus
sidebar_label: General sidebar_label: General
original_id: faq-general original_id: faq-general
--- ---
------
---
[Why should I use Litmus? What is its distinctive feature?](#why-should-i-use-litmus-what-is-its-distinctive-feature) [Why should I use Litmus? What is its distinctive feature?](#why-should-i-use-litmus-what-is-its-distinctive-feature)
@ -36,9 +37,7 @@ original_id: faq-general
[Does Litmus track any usage metrics on the test clusters?](#does-litmus-track-any-usage-metrics-on-the-test-clusters) [Does Litmus track any usage metrics on the test clusters?](#does-litmus-track-any-usage-metrics-on-the-test-clusters)
<hr> <hr/>
### Why should I use Litmus? What is its distinctive feature? ### Why should I use Litmus? What is its distinctive feature?
@ -83,7 +82,6 @@ with “chaosServiceAccounts” which are created by the developers with bare-mi
execute the experiment in question. Visit the [chaos-charts](https://github.com/litmuschaos/chaos-charts) repo execute the experiment in question. Visit the [chaos-charts](https://github.com/litmuschaos/chaos-charts) repo
to view the experiment-specific rbac permissions. For example, here are the [permissions](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/container-kill/rbac.yaml) for container-kill chaos. to view the experiment-specific rbac permissions. For example, here are the [permissions](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/container-kill/rbac.yaml) for container-kill chaos.
### What is the scope of a Litmus Chaos Experiment? ### What is the scope of a Litmus Chaos Experiment?
The chaos CRs (chaosexperiment, chaosengine, chaosresults) themselves are namespace scoped and are installed The chaos CRs (chaosexperiment, chaosengine, chaosresults) themselves are namespace scoped and are installed
@ -214,7 +212,3 @@ env:
name: ANALYTICS name: ANALYTICS
value: 'FALSE' value: 'FALSE'
``` ```

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-faq-troubleshooting id: faq-troubleshooting
title: Troubleshooting Litmus title: "Troubleshooting Litmus"
sidebar_label: Troubleshooting sidebar_label: Troubleshooting
original_id: faq-troubleshooting original_id: faq-troubleshooting
--- ---
------
---
[The Litmus chaos operator is seen to be in CrashLoopBackOff state immediately after installation?](#the-litmus-chaos-operator-is-seen-to-be-in-crashloopbackOff-state-immediately-after-installation) [The Litmus chaos operator is seen to be in CrashLoopBackOff state immediately after installation?](#the-litmus-chaos-operator-is-seen-to-be-in-crashloopbackOff-state-immediately-after-installation)
@ -14,9 +15,7 @@ original_id: faq-troubleshooting
[The experiment pod enters completed state w/o the desired chaos being injected?](#the-experiment-pod-enters-completed-state-wo-the-desired-chaos-being-injected) [The experiment pod enters completed state w/o the desired chaos being injected?](#the-experiment-pod-enters-completed-state-wo-the-desired-chaos-being-injected)
<hr> <hr/>
### The Litmus chaos operator is seen to be in CrashLoopBackOff state immediately after installation? ### The Litmus chaos operator is seen to be in CrashLoopBackOff state immediately after installation?
@ -26,6 +25,7 @@ verified with the following commands:
```console ```console
kubectl get crds | grep chaos kubectl get crds | grep chaos
``` ```
```console ```console
kubectl api-resources | grep chaos kubectl api-resources | grep chaos
``` ```
@ -60,6 +60,7 @@ Some of the possible reasons include:
```console ```console
kubectl annotate <deploy-type>/<application_name> litmuschaos.io/chaos- kubectl annotate <deploy-type>/<application_name> litmuschaos.io/chaos-
``` ```
- The ChaosEngine has the `.spec.engineState` set to `stop`, which causes the operator to refrain from creating chaos - The ChaosEngine has the `.spec.engineState` set to `stop`, which causes the operator to refrain from creating chaos
resources. While it is an unlikely scenario, it is possible to reuse a previously modified ChaosEngine manifest. resources. While it is an unlikely scenario, it is possible to reuse a previously modified ChaosEngine manifest.
@ -87,7 +88,6 @@ Some of the possible reasons may include:
- The chaosServiceAccount specified in the ChaosEngine CR doesnt have sufficient permissions to create the experiment - The chaosServiceAccount specified in the ChaosEngine CR doesnt have sufficient permissions to create the experiment
resources (For existing experiments, appropriate rbac manifests are already provided in chaos-charts/docs). resources (For existing experiments, appropriate rbac manifests are already provided in chaos-charts/docs).
### The experiment pod enters completed state w/o the desired chaos being injected? ### The experiment pod enters completed state w/o the desired chaos being injected?
If the experiment pod enters completed state immediately (or in a few seconds) after creation w/o injecting the desired chaos, If the experiment pod enters completed state immediately (or in a few seconds) after creation w/o injecting the desired chaos,
@ -106,7 +106,3 @@ Some of the possible reasons may include:
- The chaosServiceAccount specified in the ChaosEngine CR doesnt have sufficient permissions to create the experiment - The chaosServiceAccount specified in the ChaosEngine CR doesnt have sufficient permissions to create the experiment
helper-resources (i.e., some experiments in turn create other K8s resources like jobs/daemonsets/deployments etc.., helper-resources (i.e., some experiments in turn create other K8s resources like jobs/daemonsets/deployments etc..,
For existing experiments, appropriate rbac manifests are already provided in chaos-charts/docs). For existing experiments, appropriate rbac manifests are already provided in chaos-charts/docs).

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-getstarted id: getstarted
title: Getting Started with Litmus title: Getting Started with Litmus
sidebar_label: Introduction sidebar_label: Introduction
original_id: getstarted original_id: getstarted
--- ---
------
---
## Pre-requisites ## Pre-requisites
@ -28,9 +29,7 @@ Running chaos on your application involves the following steps:
[Observe chaos results](#observe-chaos-results) [Observe chaos results](#observe-chaos-results)
<hr> <hr/>
### Install Litmus ### Install Litmus
@ -48,14 +47,9 @@ The above command install all the CRDs, required service account configuration,
kubectl get pods -n litmus kubectl get pods -n litmus
``` ```
Expected output: Expected output:
>chaos-operator-ce-554d6c8f9f-slc8k 1/1 Running 0 6m41s
> chaos-operator-ce-554d6c8f9f-slc8k 1/1 Running 0 6m41s
- Verify if chaos CRDs are installed - Verify if chaos CRDs are installed
@ -73,7 +67,7 @@ Expected output:
- Verify if the chaos api resources are successfully created in the desired (application) namespace. - Verify if the chaos api resources are successfully created in the desired (application) namespace.
*Note*: Sometimes, it can take a few seconds for the resources to be available post the CRD installation _Note_: Sometimes, it can take a few seconds for the resources to be available post the CRD installation
``` ```
kubectl api-resources | grep chaos kubectl api-resources | grep chaos
@ -87,23 +81,21 @@ Expected output:
> >
> chaosresults litmuschaos.io true ChaosResult > chaosresults litmuschaos.io true ChaosResult
**NOTE**: **NOTE**:
- In this guide, we shall describe the steps to inject container-kill chaos on an nginx application already deployed in the - In this guide, we shall describe the steps to inject container-kill chaos on an nginx application already deployed in the
nginx namespace. It is a mandatory requirement to ensure that the chaos custom resources (chaosexperiment and chaosengine) nginx namespace. It is a mandatory requirement to ensure that the chaos custom resources (chaosexperiment and chaosengine)
and the experiment specific serviceaccount are created in the same namespace (typically, the same as the namespace of the and the experiment specific serviceaccount are created in the same namespace (typically, the same as the namespace of the
application under test (AUT), in this case nginx). This is done to ensure that the developers/users of the experiment isolate application under test (AUT), in this case nginx). This is done to ensure that the developers/users of the experiment isolate
the chaos to their respective work-namespaces in shared environments. the chaos to their respective work-namespaces in shared environments.
- In all subsequent steps, please follow these instructions by replacing the nginx namespace and labels with that of your - In all subsequent steps, please follow these instructions by replacing the nginx namespace and labels with that of your
application. application.
### Install Chaos Experiments ### Install Chaos Experiments
Chaos experiments contain the actual chaos details. These experiments are installed on your cluster as Kubernetes CRs. Chaos experiments contain the actual chaos details. These experiments are installed on your cluster as Kubernetes CRs.
The Chaos Experiments are grouped as Chaos Charts and are published on <a href=" https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>. The Chaos Experiments are grouped as Chaos Charts and are published on <a href="https://hub.litmuschaos.io" target="_blank">Chaos Hub</a>.
The generic chaos experiments such as `pod-delete`, `container-kill`,` pod-network-latency` are available under Generic Chaos Chart. The generic chaos experiments such as `pod-delete`, `container-kill`,` pod-network-latency` are available under Generic Chaos Chart.
This is the first chart you are recommended to install. This is the first chart you are recommended to install.
@ -127,10 +119,10 @@ has just enough permissions needed to run the container-kill chaos experiment.
**NOTE**: **NOTE**:
- For rbac samples corresponding to other experiments such as, say, pod-delete, please refer the respective experiment folder in - For rbac samples corresponding to other experiments such as, say, pod-delete, please refer the respective experiment folder in
the [chaos-charts](https://github.com/litmuschaos/chaos-charts/tree/master/charts/generic/pod-delete) repository. the [chaos-charts](https://github.com/litmuschaos/chaos-charts/tree/master/charts/generic/pod-delete) repository.
[embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/rbac_nginx_getstarted.yaml yaml"
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/rbac_nginx_getstarted.yaml yaml)
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -149,9 +141,18 @@ metadata:
labels: labels:
name: container-kill-sa name: container-kill-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","jobs","daemonsets","pods/exec","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"daemonsets",
"pods/exec",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -165,10 +166,9 @@ roleRef:
kind: Role kind: Role
name: container-kill-sa name: container-kill-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: container-kill-sa name: container-kill-sa
namespace: nginx namespace: nginx
``` ```
### Annotate your application ### Annotate your application
@ -193,7 +193,8 @@ ChaosEngine connects the application instance to a Chaos Experiment. Copy the fo
`chaosengine.yaml` and update the values of `applabel` , `appns`, `appkind` and `experiments` as per your choice. `chaosengine.yaml` and update the values of `applabel` , `appns`, `appkind` and `experiments` as per your choice.
Change the `chaosServiceAccount` to the name of service account created in above previous steps. Change the `chaosServiceAccount` to the name of service account created in above previous steps.
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/engine_nginx_getstarted.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/engine_nginx_getstarted.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -201,15 +202,15 @@ metadata:
name: nginx-chaos name: nginx-chaos
namespace: nginx namespace: nginx
spec: spec:
annotationCheck: 'true' annotationCheck: "true"
engineState: 'active' engineState: "active"
appinfo: appinfo:
appns: 'nginx' appns: "nginx"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: container-kill-sa chaosServiceAccount: container-kill-sa
# use retain to keep the job for debug # use retain to keep the job for debug
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: container-kill - name: container-kill
spec: spec:
@ -217,7 +218,7 @@ spec:
env: env:
# specify the name of the container to be killed # specify the name of the container to be killed
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
``` ```
### Override Default Chaos Experiments Variables ### Override Default Chaos Experiments Variables
@ -237,20 +238,17 @@ experiments:
value: nginx value: nginx
``` ```
### Run Chaos ### Run Chaos
```console ```console
kubectl apply -f chaosengine.yaml kubectl apply -f chaosengine.yaml
``` ```
### Observe Chaos results ### Observe Chaos results
Describe the ChaosResult CR to know the status of each experiment. The ```spec.verdict``` is set to `Awaited` when the experiment is in progress, eventually changing to either `Pass` or `Fail`. Describe the ChaosResult CR to know the status of each experiment. The `spec.verdict` is set to `Awaited` when the experiment is in progress, eventually changing to either `Pass` or `Fail`.
<strong> NOTE:</strong> ChaosResult CR name will be `<chaos-engine-name>-<chaos-experiment-name>` <strong> NOTE:</strong> ChaosResult CR name will be `{"<chaos-engine-name>-<chaos-experiment-name>"}`
```console ```console
kubectl describe chaosresult nginx-chaos-container-kill -n nginx kubectl describe chaosresult nginx-chaos-container-kill -n nginx

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.1.0-kafka-broker-disk-failure id: kafka-broker-disk-failure
title: Kafka Broker Disk Failure Experiment Details title: Kafka Broker Disk Failure Experiment Details
sidebar_label: Broker Disk Failure sidebar_label: Broker Disk Failure
original_id: kafka-broker-disk-failure original_id: kafka-broker-disk-failure
@ -72,7 +72,8 @@ original_id: kafka-broker-disk-failure
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-disk-failure/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-disk-failure/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -90,9 +91,19 @@ metadata:
labels: labels:
name: kafka-broker-disk-failure-sa name: kafka-broker-disk-failure-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","jobs","pods/exec","statefulsets","secrets","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","delete"] [
"pods",
"jobs",
"pods/exec",
"statefulsets",
"secrets",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -105,10 +116,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: kafka-broker-disk-failure-sa name: kafka-broker-disk-failure-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: kafka-broker-disk-failure-sa name: kafka-broker-disk-failure-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -219,7 +229,7 @@ subjects:
<td> KAFKA_LIVENESS_IMAGE </td> <td> KAFKA_LIVENESS_IMAGE </td>
<td> Image used for liveness message stream </td> <td> Image used for liveness message stream </td>
<td> Optional </td> <td> Optional </td>
<td> Image as `<registry_url>/<repository>/<image>:<tag>` </td> <td> Image as `{"<registry_url>/<repository>/<image>:<tag>"}` </td>
</tr> </tr>
<tr> <tr>
<td> KAFKA_REPLICATION_FACTOR </td> <td> KAFKA_REPLICATION_FACTOR </td>
@ -249,7 +259,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-disk-failure/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-disk-failure/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -258,19 +269,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=cp-kafka' applabel: "app=cp-kafka"
appkind: 'statefulset' appkind: "statefulset"
chaosServiceAccount: kafka-broker-disk-failure-sa chaosServiceAccount: kafka-broker-disk-failure-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: kafka-broker-disk-failure - name: kafka-broker-disk-failure
spec: spec:
@ -278,65 +289,64 @@ spec:
env: env:
# choose based on available kafka broker replicas # choose based on available kafka broker replicas
- name: KAFKA_REPLICATION_FACTOR - name: KAFKA_REPLICATION_FACTOR
value: '3' value: "3"
# get via 'kubectl get pods --show-labels -n <kafka-namespace>' # get via 'kubectl get pods --show-labels -n <kafka-namespace>'
- name: KAFKA_LABEL - name: KAFKA_LABEL
value: 'app=cp-kafka' value: "app=cp-kafka"
- name: KAFKA_NAMESPACE - name: KAFKA_NAMESPACE
value: 'default' value: "default"
# get via 'kubectl get svc -n <kafka-namespace>' # get via 'kubectl get svc -n <kafka-namespace>'
- name: KAFKA_SERVICE - name: KAFKA_SERVICE
value: 'kafka-cp-kafka-headless' value: "kafka-cp-kafka-headless"
# get via 'kubectl get svc -n <kafka-namespace>' # get via 'kubectl get svc -n <kafka-namespace>'
- name: KAFKA_PORT - name: KAFKA_PORT
value: '9092' value: "9092"
# in milliseconds # in milliseconds
- name: KAFKA_CONSUMER_TIMEOUT - name: KAFKA_CONSUMER_TIMEOUT
value: '70000' value: "70000"
# ensure to set the instance name if using KUDO operator # ensure to set the instance name if using KUDO operator
- name: KAFKA_INSTANCE_NAME - name: KAFKA_INSTANCE_NAME
value: '' value: ""
- name: ZOOKEEPER_NAMESPACE - name: ZOOKEEPER_NAMESPACE
value: 'default' value: "default"
# get via 'kubectl get pods --show-labels -n <zk-namespace>' # get via 'kubectl get pods --show-labels -n <zk-namespace>'
- name: ZOOKEEPER_LABEL - name: ZOOKEEPER_LABEL
value: 'app=cp-zookeeper' value: "app=cp-zookeeper"
# get via 'kubectl get svc -n <zk-namespace> # get via 'kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_SERVICE - name: ZOOKEEPER_SERVICE
value: 'kafka-cp-zookeeper-headless' value: "kafka-cp-zookeeper-headless"
# get via 'kubectl get svc -n <zk-namespace> # get via 'kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_PORT - name: ZOOKEEPER_PORT
value: '2181' value: "2181"
# get from google cloud console or 'gcloud projects list' # get from google cloud console or 'gcloud projects list'
- name: PROJECT_ID - name: PROJECT_ID
value: 'argon-tractor-237811' value: "argon-tractor-237811"
# attached to (in use by) node where 'kafka-0' is scheduled # attached to (in use by) node where 'kafka-0' is scheduled
- name: DISK_NAME - name: DISK_NAME
value: 'disk-1' value: "disk-1"
- name: ZONE_NAME - name: ZONE_NAME
value: 'us-central1-a' value: "us-central1-a"
# Uses 'disk-1' attached to the node on which it is scheduled # Uses 'disk-1' attached to the node on which it is scheduled
- name: KAFKA_BROKER - name: KAFKA_BROKER
value: 'kafka-0' value: "kafka-0"
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' value: "60"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -354,7 +364,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the kafka deployment is resilient to the broker disk failure, once the experiment (job) is completed. - Check whether the kafka deployment is resilient to the broker disk failure, once the experiment (job) is completed.
The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult kafka-chaos-kafka-broker-disk-failure -n <kafka-namespace>` `kubectl describe chaosresult kafka-chaos-kafka-broker-disk-failure -n <kafka-namespace>`
@ -373,4 +383,4 @@ spec:
- TODO: A sample recording of this experiment execution is provided here. - TODO: A sample recording of this experiment execution is provided here.
------ ---

View File

@ -1,5 +1,5 @@
--- ---
id: version-1.1.0-kafka-broker-pod-failure id: kafka-broker-pod-failure
title: Kafka Broker Pod Failure Experiment Details title: Kafka Broker Pod Failure Experiment Details
sidebar_label: Broker Pod Failure sidebar_label: Broker Pod Failure
original_id: kafka-broker-pod-failure original_id: kafka-broker-pod-failure
@ -37,7 +37,6 @@ original_id: kafka-broker-pod-failure
- Ensure that the kafka-broker-disk failure experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/kafka/experiments/kafka-broker-pod-failure) - Ensure that the kafka-broker-disk failure experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/kafka/experiments/kafka-broker-pod-failure)
## Entry Criteria ## Entry Criteria
- Kafka Cluster (comprising the Kafka-broker & Zookeeper Statefulsets) is healthy - Kafka Cluster (comprising the Kafka-broker & Zookeeper Statefulsets) is healthy
@ -71,7 +70,8 @@ original_id: kafka-broker-pod-failure
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-pod-failure/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-pod-failure/rbac.yaml yaml"
```yaml ```yaml
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
@ -88,12 +88,23 @@ metadata:
labels: labels:
name: kafka-broker-pod-failure-sa name: kafka-broker-pod-failure-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","deployments","jobs","pods/exec","statefulsets","configmaps","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","delete"] [
- apiGroups: [""] "pods",
"deployments",
"jobs",
"pods/exec",
"statefulsets",
"configmaps",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -106,7 +117,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: kafka-broker-pod-failure-sa name: kafka-broker-pod-failure-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: kafka-broker-pod-failure-sa name: kafka-broker-pod-failure-sa
namespace: default namespace: default
``` ```
@ -195,7 +206,7 @@ subjects:
<td> KAFKA_LIVENESS_IMAGE </td> <td> KAFKA_LIVENESS_IMAGE </td>
<td> Image used for liveness message stream </td> <td> Image used for liveness message stream </td>
<td> Optional </td> <td> Optional </td>
<td> Image as `<registry_url>/<repository>/<image>:<tag>` </td> <td> Image as `{"<registry_url>/<repository>/<image>:<tag>"}` </td>
</tr> </tr>
<tr> <tr>
<td> KAFKA_REPLICATION_FACTOR </td> <td> KAFKA_REPLICATION_FACTOR </td>
@ -243,7 +254,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-pod-failure/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/kafka/kafka-broker-pod-failure/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -252,19 +264,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=cp-kafka' applabel: "app=cp-kafka"
appkind: 'statefulset' appkind: "statefulset"
chaosServiceAccount: kafka-broker-pod-failure-sa chaosServiceAccount: kafka-broker-pod-failure-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: kafka-broker-pod-failure - name: kafka-broker-pod-failure
spec: spec:
@ -272,57 +284,57 @@ spec:
env: env:
# choose based on available kafka broker replicas # choose based on available kafka broker replicas
- name: KAFKA_REPLICATION_FACTOR - name: KAFKA_REPLICATION_FACTOR
value: '3' value: "3"
# get via 'kubectl get pods --show-labels -n <kafka-namespace>' # get via 'kubectl get pods --show-labels -n <kafka-namespace>'
- name: KAFKA_LABEL - name: KAFKA_LABEL
value: 'app=cp-kafka' value: "app=cp-kafka"
- name: KAFKA_NAMESPACE - name: KAFKA_NAMESPACE
value: 'default' value: "default"
# get via 'kubectl get svc -n <kafka-namespace>' # get via 'kubectl get svc -n <kafka-namespace>'
- name: KAFKA_SERVICE - name: KAFKA_SERVICE
value: 'kafka-cp-kafka-headless' value: "kafka-cp-kafka-headless"
# get via 'kubectl get svc -n <kafka-namespace>' # get via 'kubectl get svc -n <kafka-namespace>'
- name: KAFKA_PORT - name: KAFKA_PORT
value: '9092' value: "9092"
# in milliseconds # in milliseconds
- name: KAFKA_CONSUMER_TIMEOUT - name: KAFKA_CONSUMER_TIMEOUT
value: '70000' value: "70000"
# ensure to set the instance name if using KUDO operator # ensure to set the instance name if using KUDO operator
- name: KAFKA_INSTANCE_NAME - name: KAFKA_INSTANCE_NAME
value: '' value: ""
- name: ZOOKEEPER_NAMESPACE - name: ZOOKEEPER_NAMESPACE
value: 'default' value: "default"
# get via 'kubectl get pods --show-labels -n <zk-namespace>' # get via 'kubectl get pods --show-labels -n <zk-namespace>'
- name: ZOOKEEPER_LABEL - name: ZOOKEEPER_LABEL
value: 'app=cp-zookeeper' value: "app=cp-zookeeper"
# get via 'kubectl get svc -n <zk-namespace> # get via 'kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_SERVICE - name: ZOOKEEPER_SERVICE
value: 'kafka-cp-zookeeper-headless' value: "kafka-cp-zookeeper-headless"
# get via 'kubectl get svc -n <zk-namespace> # get via 'kubectl get svc -n <zk-namespace>
- name: ZOOKEEPER_PORT - name: ZOOKEEPER_PORT
value: '2181' value: "2181"
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' value: "60"
# set chaos interval (in sec) as desired # set chaos interval (in sec) as desired
- name: CHAOS_INTERVAL - name: CHAOS_INTERVAL
value: '20' value: "20"
# pod failures without '--force' & default terminationGracePeriodSeconds # pod failures without '--force' & default terminationGracePeriodSeconds
- name: FORCE - name: FORCE
value: 'false' value: "false"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -340,7 +352,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the kafka deployment is resilient to the broker pod failure, once the experiment (job) is completed. - Check whether the kafka deployment is resilient to the broker pod failure, once the experiment (job) is completed.
The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult kafka-chaos-kafka-broker-pod-failure -n <kafka-namespace>` `kubectl describe chaosresult kafka-chaos-kafka-broker-pod-failure -n <kafka-namespace>`
@ -348,4 +360,4 @@ spec:
- TODO: A sample recording of this experiment execution is provided here. - TODO: A sample recording of this experiment execution is provided here.
------ ---

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-node-cpu-hog id: node-cpu-hog
title: Node CPU Hog Experiment Details title: Node CPU Hog Experiment Details
sidebar_label: Node CPU Hog sidebar_label: Node CPU Hog
original_id: node-cpu-hog original_id: node-cpu-hog
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -26,6 +27,7 @@ original_id: node-cpu-hog
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://raw.githubusercontent.com/litmuschaos/pages/master/docs/litmus-operator-latest.yaml)
- Ensure that the `node-cpu-hog` experiment resource is available in the cluster by executing `kubectl get chaosexperiments` in the desired namespace. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/node-cpu-hog) - Ensure that the `node-cpu-hog` experiment resource is available in the cluster by executing `kubectl get chaosexperiments` in the desired namespace. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/node-cpu-hog)
- There should be administrative access to the platform on which the Kubernetes cluster is hosted, as the recovery of the affected node could be manual. For example, gcloud access to the GKE project - There should be administrative access to the platform on which the Kubernetes cluster is hosted, as the recovery of the affected node could be manual. For example, gcloud access to the GKE project
## Entry Criteria ## Entry Criteria
- Application pods are healthy on the respective Nodes before chaos injection - Application pods are healthy on the respective Nodes before chaos injection
@ -39,7 +41,7 @@ original_id: node-cpu-hog
- This experiment causes CPU resource exhaustion on the Kubernetes node. The experiment aims to verify resiliency of applications whose replicas may be evicted on account on nodes turning unschedulable (Not Ready) due to lack of CPU resources. - This experiment causes CPU resource exhaustion on the Kubernetes node. The experiment aims to verify resiliency of applications whose replicas may be evicted on account on nodes turning unschedulable (Not Ready) due to lack of CPU resources.
- The CPU chaos is injected using a daemonset running the linux stress tool (a workload generator). The chaos is effected for a period equalling the TOTAL_CHAOS_DURATION - The CPU chaos is injected using a daemonset running the linux stress tool (a workload generator). The chaos is effected for a period equalling the TOTAL_CHAOS_DURATION
- Application implies services. Can be reframed as: - Application implies services. Can be reframed as:
Tests application resiliency upon replica evictions caused due to lack of CPU resources Tests application resiliency upon replica evictions caused due to lack of CPU resources
## Integrations ## Integrations
@ -58,7 +60,8 @@ Tests application resiliency upon replica evictions caused due to lack of CPU re
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-cpu-hog/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-cpu-hog/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -76,12 +79,21 @@ metadata:
labels: labels:
name: node-cpu-hog-sa name: node-cpu-hog-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","daemonsets","jobs","pods/exec","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"daemonsets",
"jobs",
"pods/exec",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -94,7 +106,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: node-cpu-hog-sa name: node-cpu-hog-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: node-cpu-hog-sa name: node-cpu-hog-sa
namespace: default namespace: default
``` ```
@ -142,7 +154,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-cpu-hog/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-cpu-hog/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -151,19 +164,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: node-cpu-hog-sa chaosServiceAccount: node-cpu-hog-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: node-cpu-hog - name: node-cpu-hog
spec: spec:
@ -171,13 +184,13 @@ spec:
env: env:
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' value: "60"
# set chaos platform as desired # set chaos platform as desired
- name: PLATFORM - name: PLATFORM
value: 'GKE' value: "GKE"
# chaos lib used to inject the chaos # chaos lib used to inject the chaos
- name: LIB - name: LIB
value: 'litmus' value: "litmus"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -194,7 +207,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the CPU hog, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the CPU hog, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-node-cpu-hog -n <application-namespace>` `kubectl describe chaosresult nginx-chaos-node-cpu-hog -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-node-drain id: node-drain
title: Node Drain Experiment Details title: Node Drain Experiment Details
sidebar_label: Node Drain sidebar_label: Node Drain
original_id: node-drain original_id: node-drain
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -59,7 +60,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-drain/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-drain/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -77,12 +79,21 @@ metadata:
labels: labels:
name: node-drain-sa name: node-drain-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","extensions"] - apiGroups: ["", "litmuschaos.io", "batch", "extensions"]
resources: ["pods","jobs","chaosengines","daemonsets","pods/eviction","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"jobs",
"chaosengines",
"daemonsets",
"pods/eviction",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs: ["patch","get","list"] verbs: ["patch", "get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -95,10 +106,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: node-drain-sa name: node-drain-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: node-drain-sa name: node-drain-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -138,7 +148,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-drain/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/node-drain/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -147,19 +158,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: node-drain-sa chaosServiceAccount: node-drain-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: node-drain - name: node-drain
spec: spec:
@ -167,7 +178,7 @@ spec:
env: env:
# set node name # set node name
- name: APP_NODE - name: APP_NODE
value: 'node-1' value: "node-1"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -184,7 +195,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the node drain, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the node drain, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-node-drain -n <application-namespace>` `kubectl describe chaosresult nginx-chaos-node-drain -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.2.0-openebs-control-plane-chaos id: openebs-control-plane-chaos
title: OpenEBS Control Plane Chaos Experiment Details title: OpenEBS Control Plane Chaos Experiment Details
sidebar_label: Control Plane Chaos sidebar_label: Control Plane Chaos
original_id: openebs-control-plane-chaos original_id: openebs-control-plane-chaos
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -58,14 +59,14 @@ original_id: openebs-control-plane-chaos
- Follow the steps in the sections below to create the chaosServiceAccount, prepare the ChaosEngine & execute the experiment. - Follow the steps in the sections below to create the chaosServiceAccount, prepare the ChaosEngine & execute the experiment.
### Prepare chaosServiceAccount ### Prepare chaosServiceAccount
Use this sample RBAC manifest to create a chaosServiceAccount in the desired (openebs) namespace. This example consists of the minimum necessary role permissions to execute the experiment. Use this sample RBAC manifest to create a chaosServiceAccount in the desired (openebs) namespace. This example consists of the minimum necessary role permissions to execute the experiment.
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-control-plane-chaos/rbac.yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-control-plane-chaos/rbac.yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -84,12 +85,21 @@ metadata:
labels: labels:
name: control-plane-sa name: control-plane-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","deployments","pods/log","events","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"deployments",
"jobs",
"configmaps",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -103,7 +113,7 @@ roleRef:
kind: Role kind: Role
name: control-plane-sa name: control-plane-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: control-plane-sa name: control-plane-sa
namespace: openebs namespace: openebs
``` ```
@ -132,7 +142,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-control-plane-chaos/engine.yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-control-plane-chaos/engine.yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -141,34 +152,34 @@ metadata:
namespace: openebs namespace: openebs
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
appinfo: appinfo:
appns: 'openebs' appns: "openebs"
applabel: 'name=maya-apiserver' applabel: "name=maya-apiserver"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: control-plane-sa chaosServiceAccount: control-plane-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-control-plane-chaos - name: openebs-control-plane-chaos
spec: spec:
components: components:
env: env:
- name: OPENEBS_NAMESPACE - name: OPENEBS_NAMESPACE
value: 'openebs' value: "openebs"
## Period to wait before injection of chaos ## Period to wait before injection of chaos
- name: RAMP_TIME - name: RAMP_TIME
value: '10' value: "10"
- name: FORCE - name: FORCE
value: '' value: ""
- name: LIB - name: LIB
value: '' value: ""
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -185,7 +196,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the OpenEBS control plane is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource naming convention is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the OpenEBS control plane is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource naming convention is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult control-plane-chaos-openebs-control-plane-chaos -n openebs` `kubectl describe chaosresult control-plane-chaos-openebs-control-plane-chaos -n openebs`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-openebs-pool-container-failure id: openebs-pool-container-failure
title: OpenEBS Pool Container Failure Experiment Details title: OpenEBS Pool Container Failure Experiment Details
sidebar_label: Pool Container Failure sidebar_label: Pool Container Failure
original_id: openebs-pool-container-failure original_id: openebs-pool-container-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -28,6 +29,7 @@ original_id: openebs-pool-container-failure
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `openebs-pool-container-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-pool-container-failure) - Ensure that the `openebs-pool-container-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-pool-container-failure)
- The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox. - The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox.
- For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -42,6 +44,7 @@ original_id: openebs-pool-container-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -56,6 +59,7 @@ original_id: openebs-pool-container-failure
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -98,7 +102,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-container-failure/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-container-failure/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -117,9 +122,32 @@ metadata:
labels: labels:
name: pool-container-failure-sa name: pool-container-failure-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - apiGroups:
resources: ["pods","jobs","daemonsets","replicasets","pods/exec","configmaps","secrets","persistentvolumeclaims","cstorvolumereplicas","chaosexperiments","chaosresults","chaosengines"] [
verbs: ["create","list","get","patch","update","delete"] "",
"apps",
"litmuschaos.io",
"batch",
"extensions",
"storage.k8s.io",
"openebs.io",
]
resources:
[
"pods",
"jobs",
"daemonsets",
"replicasets",
"pods/exec",
"configmaps",
"secrets",
"persistentvolumeclaims",
"cstorvolumereplicas",
"chaosexperiments",
"chaosresults",
"chaosengines",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -132,7 +160,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: pool-container-failure-sa name: pool-container-failure-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pool-container-failure-sa name: pool-container-failure-sa
namespace: default namespace: default
``` ```
@ -186,7 +214,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-container-failure/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-container-failure/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -195,28 +224,28 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pool-container-failure-sa chaosServiceAccount: pool-container-failure-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-pool-container-failure - name: openebs-pool-container-failure
spec: spec:
components: components:
env: env:
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: 'deployment' value: "deployment"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -234,7 +263,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the pool pod container failure, once the experiment (job) is completed. The ChaosResult resource naming convention - Check whether the application is resilient to the pool pod container failure, once the experiment (job) is completed. The ChaosResult resource naming convention
is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult target-chaos-openebs-pool-container-failure -n <application-namespace>` `kubectl describe chaosresult target-chaos-openebs-pool-container-failure -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.2.0-openebs-pool-network-delay id: openebs-pool-network-delay
title: OpenEBS Pool Network Latency Experiment Details title: OpenEBS Pool Network Latency Experiment Details
sidebar_label: Pool Network Latency sidebar_label: Pool Network Latency
original_id: openebs-pool-network-delay original_id: openebs-pool-network-delay
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -47,6 +48,7 @@ data:
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
```yaml ```yaml
@ -61,6 +63,7 @@ data:
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace while performing application health checks in its respective namespace. - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace while performing application health checks in its respective namespace.
## Entry Criteria ## Entry Criteria
@ -101,7 +104,9 @@ If the experiment tunable DATA_PERSISTENCE is set to 'mysql' or 'busybox':
Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app)namespace. This example consists of the minimum necessary cluster role permissions to execute the experiment. Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app)namespace. This example consists of the minimum necessary cluster role permissions to execute the experiment.
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-delay/rbac.yaml)
[embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-delay/rbac.yaml"
```yaml ```yaml
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
@ -119,9 +124,34 @@ metadata:
labels: labels:
name: pool-network-delay-sa name: pool-network-delay-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - apiGroups:
resources: ["pods","pods/exec","pods/log","events","jobs","configmaps","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosengines","chaosexperiments","chaosresults","cstorpools","cstorvolumereplicas","replicasets"] [
verbs: ["create","list","get","patch","update","delete"] "",
"apps",
"litmuschaos.io",
"batch",
"extensions",
"storage.k8s.io",
"openebs.io",
]
resources:
[
"pods",
"pods/exec",
"jobs",
"configmaps",
"services",
"persistentvolumeclaims",
"storageclasses",
"persistentvolumes",
"chaosengines",
"chaosexperiments",
"chaosresults",
"cstorpools",
"cstorvolumereplicas",
"replicasets",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -134,7 +164,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: pool-network-delay-sa name: pool-network-delay-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pool-network-delay-sa name: pool-network-delay-sa
namespace: default namespace: default
``` ```
@ -187,7 +217,9 @@ subjects:
</table> </table>
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-delay/engine.yaml)
[embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-delay/engine.yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -195,33 +227,32 @@ metadata:
name: pool-chaos name: pool-chaos
namespace: default namespace: default
spec: spec:
annotationCheck: 'false' annotationCheck: "false"
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pool-network-delay-sa chaosServiceAccount: pool-network-delay-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-pool-network-delay - name: openebs-pool-network-delay
spec: spec:
components: components:
env: env:
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: OPENEBS_NAMESPACE - name: OPENEBS_NAMESPACE
value: 'openebs' value: "openebs"
# in milliseconds # in milliseconds
- name: NETWORK_DELAY - name: NETWORK_DELAY
value: '60000' value: "60000"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' # in seconds value: "60" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -239,7 +270,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the pool network delays, once the experiment (job) is completed. The ChaosResult resource naming convention is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the pool network delays, once the experiment (job) is completed. The ChaosResult resource naming convention is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult pool-chaos-openebs-pool-network-delay -n <application-namespace>` `kubectl describe chaosresult pool-chaos-openebs-pool-network-delay -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.2.0-openebs-pool-network-loss id: openebs-pool-network-loss
title: OpenEBS Pool Network Loss Experiment Details title: OpenEBS Pool Network Loss Experiment Details
sidebar_label: Pool Network Loss sidebar_label: Pool Network Loss
original_id: openebs-pool-network-loss original_id: openebs-pool-network-loss
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -47,6 +48,7 @@ data:
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
```yaml ```yaml
@ -61,6 +63,7 @@ data:
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace while performing application health checks in its respective namespace. - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace while performing application health checks in its respective namespace.
## Entry Criteria ## Entry Criteria
@ -102,7 +105,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-loss/rbac.yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-loss/rbac.yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -121,7 +125,7 @@ metadata:
labels: labels:
name: pool-network-loss-sa name: pool-network-loss-sa
rules: rules:
- apiGroups: - apiGroups:
- "" - ""
- "apps" - "apps"
- "litmuschaos.io" - "litmuschaos.io"
@ -133,8 +137,6 @@ rules:
- "pods" - "pods"
- "pods/exec" - "pods/exec"
- "jobs" - "jobs"
- "pods/log"
- "events"
- "configmaps" - "configmaps"
- "services" - "services"
- "persistentvolumeclaims" - "persistentvolumeclaims"
@ -166,7 +168,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: pool-network-loss-sa name: pool-network-loss-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pool-network-loss-sa name: pool-network-loss-sa
namespace: default namespace: default
``` ```
@ -219,7 +221,9 @@ subjects:
</table> </table>
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-loss/engine.yaml)
[embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-network-loss/engine.yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -227,38 +231,37 @@ metadata:
name: pool-chaos name: pool-chaos
namespace: default namespace: default
spec: spec:
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pool-network-loss-sa chaosServiceAccount: pool-network-loss-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-pool-network-loss - name: openebs-pool-network-loss
spec: spec:
components: components:
env: env:
- name: FORCE - name: FORCE
value: 'true' value: "true"
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: OPENEBS_NAMESPACE - name: OPENEBS_NAMESPACE
value: 'openebs' value: "openebs"
- name: NETWORK_PACKET_LOSS_PERCENTAGE - name: NETWORK_PACKET_LOSS_PERCENTAGE
value: '100' value: "100"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '120' # in seconds value: "120" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -276,7 +279,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the pool network loss, once the experiment (job) is completed. The ChaosResult resource naming convention is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the pool network loss, once the experiment (job) is completed. The ChaosResult resource naming convention is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult pool-chaos-openebs-pool-network-loss -n <application-namespace>` `kubectl describe chaosresult pool-chaos-openebs-pool-network-loss -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-openebs-pool-pod-failure id: openebs-pool-pod-failure
title: OpenEBS Pool Pod Failure Experiment Details title: OpenEBS Pool Pod Failure Experiment Details
sidebar_label: Pool Pod Failure sidebar_label: Pool Pod Failure
original_id: openebs-pool-pod-failure original_id: openebs-pool-pod-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -28,6 +29,7 @@ original_id: openebs-pool-pod-failure
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `openebs-pool-pod-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-pool-pod-failure) - Ensure that the `openebs-pool-pod-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-pool-pod-failure)
- The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox. - The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox.
- For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -42,6 +44,7 @@ original_id: openebs-pool-pod-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -56,6 +59,7 @@ original_id: openebs-pool-pod-failure
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace while performing application health checks in its respective namespace. - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace while performing application health checks in its respective namespace.
## Entry Criteria ## Entry Criteria
@ -95,7 +99,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-pod-failure/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-pod-failure/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -114,12 +119,35 @@ metadata:
labels: labels:
name: pool-pod-failure-sa name: pool-pod-failure-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io","openebs.io"] - apiGroups:
resources: ["pods","jobs","deployments","configmaps","secrets","replicasets","persistentvolumeclaims","storageclasses","cstorvolumereplicas","chaosexperiments","chaosresults","chaosengines"] [
verbs: ["create","list","get","patch","update","delete"] "",
- apiGroups: [""] "apps",
"litmuschaos.io",
"batch",
"extensions",
"storage.k8s.io",
"openebs.io",
]
resources:
[
"pods",
"jobs",
"deployments",
"configmaps",
"secrets",
"replicasets",
"persistentvolumeclaims",
"storageclasses",
"cstorvolumereplicas",
"chaosexperiments",
"chaosresults",
"chaosengines",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs: ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -132,7 +160,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: pool-pod-failure-sa name: pool-pod-failure-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pool-pod-failure-sa name: pool-pod-failure-sa
namespace: default namespace: default
``` ```
@ -180,7 +208,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-pod-failure/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-pool-pod-failure/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -189,30 +218,30 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pool-pod-failure-sa chaosServiceAccount: pool-pod-failure-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-pool-pod-failure - name: openebs-pool-pod-failure
spec: spec:
components: components:
env: env:
- name: FORCE - name: FORCE
value: 'true' value: "true"
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: 'deployment' value: "deployment"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -229,7 +258,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the pool pod failure, once the experiment (job) is completed. The ChaosResult resource naming convention is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the pool pod failure, once the experiment (job) is completed. The ChaosResult resource naming convention is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult target-chaos-openebs-pool-pod-failure -n <application-namespace>` `kubectl describe chaosresult target-chaos-openebs-pool-pod-failure -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-openebs-target-container-failure id: openebs-target-container-failure
title: OpenEBS Target Container Failure Experiment Details title: OpenEBS Target Container Failure Experiment Details
sidebar_label: Target Container Failure sidebar_label: Target Container Failure
original_id: openebs-target-container-failure original_id: openebs-target-container-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -28,6 +29,7 @@ original_id: openebs-target-container-failure
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `openebs-target-container-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-container-failure) - Ensure that the `openebs-target-container-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-container-failure)
- The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox. - The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox.
- For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -42,6 +44,7 @@ original_id: openebs-target-container-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -56,6 +59,7 @@ original_id: openebs-target-container-failure
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -99,7 +103,8 @@ If the experiment tunable DATA_PERSISTENCE is set to 'enabled':
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-container-failure/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-container-failure/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -118,9 +123,23 @@ metadata:
labels: labels:
name: target-container-failure-sa name: target-container-failure-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps","storage.k8s.io"] - apiGroups: ["", "litmuschaos.io", "batch", "apps", "storage.k8s.io"]
resources: ["pods","jobs","pods/exec","daemonsets","configmaps","secrets","persistentvolumeclaims","storageclasses","persistentvolumes","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
"pods",
"jobs",
"pods/exec",
"daemonsets",
"configmaps",
"secrets",
"persistentvolumeclaims",
"storageclasses",
"persistentvolumes",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -133,7 +152,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: target-container-failure-sa name: target-container-failure-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: target-container-failure-sa name: target-container-failure-sa
namespace: default namespace: default
``` ```
@ -163,7 +182,7 @@ subjects:
<td> LIB_IMAGE </td> <td> LIB_IMAGE </td>
<td> The chaos library image used to run the kill command </td> <td> The chaos library image used to run the kill command </td>
<td> Optional </td> <td> Optional </td>
<td> Defaults to `gaiaadm/pumba:0.4.8`. Supported: `{docker : gaiaadm/pumba:0.4.8, containerd: gprasath/crictl:ci}` </td> <td> Defaults to `gaiaadm/pumba:0.4.8`. Supported: `{"{docker : gaiaadm/pumba:0.4.8, containerd: gprasath/crictl:ci}"}` </td>
</tr> </tr>
<tr> <tr>
<td> CONTAINER_RUNTIME </td> <td> CONTAINER_RUNTIME </td>
@ -199,7 +218,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-container-failure/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-container-failure/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -208,30 +228,30 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: target-container-failure-sa chaosServiceAccount: target-container-failure-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-target-container-failure - name: openebs-target-container-failure
spec: spec:
components: components:
env: env:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'cstor-istgt' value: "cstor-istgt"
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: 'deployment' value: "deployment"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -249,7 +269,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the target container kill, once the experiment (job) is completed. The ChaosResult resource naming convention - Check whether the application is resilient to the target container kill, once the experiment (job) is completed. The ChaosResult resource naming convention
is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult target-chaos-openebs-target-container-failure -n <application-namespace>` `kubectl describe chaosresult target-chaos-openebs-target-container-failure -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.2.0-openebs-target-network-delay id: openebs-target-network-delay
title: OpenEBS Target Network Latency Experiment Details title: OpenEBS Target Network Latency Experiment Details
sidebar_label: Target Network Latency sidebar_label: Target Network Latency
original_id: openebs-target-network-delay original_id: openebs-target-network-delay
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -29,6 +30,7 @@ original_id: openebs-target-network-delay
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `openebs-target-network-delay` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-network-delay) - Ensure that the `openebs-target-network-delay` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-network-delay)
- The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox. - The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox.
- For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -43,6 +45,7 @@ original_id: openebs-target-network-delay
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -57,6 +60,7 @@ original_id: openebs-target-network-delay
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -99,7 +103,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-delay/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-delay/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -118,9 +123,24 @@ metadata:
labels: labels:
name: target-network-delay-sa name: target-network-delay-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - apiGroups:
resources: ["pods","pods/exec","pods/log","events","jobs","configmaps","secrets","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosexperiments","chaosresults","chaosengines"] ["", "apps", "litmuschaos.io", "batch", "extensions", "storage.k8s.io"]
verbs: ["create","list","get","patch","update","delete"] resources:
[
"pods",
"pods/exec",
"jobs",
"configmaps",
"secrets",
"services",
"persistentvolumeclaims",
"storageclasses",
"persistentvolumes",
"chaosexperiments",
"chaosresults",
"chaosengines",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -133,7 +153,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: target-network-delay-sa name: target-network-delay-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: target-network-delay-sa name: target-network-delay-sa
namespace: default namespace: default
``` ```
@ -205,7 +225,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-delay/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-delay/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -214,38 +235,38 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: target-network-delay-sa chaosServiceAccount: target-network-delay-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-target-network-delay - name: openebs-target-network-delay
spec: spec:
components: components:
env: env:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'cstor-istgt' value: "cstor-istgt"
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: 'deployment' value: "deployment"
- name: NETWORK_DELAY - name: NETWORK_DELAY
value: '30000' value: "30000"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' # in seconds value: "60" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -264,7 +285,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the target network delays, once the experiment (job) is completed. The ChaosResult resource naming - Check whether the application is resilient to the target network delays, once the experiment (job) is completed. The ChaosResult resource naming
convention is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. convention is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult target-chaos-openebs-target-network-delay -n <application-namespace>` `kubectl describe chaosresult target-chaos-openebs-target-network-delay -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-openebs-target-network-loss id: openebs-target-network-loss
title: OpenEBS Target Network Loss Experiment Details title: OpenEBS Target Network Loss Experiment Details
sidebar_label: Target Network Loss sidebar_label: Target Network Loss
original_id: openebs-target-network-loss original_id: openebs-target-network-loss
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -29,6 +30,7 @@ original_id: openebs-target-network-loss
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `openebs-target-network-loss` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-network-loss) - Ensure that the `openebs-target-network-loss` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-network-loss)
- The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox. - The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox.
- For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -43,6 +45,7 @@ original_id: openebs-target-network-loss
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -57,6 +60,7 @@ original_id: openebs-target-network-loss
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -99,7 +103,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-loss/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-loss/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -118,9 +123,24 @@ metadata:
labels: labels:
name: target-network-loss-sa name: target-network-loss-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - apiGroups:
resources: ["pods","pods/exec","jobs","configmaps","secrets","services","persistentvolumeclaims","storageclasses","persistentvolumes","chaosexperiments","chaosresults","chaosengines"] ["", "apps", "litmuschaos.io", "batch", "extensions", "storage.k8s.io"]
verbs: ["create","list","get","patch","update","delete"] resources:
[
"pods",
"pods/exec",
"jobs",
"configmaps",
"secrets",
"services",
"persistentvolumeclaims",
"storageclasses",
"persistentvolumes",
"chaosexperiments",
"chaosresults",
"chaosengines",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -133,7 +153,7 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: target-network-loss-sa name: target-network-loss-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: target-network-loss-sa name: target-network-loss-sa
namespace: default namespace: default
``` ```
@ -193,7 +213,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-loss/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-network-loss/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -202,35 +223,35 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: target-network-loss-sa chaosServiceAccount: target-network-loss-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-target-network-loss - name: openebs-target-network-loss
spec: spec:
components: components:
env: env:
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'cstor-istgt' value: "cstor-istgt"
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: 'deployment' value: "deployment"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '120' # in seconds value: "120" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -249,7 +270,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the target network loss, once the experiment (job) is completed. The ChaosResult resource naming - Check whether the application is resilient to the target network loss, once the experiment (job) is completed. The ChaosResult resource naming
convention is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. convention is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult target-chaos-openebs-target-network-loss -n <application-namespace>` `kubectl describe chaosresult target-chaos-openebs-target-network-loss -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.2.0-openebs-target-pod-failure id: openebs-target-pod-failure
title: OpenEBS Target Pod Failure Experiment Details title: OpenEBS Target Pod Failure Experiment Details
sidebar_label: Target Pod Failure sidebar_label: Target Pod Failure
original_id: openebs-target-pod-failure original_id: openebs-target-pod-failure
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -28,6 +29,7 @@ original_id: openebs-target-pod-failure
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `openebs-target-pod-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-pod-failure) - Ensure that the `openebs-target-pod-failure` experiment resource is available in the cluster. If not, install from [here](https://hub.litmuschaos.io/charts/openebs/experiments/openebs-target-pod-failure)
- The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox. - The DATA_PERSISTENCE can be enabled by provide the application's info in a configmap volume so that the experiment can perform necessary checks. Currently, LitmusChaos supports data consistency checks only for MySQL and Busybox.
- For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For MYSQL data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -42,6 +44,7 @@ original_id: openebs-target-pod-failure
dbpassword: k8sDem0 dbpassword: k8sDem0
dbname: test dbname: test
``` ```
- For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials): - For Busybox data persistence check create a configmap as shown below in the application namespace (replace with actual credentials):
``` ```
@ -56,6 +59,7 @@ original_id: openebs-target-pod-failure
blockcount: 1024 blockcount: 1024
testfile: exampleFile testfile: exampleFile
``` ```
- Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace - Ensure that the chaosServiceAccount used for the experiment has cluster-scope permissions as the experiment may involve carrying out the chaos in the `openebs` namespace
while performing application health checks in its respective namespace. while performing application health checks in its respective namespace.
@ -96,7 +100,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-pod-failure/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-pod-failure/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -115,12 +120,28 @@ metadata:
labels: labels:
name: target-pod-failure-sa name: target-pod-failure-sa
rules: rules:
- apiGroups: ["","apps","litmuschaos.io","batch","extensions","storage.k8s.io"] - apiGroups:
resources: ["pods","jobs","pods/log","deployments","pods/exec","events","chaosexperiments","chaosresults","chaosengines","configmaps","secrets","services","persistentvolumeclaims","storageclasses","persistentvolumes"] ["", "apps", "litmuschaos.io", "batch", "extensions", "storage.k8s.io"]
verbs: ["create","list","get","patch","update","delete"] resources:
- apiGroups: [""] [
"pods",
"jobs",
"deployments",
"pods/exec",
"chaosexperiments",
"chaosresults",
"chaosengines",
"configmaps",
"secrets",
"services",
"persistentvolumeclaims",
"storageclasses",
"persistentvolumes",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs: ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding kind: ClusterRoleBinding
@ -133,10 +154,9 @@ roleRef:
kind: ClusterRole kind: ClusterRole
name: target-pod-failure-sa name: target-pod-failure-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: target-pod-failure-sa name: target-pod-failure-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -182,7 +202,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-pod-failure/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/openebs/openebs-target-pod-failure/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -191,30 +212,30 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'false' annotationCheck: "false"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: target-pod-failure-sa chaosServiceAccount: target-pod-failure-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: openebs-target-pod-failure - name: openebs-target-pod-failure
spec: spec:
components: components:
env: env:
- name: FORCE - name: FORCE
value: 'true' value: "true"
- name: APP_PVC - name: APP_PVC
value: 'demo-nginx-claim' value: "demo-nginx-claim"
- name: DEPLOY_TYPE - name: DEPLOY_TYPE
value: 'deployment' value: "deployment"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -232,7 +253,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the target container kill, once the experiment (job) is completed. The ChaosResult resource naming convention - Check whether the application is resilient to the target container kill, once the experiment (job) is completed. The ChaosResult resource naming convention
is: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. is: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult target-chaos-openebs-target-pod-failure -n <application-namespace>` `kubectl describe chaosresult target-chaos-openebs-target-pod-failure -n <application-namespace>`

View File

@ -0,0 +1,40 @@
---
id: plugins
title: Using other chaos libraries as plugins
sidebar_label: Plugins
original_id: plugins
---
---
Litmus provides a way to use any chaos library or a tool to inject chaos. The chaos tool to be compatible with Litmus should satisfy the following requirements:
- Should be available as a Docker Image
- Should take configuration through a `config-map`
The `plugins` or `chaos-libraries` host the core logic to inject chaos.
These plugins are hosted at https://github.com/litmuschaos/litmus-ansible/tree/master/chaoslib
Litmus project has integration into the following chaos-libraries.
| Chaos Library | Logo | Experiments covered |
| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| <a href="https://github.com/litmuschaos/litmus-ansible" target="_blank">Litmus</a> | <img src="https://camo.githubusercontent.com/953211f24c1c246f7017703f67b9779e4589bf76/68747470733a2f2f6c616e6473636170652e636e63662e696f2f6c6f676f732f6c69746d75732e737667" width="50"/> | Litmus native chaos libraries that encompasses the chaos capabilities for `pod-kill`, `container-kill`, `cpu-hog` |
| <a href="https://github.com/alexei-led/pumba" target="_blank">Pumba</a> | <img src="https://github.com/alexei-led/pumba/raw/master/docs/img/pumba_logo.png" width="50"/> | Pumba provides chaos capabilities for `network-delay` |
| <a href="https://github.com/bloomberg/powerfulseal" target="_blank">PowerfulSeal</a> | <img src="https://github.com/bloomberg/powerfulseal/raw/master/media/powerful-seal.png" width="50"/> | PowerfulSeal provides chaos capabilities for `pod-kill` |
| | | |
Usage of plugins is a configuration parameter inside the chaos experiment.
> Add an example snippet here.
<br/>
<br/>
<hr/>
<br/>
<br/>

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-pod-cpu-hog id: pod-cpu-hog
title: Pod CPU Hog Details title: Pod CPU Hog Details
sidebar_label: Pod CPU Hog sidebar_label: Pod CPU Hog
original_id: pod-cpu-hog original_id: pod-cpu-hog
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -41,7 +42,6 @@ original_id: pod-cpu-hog
- It simulates conditions where app pods experience CPU spikes either due to expected/undesired processes thereby testing how the - It simulates conditions where app pods experience CPU spikes either due to expected/undesired processes thereby testing how the
overall application stack behaves when this occurs. overall application stack behaves when this occurs.
## Integrations ## Integrations
- Pod CPU can be effected using the chaos library: `litmus` - Pod CPU can be effected using the chaos library: `litmus`
@ -58,7 +58,8 @@ Use this sample RBAC manifest to create a chaosServiceAccount in the desired (ap
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -77,9 +78,10 @@ metadata:
labels: labels:
name: pod-cpu-hog-sa name: pod-cpu-hog-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -93,7 +95,7 @@ roleRef:
kind: Role kind: Role
name: pod-cpu-hog-sa name: pod-cpu-hog-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pod-cpu-hog-sa name: pod-cpu-hog-sa
namespace: default namespace: default
``` ```
@ -148,7 +150,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-cpu-hog/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -157,19 +160,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pod-cpu-hog-sa chaosServiceAccount: pod-cpu-hog-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: pod-cpu-hog - name: pod-cpu-hog
spec: spec:
@ -178,16 +181,15 @@ spec:
# Provide name of target container # Provide name of target container
# where chaos has to be injected # where chaos has to be injected
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
#number of cpu cores to be consumed #number of cpu cores to be consumed
#verify the resources the app has been launched with #verify the resources the app has been launched with
- name: CPU_CORES - name: CPU_CORES
value: '1' value: "1"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' # in seconds value: "60" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -204,7 +206,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application stack is resilient to CPU spikes on the app replica, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application stack is resilient to CPU spikes on the app replica, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-pod-cpu-hog -n <application-namespace>` `kubectl describe chaosresult nginx-chaos-pod-cpu-hog -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-pod-delete id: pod-delete
title: Pod Delete Experiment Details title: Pod Delete Experiment Details
sidebar_label: Pod Delete sidebar_label: Pod Delete
original_id: pod-delete original_id: pod-delete
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -57,7 +58,8 @@ original_id: pod-delete
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-delete/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-delete/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -76,12 +78,21 @@ metadata:
labels: labels:
name: pod-delete-sa name: pod-delete-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch","apps"] - apiGroups: ["", "litmuschaos.io", "batch", "apps"]
resources: ["pods","deployments","jobs","configmaps","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] [
- apiGroups: [""] "pods",
"deployments",
"jobs",
"configmaps",
"chaosengines",
"chaosexperiments",
"chaosresults",
]
verbs: ["create", "list", "get", "patch", "update", "delete"]
- apiGroups: [""]
resources: ["nodes"] resources: ["nodes"]
verbs : ["get","list"] verbs: ["get", "list"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -95,10 +106,9 @@ roleRef:
kind: Role kind: Role
name: pod-delete-sa name: pod-delete-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pod-delete-sa name: pod-delete-sa
namespace: default namespace: default
``` ```
### Prepare ChaosEngine ### Prepare ChaosEngine
@ -155,7 +165,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-delete/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-delete/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -164,19 +175,19 @@ metadata:
namespace: default namespace: default
spec: spec:
appinfo: appinfo:
appns: 'default' appns: "default"
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
chaosServiceAccount: pod-delete-sa chaosServiceAccount: pod-delete-sa
monitoring: false monitoring: false
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
experiments: experiments:
- name: pod-delete - name: pod-delete
spec: spec:
@ -184,13 +195,13 @@ spec:
env: env:
# set chaos duration (in sec) as desired # set chaos duration (in sec) as desired
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '30' value: "30"
# set chaos interval (in sec) as desired # set chaos interval (in sec) as desired
- name: CHAOS_INTERVAL - name: CHAOS_INTERVAL
value: '10' value: "10"
# pod failures without '--force' & default terminationGracePeriodSeconds # pod failures without '--force' & default terminationGracePeriodSeconds
- name: FORCE - name: FORCE
value: 'false' value: "false"
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -207,7 +218,7 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the pod failure, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult nginx-chaos-pod-delete -n <application-namespace>` `kubectl describe chaosresult nginx-chaos-pod-delete -n <application-namespace>`

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-pod-network-corruption id: pod-network-corruption
title: Pod Network Corruption Experiment Details title: Pod Network Corruption Experiment Details
sidebar_label: Pod Network Corruption sidebar_label: Pod Network Corruption
original_id: pod-network-corruption original_id: pod-network-corruption
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -22,6 +23,7 @@ original_id: pod-network-corruption
</table> </table>
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `pod-network-corruption` experiment resource is available in the cluster by `kubectl get chaosexperiments` command. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-corruption) - Ensure that the `pod-network-corruption` experiment resource is available in the cluster by `kubectl get chaosexperiments` command. If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-corruption)
- Cluster must run docker container runtime - Cluster must run docker container runtime
@ -58,7 +60,8 @@ original_id: pod-network-corruption
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-corruption/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-corruption/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -77,9 +80,10 @@ metadata:
labels: labels:
name: pod-network-corruption-sa name: pod-network-corruption-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -93,7 +97,7 @@ roleRef:
kind: Role kind: Role
name: pod-network-corruption-sa name: pod-network-corruption-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pod-network-corruption-sa name: pod-network-corruption-sa
namespace: default namespace: default
``` ```
@ -158,7 +162,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-corruption/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-corruption/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -167,19 +172,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
monitoring: false monitoring: false
appinfo: appinfo:
appns: 'default' appns: "default"
# FYI, To see app label, apply kubectl get pods --show-labels # FYI, To see app label, apply kubectl get pods --show-labels
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pod-network-corruption-sa chaosServiceAccount: pod-network-corruption-sa
experiments: experiments:
- name: pod-network-corruption - name: pod-network-corruption
@ -188,14 +193,14 @@ spec:
env: env:
#Container name where chaos has to be injected #Container name where chaos has to be injected
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
#Network interface inside target container #Network interface inside target container
- name: NETWORK_INTERFACE - name: NETWORK_INTERFACE
value: 'eth0' value: "eth0"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' # in seconds value: "60" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -212,11 +217,10 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the Pod Network Packet Corruption, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the Pod Network Packet Corruption, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>` `kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>`
## Application Pod Network Packet Corruption Demo ## Application Pod Network Packet Corruption Demo
- A sample recording of this experiment execution is provided [here](https://youtu.be/kSiLrIaILvs). - A sample recording of this experiment execution is provided [here](https://youtu.be/kSiLrIaILvs).

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-pod-network-latency id: pod-network-latency
title: Pod Network Latency Experiment Details title: Pod Network Latency Experiment Details
sidebar_label: Pod Network Latency sidebar_label: Pod Network Latency
original_id: pod-network-latency original_id: pod-network-latency
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -22,10 +23,10 @@ original_id: pod-network-latency
</table> </table>
## Prerequisites ## Prerequisites
- Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus) - Ensure that the Litmus Chaos Operator is running by executing `kubectl get pods` in operator namespace (typically, `litmus`). If not, install from [here](https://docs.litmuschaos.io/docs/getstarted/#install-litmus)
- Ensure that the `pod-network-latency` experiment resource is available in the cluster by executing kubectl `get chaosexperiments` in the desired namespace. . If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-latency) - Ensure that the `pod-network-latency` experiment resource is available in the cluster by executing kubectl `get chaosexperiments` in the desired namespace. . If not, install from [here](https://hub.litmuschaos.io/charts/generic/experiments/pod-network-latency)
<div class="danger"> <div class="danger">
<strong>NOTE</strong>: <strong>NOTE</strong>:
Experiment is supported only on Docker Runtime. Support for containerd/CRIO runtimes will be added in subsequent releases. Experiment is supported only on Docker Runtime. Support for containerd/CRIO runtimes will be added in subsequent releases.
@ -59,7 +60,8 @@ original_id: pod-network-latency
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-latency/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-latency/rbac.yaml yaml"
```yaml ```yaml
--- ---
apiVersion: v1 apiVersion: v1
@ -78,9 +80,10 @@ metadata:
labels: labels:
name: pod-network-latency-sa name: pod-network-latency-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -94,7 +97,7 @@ roleRef:
kind: Role kind: Role
name: pod-network-latency-sa name: pod-network-latency-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pod-network-latency-sa name: pod-network-latency-sa
namespace: default namespace: default
``` ```
@ -159,7 +162,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-latency/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-latency/engine.yaml yaml"
```yaml ```yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine kind: ChaosEngine
@ -168,19 +172,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
monitoring: false monitoring: false
appinfo: appinfo:
appns: 'default' appns: "default"
# FYI, To see app label, apply kubectl get pods --show-labels # FYI, To see app label, apply kubectl get pods --show-labels
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pod-network-latency-sa chaosServiceAccount: pod-network-latency-sa
experiments: experiments:
- name: pod-network-latency - name: pod-network-latency
@ -189,20 +193,20 @@ spec:
env: env:
#Container name where chaos has to be injected #Container name where chaos has to be injected
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
#Network interface inside target container #Network interface inside target container
- name: NETWORK_INTERFACE - name: NETWORK_INTERFACE
value: 'eth0' value: "eth0"
- name: LIB_IMAGE - name: LIB_IMAGE
value: 'gaiaadm/pumba:0.6.5' value: "gaiaadm/pumba:0.6.5"
- name: NETWORK_LATENCY - name: NETWORK_LATENCY
value: '60000' value: "60000"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' # in seconds value: "60" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -219,11 +223,10 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the Pod Network Latency, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the Pod Network Latency, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>` `kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>`
## Application Pod Network Latency Demo ## Application Pod Network Latency Demo
- A sample recording of this experiment execution is provided [here](https://youtu.be/QsQZyXVCcCw). - A sample recording of this experiment execution is provided [here](https://youtu.be/QsQZyXVCcCw).

View File

@ -1,10 +1,11 @@
--- ---
id: version-1.1.0-pod-network-loss id: pod-network-loss
title: Pod Network Loss Experiment Details title: Pod Network Loss Experiment Details
sidebar_label: Pod Network Loss sidebar_label: Pod Network Loss
original_id: pod-network-loss original_id: pod-network-loss
--- ---
------
---
## Experiment Metadata ## Experiment Metadata
@ -56,7 +57,8 @@ original_id: pod-network-loss
#### Sample Rbac Manifest #### Sample Rbac Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-loss/rbac.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-loss/rbac.yaml yaml"
```yaml ```yaml
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
@ -74,9 +76,10 @@ metadata:
labels: labels:
name: pod-network-loss-sa name: pod-network-loss-sa
rules: rules:
- apiGroups: ["","litmuschaos.io","batch"] - apiGroups: ["", "litmuschaos.io", "batch"]
resources: ["pods","jobs","chaosengines","chaosexperiments","chaosresults"] resources:
verbs: ["create","list","get","patch","update","delete"] ["pods", "jobs", "chaosengines", "chaosexperiments", "chaosresults"]
verbs: ["create", "list", "get", "patch", "update", "delete"]
--- ---
apiVersion: rbac.authorization.k8s.io/v1beta1 apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding kind: RoleBinding
@ -90,7 +93,7 @@ roleRef:
kind: Role kind: Role
name: pod-network-loss-sa name: pod-network-loss-sa
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: pod-network-loss-sa name: pod-network-loss-sa
namespace: default namespace: default
``` ```
@ -155,7 +158,8 @@ subjects:
#### Sample ChaosEngine Manifest #### Sample ChaosEngine Manifest
[embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-loss/engine.yaml yaml) [embedmd]: # "https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/pod-network-loss/engine.yaml yaml"
```yaml ```yaml
# chaosengine.yaml # chaosengine.yaml
apiVersion: litmuschaos.io/v1alpha1 apiVersion: litmuschaos.io/v1alpha1
@ -165,19 +169,19 @@ metadata:
namespace: default namespace: default
spec: spec:
# It can be delete/retain # It can be delete/retain
jobCleanUpPolicy: 'delete' jobCleanUpPolicy: "delete"
# It can be true/false # It can be true/false
annotationCheck: 'true' annotationCheck: "true"
# It can be active/stop # It can be active/stop
engineState: 'active' engineState: "active"
#ex. values: ns1:name=percona,ns2:run=nginx #ex. values: ns1:name=percona,ns2:run=nginx
auxiliaryAppInfo: '' auxiliaryAppInfo: ""
monitoring: false monitoring: false
appinfo: appinfo:
appns: 'default' appns: "default"
# FYI, To see app label, apply kubectl get pods --show-labels # FYI, To see app label, apply kubectl get pods --show-labels
applabel: 'app=nginx' applabel: "app=nginx"
appkind: 'deployment' appkind: "deployment"
chaosServiceAccount: pod-network-loss-sa chaosServiceAccount: pod-network-loss-sa
experiments: experiments:
- name: pod-network-loss - name: pod-network-loss
@ -186,21 +190,20 @@ spec:
env: env:
#Container name where chaos has to be injected #Container name where chaos has to be injected
- name: TARGET_CONTAINER - name: TARGET_CONTAINER
value: 'nginx' value: "nginx"
- name: LIB_IMAGE - name: LIB_IMAGE
value: 'gaiaadm/pumba:0.6.5' value: "gaiaadm/pumba:0.6.5"
#Network interface inside target container #Network interface inside target container
- name: NETWORK_INTERFACE - name: NETWORK_INTERFACE
value: 'eth0' value: "eth0"
- name: NETWORK_PACKET_LOSS_PERCENTAGE - name: NETWORK_PACKET_LOSS_PERCENTAGE
value: '100' value: "100"
- name: TOTAL_CHAOS_DURATION - name: TOTAL_CHAOS_DURATION
value: '60' # in seconds value: "60" # in seconds
``` ```
### Create the ChaosEngine Resource ### Create the ChaosEngine Resource
@ -217,11 +220,10 @@ spec:
### Check Chaos Experiment Result ### Check Chaos Experiment Result
- Check whether the application is resilient to the Pod Network Loss, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `<ChaosEngine-Name>-<ChaosExperiment-Name>`. - Check whether the application is resilient to the Pod Network Loss, once the experiment (job) is completed. The ChaosResult resource name is derived like this: `{"<ChaosEngine-Name>-<ChaosExperiment-Name>"}`.
`kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>` `kubectl describe chaosresult <ChaosEngine-Name>-<ChaosExperiment-Name> -n <application-namespace>`
## Application Pod Network Loss Demo ## Application Pod Network Loss Demo
- A sample recording of this experiment execution is provided [here](https://youtu.be/jqvYy-nWc_I). - A sample recording of this experiment execution is provided [here](https://youtu.be/jqvYy-nWc_I).

View File

@ -0,0 +1,40 @@
---
id: resources
title: Resources related to Chaos Engineering on Kubernetes
sidebar_label: Resources
original_id: resources
---
---
## Chaos Demos
### Getting Started
Use this video to learn how to get started with Litmus. You will learn how to install Litmus, how to inject a fault into your application using one of the experiments available at ChaosHub.
<a href="https://asciinema.org/a/G9TcXpgikLuGTBY7btIUNSuWN" target="_blank">
<img src={require("./assets/getstarted.svg").default} width="300"/>
</a>
<hr/>
## Reference Implementations
| Reference | Description |
| ------------------ | ---------------------------------------------------------------------- |
| https://openebs.ci | CNCF SandBox project uses Litmus chaos experiments in its CI pipelines |
| | |
| | |
<br/>
<br/>
<hr/>
<br/>
<br/>

View File

@ -1,12 +1,13 @@
--- ---
id: architecture id: architecture
original_id: architecture
title: Litmus Architecture title: Litmus Architecture
sidebar_label: Architecture sidebar_label: Architecture
--- ---
<hr/> <hr/>
<img src={require('./assets/litmus-schematic.png').default} width="800" /> <img src={require("./assets/litmus-schematic.png").default} width="800" />
**Chaos-Operator** **Chaos-Operator**

View File

@ -2,6 +2,7 @@
id: chaosexperiment id: chaosexperiment
title: Constructing the ChaosExperiment title: Constructing the ChaosExperiment
sidebar_label: ChaosExperiment sidebar_label: ChaosExperiment
original_id: chaosexperiment
--- ---
--- ---

View File

@ -2,6 +2,7 @@
id: chaoshub id: chaoshub
title: Using and contributing to ChaosHub title: Using and contributing to ChaosHub
sidebar_label: ChaosHub sidebar_label: ChaosHub
original_id: chaoshub
--- ---
--- ---
@ -74,5 +75,7 @@ Chaos experiments that inject chaos into the platform resources of Kubernetes ar
Following Platform Chaos experiments are available on ChaosHub Following Platform Chaos experiments are available on ChaosHub
| Platform | Description | Chaos Experiments | | Platform | Description | Chaos Experiments |
| -------- | ------------------------------------------- | --------------------------------------------------------------------------- | | -------- | ------------------------------------------- | ----------------- |
| AWS | Amazon Web Services platform. Includes EKS. | [ec2-terminate](chaostoolkit-aws-ec2-terminate.md), [ebs-loss](ebs-loss.md) | | AWS | Amazon Web Services platform. Includes EKS. | None |
| GCP | Google Cloud Platform. Includes GKE. | None |
| Azure | Microsoft Azure platform. Includes AKS. | None |

View File

@ -2,6 +2,7 @@
id: chaosresult id: chaosresult
title: Constructing the ChaosResult title: Constructing the ChaosResult
sidebar_label: ChaosResult sidebar_label: ChaosResult
original_id: chaosresult
--- ---
--- ---

View File

@ -2,6 +2,7 @@
id: chaosschedule id: chaosschedule
title: Constructing the ChaosSchedule title: Constructing the ChaosSchedule
sidebar_label: ChaosSchedule (alpha) sidebar_label: ChaosSchedule (alpha)
original_id: chaosschedule
--- ---
--- ---
@ -173,10 +174,7 @@ This section describes the fields in the ChaosSchedule spec and the possible val
</tr> </tr>
<tr> <tr>
<th>Notes</th> <th>Notes</th>
<td> The <code>includedDays</code> in the spec specifies a (comma-separated) list <td>The <code>includedDays</code> in the spec specifies a (comma-separated) list of days of the week at which chaos is allowed to take place. {'{'}day_name{'}'} is to be specified with the first 3 letters of the name of day such as <code>Mon</code>, <code>Tue</code> etc.</td>
of days of the week at which chaos is allowed to take place. {'{'}day_name{'}'} is to
be specified with the first 3 letters of the name of day such as
<code>Mon</code>, <code>Tue</code> etc.</td>
</tr> </tr>
</table> </table>
@ -195,7 +193,7 @@ This section describes the fields in the ChaosSchedule spec and the possible val
</tr> </tr>
<tr> <tr>
<th>Range</th> <th>Range</th>
<td><i>{'{'}hour_number{'}'} will range from 0 to 23</i> (type: string)(pattern: {'{'}hour_number{'}'}-{'{'}hour_number{'}'}).</td> <td><i>{'{'}hour_number{'}'} will range from 0 to 23</i> (type: string)(pattern: {'{'}hour_number{'}'}-{'{'}hour_number{'}'}).</td>
</tr> </tr>
<tr> <tr>
<th>Default</th> <th>Default</th>

View File

@ -1,24 +1,24 @@
--- ---
id: version-1.0.0-community id: community
title: Join Litmus Community title: Join Litmus Community
sidebar_label: Community sidebar_label: Community
original_id: community original_id: community
--- ---
------
---
Litmus community is a subset of the larger Kubernetes community. Have a question? Want to stay in touch with the happenings on Chaos Engineering on Kubernetes? Join `#litmus` channel on Kubernetes Slack. Litmus community is a subset of the larger Kubernetes community. Have a question? Want to stay in touch with the happenings on Chaos Engineering on Kubernetes? Join `#litmus` channel on Kubernetes Slack.
<br><br> <br/><br/>
<a href="https://kubernetes.slack.com/messages/CNXNB0ZTN" target="_blank"><img src="/docs/assets/join-community.png" width="400"></a> <a href="https://kubernetes.slack.com/messages/CNXNB0ZTN" target="_blank"><img src="/docs/assets/join-community.png" width="400"/></a>
<br> <br/>
<br> <br/>
<hr> <hr/>
<br> <br/>
<br>
<br/>

View File

@ -2,6 +2,7 @@
id: devguide id: devguide
title: Developer Guide for ChaosCharts title: Developer Guide for ChaosCharts
sidebar_label: Developer Guide sidebar_label: Developer Guide
original_id: devguide
--- ---
--- ---
@ -12,15 +13,13 @@ Below are some key points to remember before understanding how to write a new ch
> ChaosCharts repository : https://github.com/litmuschaos/chaos-charts > ChaosCharts repository : https://github.com/litmuschaos/chaos-charts
> >
> Litmus-Go repository : https://github.com/litmuschaos/litmus-go/tree/master/experiments > Litmusbooks repository : https://github.com/litmuschaos/litmus-ansible/tree/master/experiments
> >
> Website rendering code repository: https://github.com/litmuschaos/charthub.litmuschaos.io > Website rendering code repository: https://github.com/litmuschaos/charthub.litmuschaos.io
The experiments & chaos libraries are typically written in Go, though not mandatory. Ensure that The experiments & chaos libraries are typically written in Ansible, though not mandatory. Ensure that
the experiments can be executed in a container & can read/update the litmuschaos custom resources. For example, the experiments can be executed in a container & can read/update the litmuschaos custom resources. For example,
if you are writing an experiment in Go, use this [clientset](https://github.com/litmuschaos/chaos-operator/tree/master/pkg/client). if you are writing an experiment in Go, use this [clientset](https://github.com/litmuschaos/chaos-operator/tree/master/pkg/client)
Litmus Experiment contains the logic of pre-checks, chaos-injection, litmus-probes, post-checks, and result-updates.
Typically, these are accompanied by a Kubernetes job that can execute the respective experiment.
<hr/> <hr/>
@ -42,11 +41,22 @@ to their default values.
Here is an example chaos experiment CR for a [pod-delete](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/pod-delete/experiment.yaml) experiment Here is an example chaos experiment CR for a [pod-delete](https://github.com/litmuschaos/chaos-charts/blob/master/charts/generic/pod-delete/experiment.yaml) experiment
### Litmus Book
Litmus book is an `ansible` playbook that encompasses the logic of pre-checks, chaos-injection, post-checks, and result-updates.
Typically, these are accompanied by a Kubernetes job that can execute the respective playbook.
Here is an example of the litmus book for the [pod-delete](https://github.com/litmuschaos/litmus-ansible/tree/master/experiments/generic/pod_delete) experiment.
### Chaos functions
The `ansible` business logic inside Litmus books can make use of readily available chaos functions. The chaos functions are available as `task-files` which are wrapped in one of the chaos libraries. See [plugins](plugins.md) for more details.
<hr/> <hr/>
## Developing a ChaosExperiment ## Developing a ChaosExperiment
A detailed how-to guide on developing chaos experiments is available [here](https://github.com/litmuschaos/litmus-go/tree/master/contribute/developer-guide) A detailed how-to guide on developing chaos experiments is available [here](https://github.com/litmuschaos/litmus-ansible/tree/master/contribute/developer_guide)
<br/> <br/>

Some files were not shown because too many files have changed in this diff Show More