diff --git a/charts/aws-ssm/experiments.yaml b/charts/aws-ssm/experiments.yaml index 53a9c067b..6915473cb 100644 --- a/charts/aws-ssm/experiments.yaml +++ b/charts/aws-ssm/experiments.yaml @@ -1,12 +1,12 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Execute AWS SSM Chaos on given ec2 instance Tag + Execute AWS SSM Chaos on given ec2 instance IDs kind: ChaosExperiment metadata: - name: aws-ssm-chaos-by-tag + name: aws-ssm-chaos-by-id labels: - name: aws-ssm-chaos-by-tag + name: aws-ssm-chaos-by-id app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -46,7 +46,7 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name aws-ssm-chaos-by-tag + - ./experiments -name aws-ssm-chaos-by-id command: - /bin/bash env: @@ -55,14 +55,14 @@ spec: - name: CHAOS_INTERVAL value: '60' - + # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # provide tag of the target ec2 instances - # ex: team:devops (key:value) - - name: EC2_INSTANCE_TAG + # Instance ID of the target ec2 instance + # Multiple IDs can also be provided as comma separated values ex: id1,id2 + - name: EC2_INSTANCE_ID value: '' - name: REGION @@ -77,10 +77,6 @@ spec: - name: AWS_SHARED_CREDENTIALS_FILE value: '/tmp/cloud_config.yml' - # percentage of total instance to target - - name: INSTANCE_AFFECTED_PERC - value: '' - # Provide the name of ssm doc # if not using the default stress docs - name: DOCUMENT_NAME @@ -113,7 +109,7 @@ spec: - name: MEMORY_PERCENTAGE value: '80' - # provide the CPU chores to comsumed + # provide the CPU chores to be comsumed # 0 will consume all the available cpu cores - name: CPU_CORE value: '0' @@ -124,7 +120,7 @@ spec: value: 'litmus' labels: - name: aws-ssm-chaos-by-tag + name: aws-ssm-chaos-by-id app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest @@ -136,12 +132,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Execute AWS SSM Chaos on given ec2 instance IDs + Execute AWS SSM Chaos on given ec2 instance Tag kind: ChaosExperiment metadata: - name: aws-ssm-chaos-by-id + name: aws-ssm-chaos-by-tag labels: - name: aws-ssm-chaos-by-id + name: aws-ssm-chaos-by-tag app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -181,7 +177,7 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name aws-ssm-chaos-by-id + - ./experiments -name aws-ssm-chaos-by-tag command: - /bin/bash env: @@ -190,14 +186,14 @@ spec: - name: CHAOS_INTERVAL value: '60' - + # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID + # provide tag of the target ec2 instances + # ex: team:devops (key:value) + - name: EC2_INSTANCE_TAG value: '' - name: REGION @@ -212,6 +208,10 @@ spec: - name: AWS_SHARED_CREDENTIALS_FILE value: '/tmp/cloud_config.yml' + # percentage of total instance to target + - name: INSTANCE_AFFECTED_PERC + value: '' + # Provide the name of ssm doc # if not using the default stress docs - name: DOCUMENT_NAME @@ -244,7 +244,7 @@ spec: - name: MEMORY_PERCENTAGE value: '80' - # provide the CPU chores to be comsumed + # provide the CPU chores to comsumed # 0 will consume all the available cpu cores - name: CPU_CORE value: '0' @@ -255,7 +255,7 @@ spec: value: 'litmus' labels: - name: aws-ssm-chaos-by-id + name: aws-ssm-chaos-by-tag app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest diff --git a/charts/azure/experiments.yaml b/charts/azure/experiments.yaml index 27045bcc4..06d46d207 100644 --- a/charts/azure/experiments.yaml +++ b/charts/azure/experiments.yaml @@ -1,12 +1,12 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Detaches disk from the VM and then re-attaches disk to the VM + Terminating azure VM instance kind: ChaosExperiment metadata: - name: azure-disk-loss + name: azure-instance-stop labels: - name: azure-disk-loss + name: azure-instance-stop app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -46,24 +46,25 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name azure-disk-loss + - ./experiments -name azure-instance-stop command: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: '30' - name: CHAOS_INTERVAL value: '30' - - name: LIB - value: 'litmus' - # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - + + # provide the target instance name(s) (comma separated if multiple) + - name: AZURE_INSTANCE_NAME + value: '' + # provide the resource group of the instance - name: RESOURCE_GROUP value: '' @@ -71,39 +72,39 @@ spec: # accepts enable/disable, default is disable - name: SCALE_SET value: '' - - # provide the virtual disk names (comma separated if multiple) - - name: VIRTUAL_DISK_NAMES - value: '' - - # provide the sequence type for the run. Options: serial/parallel - - name: SEQUENCE - value: 'parallel' - - # provide the path to aks credentials mounted from secret + + # Provide the path of aks credentials mounted from secret - name: AZURE_AUTH_LOCATION value: '/tmp/azure.auth' + - name: SEQUENCE + value: 'parallel' + + # provide the LIB + # only litmus supported + - name: LIB + value: 'litmus' + labels: - name: azure-disk-loss + name: azure-instance-stop app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - secrets: - name: cloud-secret mountPath: /tmp/ + --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Terminating azure VM instance + Detaches disk from the VM and then re-attaches disk to the VM kind: ChaosExperiment metadata: - name: azure-instance-stop + name: azure-disk-loss labels: - name: azure-instance-stop + name: azure-disk-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -143,25 +144,24 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name azure-instance-stop + - ./experiments -name azure-disk-loss command: - /bin/bash env: - name: TOTAL_CHAOS_DURATION - value: '30' + value: '30' - name: CHAOS_INTERVAL value: '30' + - name: LIB + value: 'litmus' + # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - - # provide the target instance name(s) (comma separated if multiple) - - name: AZURE_INSTANCE_NAME - value: '' - + # provide the resource group of the instance - name: RESOURCE_GROUP value: '' @@ -169,27 +169,27 @@ spec: # accepts enable/disable, default is disable - name: SCALE_SET value: '' - - # Provide the path of aks credentials mounted from secret + + # provide the virtual disk names (comma separated if multiple) + - name: VIRTUAL_DISK_NAMES + value: '' + + # provide the sequence type for the run. Options: serial/parallel + - name: SEQUENCE + value: 'parallel' + + # provide the path to aks credentials mounted from secret - name: AZURE_AUTH_LOCATION value: '/tmp/azure.auth' - - name: SEQUENCE - value: 'parallel' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - labels: - name: azure-instance-stop + name: azure-disk-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest + secrets: - name: cloud-secret mountPath: /tmp/ - --- diff --git a/charts/gcp/experiments.yaml b/charts/gcp/experiments.yaml index d98e014c4..9341c6a07 100644 --- a/charts/gcp/experiments.yaml +++ b/charts/gcp/experiments.yaml @@ -1,12 +1,12 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back + Stops GCP VM instances and GKE nodes for a specified duration and later restarts them kind: ChaosExperiment metadata: - name: gcp-vm-disk-loss + name: gcp-vm-instance-stop labels: - name: gcp-vm-disk-loss + name: gcp-vm-instance-stop app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -38,11 +38,15 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name gcp-vm-disk-loss + - ./experiments -name gcp-vm-instance-stop command: - /bin/bash env: @@ -53,34 +57,40 @@ spec: - name: CHAOS_INTERVAL value: '30' + # parallel or serial; determines how the VM instances are terminated, all at once or one at a time + - name: SEQUENCE + value: 'parallel' + + # provide the LIB + # only litmus supported - name: LIB value: 'litmus' - - # Period to wait before and after injection of chaos in sec + + # period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # parallel or serial; determines how chaos is injected - - name: SEQUENCE - value: 'parallel' - - # set the GCP project id + # enable or disable; shall be set to enable if the target instances are a part of a managed instance group + - name: MANAGED_INSTANCE_GROUP + value: 'disable' + + # Instance name of the target vm instance(s) + # Multiple instance names can be provided as comma separated values ex: instance1,instance2 + - name: VM_INSTANCE_NAMES + value: '' + + # GCP project ID to which the vm instances belong - name: GCP_PROJECT_ID value: '' - # set the disk volume name(s) as comma seperated values - # eg. volume1,volume2,... - - name: DISK_VOLUME_NAMES - value: '' - - # set the disk zone(s) as comma seperated values in the corresponding - # order of DISK_VOLUME_NAME - # eg. zone1,zone2,... - - name: DISK_ZONES + # Instance zone(s) of the target vm instance(s) + # If more than one instance is targetted, provide zone for each in the order of their + # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 + - name: INSTANCE_ZONES value: '' labels: - name: gcp-vm-disk-loss + name: gcp-vm-instance-stop app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest @@ -92,12 +102,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Stops GCP VM instances and GKE nodes for a specified duration and later restarts them + Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them kind: ChaosExperiment metadata: - name: gcp-vm-instance-stop + name: gcp-vm-instance-stop-by-label labels: - name: gcp-vm-instance-stop + name: gcp-vm-instance-stop-by-label app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -137,54 +147,50 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name gcp-vm-instance-stop + - ./experiments -name gcp-vm-instance-stop-by-label command: - /bin/bash env: + # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION - value: '30' + value: '30' + # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - - # parallel or serial; determines how the VM instances are terminated, all at once or one at a time + - name: SEQUENCE value: 'parallel' - - # provide the LIB - # only litmus supported - - name: LIB - value: 'litmus' - - # period to wait before and after injection of chaos in sec - - name: RAMP_TIME + + # GCP project ID to which the vm instances belong + - name: GCP_PROJECT_ID value: '' - - # enable or disable; shall be set to enable if the target instances are a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - # Instance name of the target vm instance(s) - # Multiple instance names can be provided as comma separated values ex: instance1,instance2 - - name: VM_INSTANCE_NAMES + # Label of the target vm instance(s) + - name: INSTANCE_LABEL value: '' - # GCP project ID to which the vm instances belong - - name: GCP_PROJECT_ID + # Zone in which the target vm instance(s) filtered by the label exist + # all the instances should lie in a single zone + - name: INSTANCE_ZONES value: '' + + # enable it if the target instance is a part of a managed instance group + - name: MANAGED_INSTANCE_GROUP + value: 'disable' - # Instance zone(s) of the target vm instance(s) - # If more than one instance is targetted, provide zone for each in the order of their - # respective instance name in VM_INSTANCE_NAME as comma separated values ex: zone1,zone2 - - name: INSTANCE_ZONES + # set the percentage value of the instances with the given label + # which should be targeted as part of the chaos injection + - name: INSTANCE_AFFECTED_PERC value: '' labels: - name: gcp-vm-instance-stop + name: gcp-vm-instance-stop-by-label app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest + secrets: - name: cloud-secret mountPath: /tmp/ @@ -193,12 +199,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back + Causes loss of a non-boot storage persistent disk from a GCP VM instance for a specified duration before attaching them back kind: ChaosExperiment metadata: - name: gcp-vm-disk-loss-by-label + name: gcp-vm-disk-loss labels: - name: gcp-vm-disk-loss-by-label + name: gcp-vm-disk-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -234,39 +240,45 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name gcp-vm-disk-loss-by-label + - ./experiments -name gcp-vm-disk-loss command: - /bin/bash env: - # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION - value: '30' + value: '30' - # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - + + - name: LIB + value: 'litmus' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # parallel or serial; determines how chaos is injected + - name: SEQUENCE + value: 'parallel' + # set the GCP project id - name: GCP_PROJECT_ID value: '' - # set the zone in which all the disks are created - # all the disks must exist in the same zone - - name: DISK_ZONES - value: '' - - # set the label of the target disk volumes - - name: DISK_VOLUME_LABEL + # set the disk volume name(s) as comma seperated values + # eg. volume1,volume2,... + - name: DISK_VOLUME_NAMES value: '' - - # set the percentage value of the disks with the given label - # which should be targeted as part of the chaos injection - - name: DISK_AFFECTED_PERC + + # set the disk zone(s) as comma seperated values in the corresponding + # order of DISK_VOLUME_NAME + # eg. zone1,zone2,... + - name: DISK_ZONES value: '' labels: - name: gcp-vm-disk-loss-by-label + name: gcp-vm-disk-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest @@ -278,12 +290,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Stops GCP VM instances and GKE nodes filtered by a label for a specified duration and later restarts them + Causes loss of a non-boot storage persistent disk from a GCP VM instance filtered by a label for a specified duration before attaching them back kind: ChaosExperiment metadata: - name: gcp-vm-instance-stop-by-label + name: gcp-vm-disk-loss-by-label labels: - name: gcp-vm-instance-stop-by-label + name: gcp-vm-disk-loss-by-label app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -315,15 +327,11 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name gcp-vm-instance-stop-by-label + - ./experiments -name gcp-vm-disk-loss-by-label command: - /bin/bash env: @@ -335,38 +343,30 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '30' - - - name: SEQUENCE - value: 'parallel' - - # GCP project ID to which the vm instances belong + + # set the GCP project id - name: GCP_PROJECT_ID value: '' - - # Label of the target vm instance(s) - - name: INSTANCE_LABEL + + # set the zone in which all the disks are created + # all the disks must exist in the same zone + - name: DISK_ZONES value: '' - # Zone in which the target vm instance(s) filtered by the label exist - # all the instances should lie in a single zone - - name: INSTANCE_ZONES + # set the label of the target disk volumes + - name: DISK_VOLUME_LABEL value: '' - # enable it if the target instance is a part of a managed instance group - - name: MANAGED_INSTANCE_GROUP - value: 'disable' - - # set the percentage value of the instances with the given label + # set the percentage value of the disks with the given label # which should be targeted as part of the chaos injection - - name: INSTANCE_AFFECTED_PERC + - name: DISK_AFFECTED_PERC value: '' labels: - name: gcp-vm-instance-stop-by-label + name: gcp-vm-disk-loss-by-label app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - secrets: - name: cloud-secret mountPath: /tmp/ diff --git a/charts/generic/experiments.yaml b/charts/generic/experiments.yaml index 42cd1ce6d..94da7ea1b 100644 --- a/charts/generic/experiments.yaml +++ b/charts/generic/experiments.yaml @@ -1,12 +1,12 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects cpu consumption on pods belonging to an app deployment + Inject network packet corruption into application pod kind: ChaosExperiment metadata: - name: pod-cpu-hog + name: pod-network-corruption labels: - name: pod-cpu-hog + name: pod-network-corruption app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -62,50 +62,41 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-cpu-hog + - ./experiments -name pod-network-corruption command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '60' + + - name: TARGET_CONTAINER + value: '' - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' + # provide lib image + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' + - name: NETWORK_INTERFACE + value: 'eth0' - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' + - name: TC_IMAGE + value: 'gaiadocker/iproute2' - ## Period to wait before and after injection of chaos in sec + - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE + value: '100' #in PERCENTAGE + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, pumba + + # lib can be litmus or pumba - name: LIB value: 'litmus' - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'docker' - - # provide the socket file path - - name: SOCKET_PATH - value: '/var/run/docker.sock' + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' - name: TARGET_PODS value: '' @@ -114,34 +105,53 @@ spec: - name: NODE_LABEL value: '' + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'docker' + + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' + + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' + + # provide the socket file path + - name: SOCKET_PATH + value: '/var/run/docker.sock' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' labels: - name: pod-cpu-hog + name: pod-network-corruption app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: - message: | - Give a memory hog on a node belonging to a deployment + message: "Kills a container belonging to an application pod \n" kind: ChaosExperiment metadata: - name: node-memory-hog + name: container-kill labels: - name: node-memory-hog + name: container-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Cluster + scope: Namespaced permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -163,6 +173,22 @@ spec: - apiGroups: [""] resources: ["pods/exec"] verbs: ["get","list","create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments","statefulsets","replicasets", "daemonsets"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get","list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list","get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -171,80 +197,84 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name node-memory-hog + - ./experiments -name container-kill command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '120' + - name: TARGET_CONTAINER + value: '' - ## Specify the size as percent of total node capacity Ex: '30' - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty - - name: MEMORY_CONSUMPTION_PERCENTAGE + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' + + # lib can be litmus or pumba + - name: LIB + value: 'litmus' - ## Specify the amount of memory to be consumed in mebibytes - ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty - - name: MEMORY_CONSUMPTION_MEBIBYTES + - name: TARGET_PODS value: '' - - name: NUMBER_OF_WORKERS - value: '1' + # provide the chaos interval + - name: CHAOS_INTERVAL + value: '10' - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' + - name: SIGNAL + value: 'SIGKILL' - - name: NODE_LABEL - value: '' + # provide the socket file path + - name: SOCKET_PATH + value: '/var/run/docker.sock' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'docker' + + # provide the total chaos duration + - name: TOTAL_CHAOS_DURATION + value: '20' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC value: '' - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' - # provide lib image - - name: LIB_IMAGE + - name: LIB_IMAGE value: 'litmuschaos/go-runner:latest' - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: - name: node-memory-hog + name: container-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest +--- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames + Injects memory consumption on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-dns-spoof + name: pod-memory-hog-exec labels: - name: pod-dns-spoof + name: pod-memory-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -297,73 +327,67 @@ spec: resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] image: "litmuschaos/go-runner:latest" + imagePullPolicy: Always args: - - -c - - ./experiments -name pod-dns-spoof + - -c + - ./experiments -name pod-memory-hog-exec command: - - /bin/bash + - /bin/bash env: - - name: TARGET_CONTAINER - value: "" - - # provide lib image - - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - name: TOTAL_CHAOS_DURATION - value: "60" # in seconds + value: '60' - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: "" + ## enter the amount of memory in megabytes to be consumed by the application pod + - name: MEMORY_CONSUMPTION + value: '500' ## percentage of total pods to target - name: PODS_AFFECTED_PERC - value: "" - - - name: TARGET_PODS - value: "" - - # provide the name of container runtime, it supports docker, containerd, crio - - name: CONTAINER_RUNTIME - value: "docker" + value: '' - # provide the socket file path - - name: SOCKET_PATH - value: "/var/run/docker.sock" + ## Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + ## env var that describes the library used to execute the chaos + ## default: litmus. Supported values: litmus + - name: LIB + value: 'litmus' + + # The command to kill the chaos process + - name: CHAOS_KILL_COMMAND + value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE - value: "parallel" + value: 'parallel' - # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed - - name: SPOOF_MAP - value: "" + - name: TARGET_PODS + value: '' labels: - experiment: pod-dns-spoof + name: pod-memory-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Deletes a pod belonging to a deployment/statefulset/daemonset + poweroff node kind: ChaosExperiment metadata: - name: pod-delete + name: node-poweroff labels: - name: pod-delete + name: node-poweroff app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Namespaced + scope: Cluster permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -373,115 +397,7 @@ spec: - apiGroups: [""] resources: ["events"] verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-delete - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '15' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - - name: FORCE - value: 'true' - - - name: CHAOS_INTERVAL - value: '5' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB - value: 'litmus' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-delete - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Restart node -kind: ChaosExperiment -metadata: - name: node-restart - labels: - name: node-restart - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps","secrets"] verbs: ["get","list",] @@ -519,6 +435,9 @@ spec: - name: TOTAL_CHAOS_DURATION value: '60' + - name: REBOOT_COMMAND + value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' + # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' @@ -544,7 +463,7 @@ spec: value: '' labels: - name: node-restart + name: node-poweroff app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest @@ -556,19 +475,19 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Fillup Ephemeral Storage of a Resource + It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration kind: ChaosExperiment metadata: - name: disk-fill + name: pod-http-modify-header labels: - name: disk-fill + name: pod-http-modify-header app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: scope: Namespaced - permissions: + permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] @@ -617,78 +536,93 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name disk-fill + - ./experiments -name pod-http-modify-header command: - /bin/bash env: - + - name: TARGET_CONTAINER value: '' + + # provide lib image + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' + + # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} + # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} + - name: HEADERS_MAP + value: '{}' + + # whether to modify response headers or request headers. Accepted values: request, response + - name: HEADER_MODE + value: 'response' + + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" + + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" - - name: FILL_PERCENTAGE - value: '80' + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" - name: TOTAL_CHAOS_DURATION - value: '60' + value: '60' # in seconds - # Period to wait before and after injection of chaos in sec + # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # Provide the LIB here - # Only litmus supported + # lib can be litmus or pumba - name: LIB value: 'litmus' - # provide the data block size - # supported unit is KB - - name: DATA_BLOCK_SIZE - value: '256' + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' - name: TARGET_PODS value: '' - - name: EPHEMERAL_STORAGE_MEBIBYTES - value: '' + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'docker' + + # provide the socket file path + - name: SOCKET_PATH + value: '/var/run/docker.sock' # To select pods on specific node(s) - name: NODE_LABEL value: '' - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # Provide the container runtime path - # Default set to docker container path - - name: CONTAINER_PATH - value: '/var/lib/docker/containers' - ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' labels: - name: disk-fill + name: pod-http-modify-header app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/host-path-usage: "true" + app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration + Injects network latency on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-http-modify-body + name: pod-network-latency labels: - name: pod-http-modify-body + name: pod-network-latency app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -744,34 +678,26 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-http-modify-body + - ./experiments -name pod-network-latency command: - /bin/bash env: - + - name: TARGET_CONTAINER value: '' + - name: NETWORK_INTERFACE + value: 'eth0' + # provide lib image - name: LIB_IMAGE value: 'litmuschaos/go-runner:latest' - - # provide the body string to overwrite the response body - # if no value is provided, response will be an empty body. - - name: RESPONSE_BODY - value: '' - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" + - name: TC_IMAGE + value: 'gaiadocker/iproute2' - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" + - name: NETWORK_LATENCY + value: '2000' #in ms - name: TOTAL_CHAOS_DURATION value: '60' # in seconds @@ -780,11 +706,14 @@ spec: - name: RAMP_TIME value: '' + - name: JITTER + value: '0' + # lib can be litmus or pumba - name: LIB value: 'litmus' - # percentage of total pods to target + ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' @@ -797,6 +726,16 @@ spec: - name: CONTAINER_RUNTIME value: 'docker' + # provide the destination ips + # chaos injection will be triggered for these destination ips + - name: DESTINATION_IPS + value: '' + + # provide the destination hosts + # chaos injection will be triggered for these destination hosts + - name: DESTINATION_HOSTS + value: '' + # provide the socket file path - name: SOCKET_PATH value: '/var/run/docker.sock' @@ -809,29 +748,30 @@ spec: ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: - name: pod-http-modify-body + name: pod-network-latency app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - It injects the chaos inside the pod which modifies the header of the request/response from the provided application server to the headers provided by the user and reverts after a specified duration + Restart node kind: ChaosExperiment metadata: - name: pod-http-modify-header + name: node-restart labels: - name: pod-http-modify-header + name: node-restart app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Namespaced + scope: Cluster permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -841,7 +781,183 @@ spec: - apiGroups: [""] resources: ["events"] verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps","secrets"] + verbs: ["get","list",] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get","list","watch"] + # for creating and managing to execute comands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get","list","create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create","list","get","delete","deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosexperiments","chaosresults"] + verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list"] + image: "litmuschaos/go-runner:latest" + imagePullPolicy: Always + args: + - -c + - ./experiments -name node-restart + command: + - /bin/bash + env: + - name: SSH_USER + value: 'root' + + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # PROVIDE THE LIB HERE + # ONLY LITMUS SUPPORTED + - name: LIB + value: 'litmus' + + # provide lib image + - name: LIB_IMAGE + value: "litmuschaos/go-runner:latest" + + # ENTER THE TARGET NODE NAME + - name: TARGET_NODE + value: '' + + - name: NODE_LABEL + value: '' + + # ENTER THE TARGET NODE IP + - name: TARGET_NODE_IP + value: '' + + labels: + name: node-restart + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: latest + secrets: + - name: id-rsa + mountPath: /mnt/ + +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Scale the application replicas and test the node autoscaling on cluster +kind: ChaosExperiment +metadata: + name: pod-autoscaler + labels: + name: pod-autoscaler + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: latest +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create","delete","get","list","patch","update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create","get","list","patch","update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get","list",] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get","list","watch"] + # for creating and managing to execute comands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get","list","create"] + # performs CRUD operations on the deployments and statefulsets + - apiGroups: ["apps"] + resources: ["deployments","statefulsets"] + verbs: ["list","get","patch","update"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create","list","get","delete","deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosexperiments","chaosresults"] + verbs: ["create","list","get","patch","update","delete"] + image: "litmuschaos/go-runner:latest" + imagePullPolicy: Always + args: + - -c + - ./experiments -name pod-autoscaler + command: + - /bin/bash + env: + + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # Number of replicas to scale + - name: REPLICA_COUNT + value: '5' + + # PROVIDE THE LIB HERE + # ONLY LITMUS SUPPORTED + - name: LIB + value: 'litmus' + + labels: + name: pod-autoscaler + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: latest + +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + it injects chaos into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after a specified duration +kind: ChaosExperiment +metadata: + name: pod-http-reset-peer + labels: + name: pod-http-reset-peer + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: latest +spec: + definition: + scope: Namespaced + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create","delete","get","list","patch","update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create","get","list","patch","update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] @@ -881,26 +997,21 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-http-modify-header + - ./experiments -name pod-http-reset-peer command: - /bin/bash env: - + - name: TARGET_CONTAINER value: '' # provide lib image - name: LIB_IMAGE value: 'litmuschaos/go-runner:latest' - - # map of headers to modify/add; Eg: {"X-Litmus-Test-Header": "X-Litmus-Test-Value"} - # to remove a header, just set the value to ""; Eg: {"X-Litmus-Test-Header": ""} - - name: HEADERS_MAP - value: '{}' - - # whether to modify response headers or request headers. Accepted values: request, response - - name: HEADER_MODE - value: 'response' + + # reset timeout specifies after how much duration to reset the connection + - name: RESET_TIMEOUT + value: '0' #in ms # port of the target service - name: TARGET_SERVICE_PORT @@ -950,24 +1061,23 @@ spec: ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: - name: pod-http-modify-header + name: pod-http-reset-peer app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects cpu consumption on pods belonging to an app deployment + Deletes a pod belonging to a deployment/statefulset/daemonset kind: ChaosExperiment metadata: - name: pod-cpu-hog-exec + name: pod-delete labels: - name: pod-cpu-hog-exec + name: pod-delete app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -1023,59 +1133,59 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-cpu-hog-exec + - ./experiments -name pod-delete command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '60' - ## Number of CPU cores to stress - - name: CPU_CORES - value: '1' + - name: TOTAL_CHAOS_DURATION + value: '15' - ## Percentage of total pods to target - - name: PODS_AFFECTED_PERC + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME + - name: FORCE + value: 'true' + + - name: CHAOS_INTERVAL + value: '5' + + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC value: '' - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - name: LIB - value: 'litmus' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" + value: 'litmus' - name: TARGET_PODS value: '' + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' labels: - name: pod-cpu-hog-exec + name: pod-delete app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest ---- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects memory consumption on pods belonging to an app deployment + Injects http request latency on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-memory-hog + name: pod-http-latency labels: - name: pod-memory-hog + name: pod-http-latency app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -1131,149 +1241,21 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-memory-hog + - ./experiments -name pod-http-latency command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' - - ## Number of workers to perform stress - - name: NUMBER_OF_WORKERS - value: '1' - - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, pumba - - name: LIB - value: 'litmus' - - ## It is used in pumba lib only - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## It is used in pumba lib only - - name: STRESS_IMAGE - value: 'alexeiled/stress-ng:latest-ubuntu' - - ## provide the cluster runtime - - name: CONTAINER_RUNTIME - value: 'docker' - - # provide the socket file path - - name: SOCKET_PATH - value: '/var/run/docker.sock' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - - name: TARGET_PODS - value: '' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - labels: - name: pod-memory-hog - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - it injects chaos into the pod which stops outgoing http requests by resetting the TCP connection and then reverts back to the original state after a specified duration -kind: ChaosExperiment -metadata: - name: pod-http-reset-peer - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-http-reset-peer - command: - - /bin/bash - env: - + - name: TARGET_CONTAINER value: '' # provide lib image - name: LIB_IMAGE value: 'litmuschaos/go-runner:latest' - - # reset timeout specifies after how much duration to reset the connection - - name: RESET_TIMEOUT - value: '0' #in ms + + # set latency value for the chaos + - name: LATENCY + value: '2000' #in ms # port of the target service - name: TARGET_SERVICE_PORT @@ -1281,308 +1263,51 @@ spec: # port on which the proxy will listen - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # lib can be litmus or pumba - - name: LIB - value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'docker' - - # provide the socket file path - - name: SOCKET_PATH - value: '/var/run/docker.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: pod-http-reset-peer - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Give IO disk stress on a node belonging to a deployment -kind: ChaosExperiment -metadata: - name: node-io-stress - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Cluster - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name node-io-stress - command: - - /bin/bash - env: - - - name: TOTAL_CHAOS_DURATION - value: '120' - - ## specify the size as percentage of free space on the file system - ## default value 90 (in percentage) - - name: FILESYSTEM_UTILIZATION_PERCENTAGE - value: '10' - - ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space - ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty - - name: FILESYSTEM_UTILIZATION_BYTES - value: '' - - ## Number of core of CPU - - name: CPU - value: '1' - - ## Total number of workers default value is 4 - - name: NUMBER_OF_WORKERS - value: '4' - - ## Total number of vm workers - - name: VM_WORKERS - value: '1' - - ## enter the comma separated target nodes name - - name: TARGET_NODES - value: '' - - - name: NODE_LABEL - value: '' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC - value: '' - - ## it defines the sequence of chaos execution for multiple target nodes - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - - labels: - name: node-io-stress - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest - ---- -apiVersion: litmuschaos.io/v1alpha1 -description: - message: | - Injects network packet loss on pods belonging to an app deployment -kind: ChaosExperiment -metadata: - name: pod-network-loss - labels: - name: pod-network-loss - app.kubernetes.io/part-of: litmus - app.kubernetes.io/component: chaosexperiment - app.kubernetes.io/version: latest -spec: - definition: - scope: Namespaced - permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always - args: - - -c - - ./experiments -name pod-network-loss - command: - - /bin/bash - env: - - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' #in PERCENTAGE + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - # ime period to wait before and after injection of chaos in sec + # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # it can be litmus or pumba + # lib can be litmus or pumba - name: LIB value: 'litmus' - ## percentage of total pods to target + # percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - name: TARGET_PODS value: '' - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME value: 'docker' - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - # provide the socket file path - name: SOCKET_PATH value: '/var/run/docker.sock' + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: - name: pod-network-loss + name: pod-http-latency app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/runtime-api-usage: "true" @@ -1729,18 +1454,18 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Drain the node where application pod is scheduled + Injects memory consumption on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: node-drain + name: pod-memory-hog labels: - name: node-drain + name: pod-memory-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Cluster + scope: Namespaced permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -1760,12 +1485,24 @@ spec: verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] + resources: ["pods/exec"] verbs: ["get","list","create"] - # ignore daemonsets while draining the node + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] + resources: ["deployments","statefulsets","replicasets", "daemonsets"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get","list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list","get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -1774,59 +1511,90 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list","patch"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name node-drain + - ./experiments -name pod-memory-hog command: - /bin/bash env: - - - name: TARGET_NODE - value: '' + - name: TOTAL_CHAOS_DURATION + value: '60' - - name: NODE_LABEL - value: '' + ## enter the amount of memory in megabytes to be consumed by the application pod + - name: MEMORY_CONSUMPTION + value: '500' + + ## Number of workers to perform stress + - name: NUMBER_OF_WORKERS + value: '1' - - name: TOTAL_CHAOS_DURATION - value: '60' + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' - # Provide the LIB here - # Only litmus supported - - name: LIB - value: 'litmus' + ## Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + ## env var that describes the library used to execute the chaos + ## default: litmus. Supported values: litmus, pumba + - name: LIB + value: 'litmus' + + ## It is used in pumba lib only + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' + + ## It is used in pumba lib only + - name: STRESS_IMAGE + value: 'alexeiled/stress-ng:latest-ubuntu' + + ## provide the cluster runtime + - name: CONTAINER_RUNTIME + value: 'docker' + + # provide the socket file path + - name: SOCKET_PATH + value: '/var/run/docker.sock' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + - name: TARGET_PODS + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' - labels: - name: node-drain + name: pod-memory-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest +--- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects http request latency on pods belonging to an app deployment + Drain the node where application pod is scheduled kind: ChaosExperiment metadata: - name: pod-http-latency + name: node-drain labels: - name: pod-http-latency + name: node-drain app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Namespaced + scope: Cluster permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -1846,24 +1614,12 @@ spec: verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] - resources: ["pods/exec"] + resources: ["pods/exec","pods/eviction"] verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + # ignore daemonsets while draining the node - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] + resources: ["daemonsets"] + verbs: ["list","get","delete"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -1872,92 +1628,53 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list","patch"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name pod-http-latency + - ./experiments -name node-drain command: - /bin/bash env: - - name: TARGET_CONTAINER + - name: TARGET_NODE value: '' - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - - # set latency value for the chaos - - name: LATENCY - value: '2000' #in ms - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" + - name: NODE_LABEL + value: '' - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + value: '60' - # lib can be litmus or pumba + # Provide the LIB here + # Only litmus supported - name: LIB value: 'litmus' - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' - - - name: TARGET_PODS - value: '' - - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'docker' - - # provide the socket file path - - name: SOCKET_PATH - value: '/var/run/docker.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' - + labels: - name: pod-http-latency + name: node-drain app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Inject network packet corruption into application pod + It injects the chaos inside the pod which modifies the body of the response from the provided application server to the body string provided by the user and reverts after a specified duration kind: ChaosExperiment metadata: - name: pod-network-corruption + name: pod-http-modify-body labels: - name: pod-network-corruption + name: pod-http-modify-body app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -2013,26 +1730,34 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-network-corruption + - ./experiments -name pod-http-modify-body command: - /bin/bash env: - + - name: TARGET_CONTAINER value: '' # provide lib image - name: LIB_IMAGE value: 'litmuschaos/go-runner:latest' + + # provide the body string to overwrite the response body + # if no value is provided, response will be an empty body. + - name: RESPONSE_BODY + value: '' - - name: NETWORK_INTERFACE - value: 'eth0' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" - - name: NETWORK_PACKET_CORRUPTION_PERCENTAGE - value: '100' #in PERCENTAGE + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" - name: TOTAL_CHAOS_DURATION value: '60' # in seconds @@ -2040,64 +1765,53 @@ spec: # Time period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - + # lib can be litmus or pumba - name: LIB value: 'litmus' - ## percentage of total pods to target + # percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - name: TARGET_PODS value: '' - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio # for pumba LIB, it supports docker only - name: CONTAINER_RUNTIME value: 'docker' - # provide the destination ips - # chaos injection will be triggered for these destination ips - - name: DESTINATION_IPS - value: '' - - # provide the destination hosts - # chaos injection will be triggered for these destination hosts - - name: DESTINATION_HOSTS - value: '' - # provide the socket file path - name: SOCKET_PATH value: '/var/run/docker.sock' + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' labels: - name: pod-network-corruption + name: pod-http-modify-body app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" - app.kubernetes.io/version: latest + app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration + Injects cpu consumption on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-http-status-code + name: pod-cpu-hog-exec labels: - name: pod-http-status-code + name: pod-cpu-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -2153,94 +1867,58 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-http-status-code + - ./experiments -name pod-cpu-hog-exec command: - /bin/bash env: + - name: TOTAL_CHAOS_DURATION + value: '60' - - name: TARGET_CONTAINER - value: '' - - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + ## Number of CPU cores to stress + - name: CPU_CORES + value: '1' - # modified status code for the http response - # if no value is provided, a random status code from the supported code list will selected - # if an invalid status code is provided, the experiment will fail - # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] - - name: STATUS_CODE + ## Percentage of total pods to target + - name: PODS_AFFECTED_PERC value: '' - # whether to modify the body as per the status code provided - - name: "MODIFY_RESPONSE_BODY" - value: "true" - - # port of the target service - - name: TARGET_SERVICE_PORT - value: "80" - - # port on which the proxy will listen - - name: PROXY_PORT - value: "20000" - - # network interface on which the proxy will listen - - name: NETWORK_INTERFACE - value: "eth0" - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec + ## Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # lib can be litmus or pumba + ## env var that describes the library used to execute the chaos + ## default: litmus. Supported values: litmus - name: LIB value: 'litmus' - - # percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' + + # The command to kill the chaos process + - name: CHAOS_KILL_COMMAND + value: "kill $(find /proc -name exe -lname '*/md5sum' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}')" - name: TARGET_PODS value: '' - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'docker' - - # provide the socket file path - - name: SOCKET_PATH - value: '/var/run/docker.sock' - - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' labels: - name: pod-http-status-code + name: pod-cpu-hog-exec app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - poweroff node + Give a memory hog on a node belonging to a deployment kind: ChaosExperiment metadata: - name: node-poweroff + name: node-memory-hog labels: - name: node-poweroff + name: node-memory-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -2256,9 +1934,9 @@ spec: - apiGroups: [""] resources: ["events"] verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + # Fetch configmaps details and mount it to the experiment pod (if specified) - apiGroups: [""] - resources: ["configmaps","secrets"] + resources: ["configmaps"] verbs: ["get","list",] # Track and get the runner, experiment, and helper pods log - apiGroups: [""] @@ -2284,68 +1962,79 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name node-restart + - ./experiments -name node-memory-hog command: - /bin/bash env: - - name: SSH_USER - value: 'root' - name: TOTAL_CHAOS_DURATION - value: '60' + value: '120' - - name: REBOOT_COMMAND - value: '-o ServerAliveInterval=1 -o ServerAliveCountMax=1 "sudo systemctl poweroff --force --force" ; true' + ## Specify the size as percent of total node capacity Ex: '30' + ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_MEBIBYTES empty + - name: MEMORY_CONSUMPTION_PERCENTAGE + value: '' + + ## Specify the amount of memory to be consumed in mebibytes + ## NOTE: for selecting this option keep MEMORY_CONSUMPTION_PERCENTAGE empty + - name: MEMORY_CONSUMPTION_MEBIBYTES + value: '' + + - name: NUMBER_OF_WORKERS + value: '1' + + # ENTER THE COMMA SEPARATED TARGET NODES NAME + - name: TARGET_NODES + value: '' + + - name: NODE_LABEL + value: '' # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED + # Provide the LIB here + # Only litmus supported - name: LIB value: 'litmus' # provide lib image - name: LIB_IMAGE - value: "litmuschaos/go-runner:latest" - - # ENTER THE TARGET NODE NAME - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL - value: '' + value: 'litmuschaos/go-runner:latest' - # ENTER THE TARGET NODE IP - - name: TARGET_NODE_IP + ## percentage of total nodes to target + - name: NODES_AFFECTED_PERC value: '' + ## it defines the sequence of chaos execution for multiple target nodes + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + labels: - name: node-poweroff + name: node-memory-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - secrets: - - name: id-rsa - mountPath: /mnt/ --- apiVersion: litmuschaos.io/v1alpha1 description: - message: "Kills a container belonging to an application pod \n" + message: | + Fillup Ephemeral Storage of a Resource kind: ChaosExperiment metadata: - name: container-kill + name: disk-fill labels: - name: container-kill + name: disk-fill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: scope: Namespaced - permissions: + permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] resources: ["pods"] @@ -2394,56 +2083,55 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name container-kill + - ./experiments -name disk-fill command: - /bin/bash env: - name: TARGET_CONTAINER value: '' + + - name: FILL_PERCENTAGE + value: '80' + + - name: TOTAL_CHAOS_DURATION + value: '60' # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - # lib can be litmus or pumba + # Provide the LIB here + # Only litmus supported - name: LIB value: 'litmus' - - - name: TARGET_PODS - value: '' - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' + # provide the data block size + # supported unit is KB + - name: DATA_BLOCK_SIZE + value: '256' - - name: SIGNAL - value: 'SIGKILL' + - name: TARGET_PODS + value: '' - # provide the socket file path - - name: SOCKET_PATH - value: '/var/run/docker.sock' + - name: EPHEMERAL_STORAGE_MEBIBYTES + value: '' - # provide the name of container runtime - # for litmus LIB, it supports docker, containerd, crio - # for pumba LIB, it supports docker only - - name: CONTAINER_RUNTIME - value: 'docker' + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' - ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + # Provide the container runtime path + # Default set to docker container path + - name: CONTAINER_PATH + value: '/var/lib/docker/containers' ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel @@ -2451,22 +2139,22 @@ spec: value: 'parallel' labels: - name: container-kill + name: disk-fill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/host-path-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kills the docker service on the application node to check the resiliency. + Give IO disk stress on a node belonging to a deployment kind: ChaosExperiment metadata: - name: docker-service-kill + name: node-io-stress labels: - name: docker-service-kill + name: node-io-stress app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -2510,56 +2198,87 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name docker-service-kill + - ./experiments -name node-io-stress command: - /bin/bash env: - + - name: TOTAL_CHAOS_DURATION - value: '90' # in seconds + value: '120' + + ## specify the size as percentage of free space on the file system + ## default value 90 (in percentage) + - name: FILESYSTEM_UTILIZATION_PERCENTAGE + value: '10' - # Period to wait before injection of chaos in sec - - name: RAMP_TIME + ## we can specify the size in Gigabyte (Gb) also in place of percentage of free space + ## NOTE: for selecting this option FILESYSTEM_UTILIZATION_PERCENTAGE should be empty + - name: FILESYSTEM_UTILIZATION_BYTES value: '' - - name: LIB - value: 'litmus' + ## Number of core of CPU + - name: CPU + value: '1' + + ## Total number of workers default value is 4 + - name: NUMBER_OF_WORKERS + value: '4' + + ## Total number of vm workers + - name: VM_WORKERS + value: '1' + + ## enter the comma separated target nodes name + - name: TARGET_NODES + value: '' - name: NODE_LABEL + value: '' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' + # Provide the LIB here + # Only litmus supported + - name: LIB + value: 'litmus' + # provide lib image - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE + value: 'litmuschaos/go-runner:latest' + + ## percentage of total nodes to target + - name: NODES_AFFECTED_PERC value: '' + ## it defines the sequence of chaos execution for multiple target nodes + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + labels: - name: docker-service-kill + name: node-io-stress app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" app.kubernetes.io/version: latest - --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Scale the application replicas and test the node autoscaling on cluster + Injects cpu consumption on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-autoscaler + name: pod-cpu-hog labels: - name: pod-autoscaler + name: pod-cpu-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Cluster + scope: Namespaced permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -2581,10 +2300,22 @@ spec: - apiGroups: [""] resources: ["pods/exec"] verbs: ["get","list","create"] - # performs CRUD operations on the deployments and statefulsets + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get","patch","update"] + resources: ["deployments","statefulsets","replicasets", "daemonsets"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get","list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list","get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -2597,43 +2328,80 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-autoscaler + - ./experiments -name pod-cpu-hog command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION value: '60' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME + ## Number of CPU cores to stress + - name: CPU_CORES + value: '1' + + ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. + ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING + - name: CPU_LOAD + value: '100' + + ## Percentage of total pods to target + - name: PODS_AFFECTED_PERC value: '' - # Number of replicas to scale - - name: REPLICA_COUNT - value: '5' + ## Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED + ## env var that describes the library used to execute the chaos + ## default: litmus. Supported values: litmus, pumba - name: LIB value: 'litmus' - + + ## It is used in pumba lib only + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' + + ## It is used in pumba lib only + - name: STRESS_IMAGE + value: 'alexeiled/stress-ng:latest-ubuntu' + + ## provide the cluster runtime + - name: CONTAINER_RUNTIME + value: 'docker' + + # provide the socket file path + - name: SOCKET_PATH + value: '/var/run/docker.sock' + + - name: TARGET_PODS + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + labels: - name: pod-autoscaler + name: pod-cpu-hog app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects network latency on pods belonging to an app deployment + Injects network packet duplication on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-network-latency + name: pod-network-duplication labels: - name: pod-network-latency + name: pod-network-duplication app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -2689,47 +2457,45 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-network-latency + - ./experiments -name pod-network-duplication command: - /bin/bash env: - - - name: TARGET_CONTAINER - value: '' + - name: TOTAL_CHAOS_DURATION + value: '60' - - name: NETWORK_INTERFACE - value: 'eth0' + - name: RAMP_TIME + value: '' - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + - name: TARGET_CONTAINER + value: '' - name: TC_IMAGE value: 'gaiadocker/iproute2' - - name: NETWORK_LATENCY - value: '2000' #in ms - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - - # Time period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + - name: NETWORK_INTERFACE + value: 'eth0' - - name: JITTER - value: '0' + - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE + value: '100' # in percentage # lib can be litmus or pumba - name: LIB - value: 'litmus' + value: 'litmus' + + - name: TARGET_PODS + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - - name: TARGET_PODS - value: '' + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio @@ -2751,39 +2517,34 @@ spec: - name: SOCKET_PATH value: '/var/run/docker.sock' - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' - ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' labels: - name: pod-network-latency + name: pod-network-duplication app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest ---- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects memory consumption on pods belonging to an app deployment + Kills the docker service on the application node to check the resiliency. kind: ChaosExperiment metadata: - name: pod-memory-hog-exec + name: docker-service-kill labels: - name: pod-memory-hog-exec + name: docker-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Namespaced + scope: Cluster permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -2805,22 +2566,6 @@ spec: - apiGroups: [""] resources: ["pods/exec"] verbs: ["get","list","create"] - # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) - - apiGroups: ["apps"] - resources: ["deployments","statefulsets","replicasets", "daemonsets"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: ["apps.openshift.io"] - resources: ["deploymentconfigs"] - verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) - - apiGroups: [""] - resources: ["replicationcontrollers"] - verbs: ["get","list"] - # deriving the parent/owner details of the pod(if parent is argo-rollouts) - - apiGroups: ["argoproj.io"] - resources: ["rollouts"] - verbs: ["list","get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -2829,52 +2574,48 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name pod-memory-hog-exec + - ./experiments -name docker-service-kill command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - ## enter the amount of memory in megabytes to be consumed by the application pod - - name: MEMORY_CONSUMPTION - value: '500' + + - name: TOTAL_CHAOS_DURATION + value: '90' # in seconds - ## percentage of total pods to target - - name: PODS_AFFECTED_PERC - value: '' + # Period to wait before injection of chaos in sec + - name: RAMP_TIME + value: '' - ## Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + - name: LIB + value: 'litmus' - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - - name: LIB - value: 'litmus' - - # The command to kill the chaos process - - name: CHAOS_KILL_COMMAND - value: "kill $(find /proc -name exe -lname '*/dd' 2>&1 | grep -v 'Permission denied' | awk -F/ '{print $(NF-1)}' | head -n 1)" - - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' + - name: NODE_LABEL + value: '' - - name: TARGET_PODS - value: '' + # provide lib image + - name: LIB_IMAGE + value: 'ubuntu:16.04' + + # provide the target node name + - name: TARGET_NODE + value: '' labels: - name: pod-memory-hog-exec + name: docker-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job + app.kubernetes.io/service-kill: "true" app.kubernetes.io/version: latest + --- apiVersion: litmuschaos.io/v1alpha1 description: @@ -2981,12 +2722,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Injects network packet duplication on pods belonging to an app deployment + Injects network packet loss on pods belonging to an app deployment kind: ChaosExperiment metadata: - name: pod-network-duplication + name: pod-network-loss labels: - name: pod-network-duplication + name: pod-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -3042,45 +2783,48 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name pod-network-duplication + - ./experiments -name pod-network-loss command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - - name: RAMP_TIME - value: '' - + - name: TARGET_CONTAINER value: '' - - name: TC_IMAGE - value: 'gaiadocker/iproute2' + # provide lib image + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' - name: NETWORK_INTERFACE value: 'eth0' - - name: NETWORK_PACKET_DUPLICATION_PERCENTAGE - value: '100' # in percentage + - name: TC_IMAGE + value: 'gaiadocker/iproute2' - # lib can be litmus or pumba - - name: LIB - value: 'litmus' + - name: NETWORK_PACKET_LOSS_PERCENTAGE + value: '100' #in PERCENTAGE - - name: TARGET_PODS - value: '' + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds - # To select pods on specific node(s) - - name: NODE_LABEL - value: '' + # ime period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # it can be litmus or pumba + - name: LIB + value: 'litmus' ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + - name: TARGET_PODS + value: '' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' # provide the name of container runtime # for litmus LIB, it supports docker, containerd, crio @@ -3106,30 +2850,228 @@ spec: ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' + + labels: + name: pod-network-loss + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/runtime-api-usage: "true" + app.kubernetes.io/version: latest + +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Give a cpu spike on a node belonging to a deployment +kind: ChaosExperiment +metadata: + name: node-cpu-hog + labels: + name: node-cpu-hog + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: latest +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create","delete","get","list","patch","update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create","get","list","patch","update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get","list",] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get","list","watch"] + # for creating and managing to execute comands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get","list","create"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create","list","get","delete","deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosexperiments","chaosresults"] + verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list"] + image: "litmuschaos/go-runner:latest" + imagePullPolicy: Always + args: + - -c + - ./experiments -name node-cpu-hog + command: + - /bin/bash + env: + + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING + ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY + - name: NODE_CPU_CORE + value: '' + + ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. + ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING + - name: CPU_LOAD + value: '100' + + # ENTER THE COMMA SEPARATED TARGET NODES NAME + - name: TARGET_NODES + value: '' + + - name: NODE_LABEL + value: '' + + # PROVIDE THE LIB HERE + # ONLY LITMUS SUPPORTED + - name: LIB + value: 'litmus' + + # provide lib image + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' + + ## percentage of total nodes to target + - name: NODES_AFFECTED_PERC + value: '' + + ## it defines the sequence of chaos execution for multiple target nodes + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' + + labels: + name: node-cpu-hog + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: experiment-job + app.kubernetes.io/version: latest + +--- +--- +apiVersion: litmuschaos.io/v1alpha1 +description: + message: | + Taint the node where application pod is scheduled +kind: ChaosExperiment +metadata: + name: node-taint + labels: + name: node-taint + app.kubernetes.io/part-of: litmus + app.kubernetes.io/component: chaosexperiment + app.kubernetes.io/version: latest +spec: + definition: + scope: Cluster + permissions: + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create","delete","get","list","patch","update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create","get","list","patch","update"] + # Fetch configmaps details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get","list",] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get","list","watch"] + # for creating and managing to execute comands inside target container + - apiGroups: [""] + resources: ["pods/exec","pods/eviction"] + verbs: ["get","list","create"] + # ignore daemonsets while draining the node + - apiGroups: ["apps"] + resources: ["daemonsets"] + verbs: ["list","get","delete"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create","list","get","delete","deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosexperiments","chaosresults"] + verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list","patch","update"] + image: "litmuschaos/go-runner:latest" + imagePullPolicy: Always + args: + - -c + - ./experiments -name node-taint + command: + - /bin/bash + env: + + - name: TARGET_NODE + value: '' + + - name: NODE_LABEL + value: '' + + - name: TOTAL_CHAOS_DURATION + value: '60' + + # Provide the LIB here + # Only litmus supported + - name: LIB + value: 'litmus' + + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: '' + + # set taint label & effect + # key=value:effect or key:effect + - name: TAINTS + value: '' labels: - name: pod-network-duplication + name: node-taint app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kills the kubelet service on the application node to check the resiliency. + Pod DNS Spoof can spoof particular dns requests in target pod container to desired target hostnames kind: ChaosExperiment metadata: - name: kubelet-service-kill + name: pod-dns-spoof labels: - name: kubelet-service-kill + name: pod-dns-spoof app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Cluster + scope: Namespaced permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -3151,6 +3093,22 @@ spec: - apiGroups: [""] resources: ["pods/exec"] verbs: ["get","list","create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments","statefulsets","replicasets", "daemonsets"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get","list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list","get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -3159,58 +3117,68 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] image: "litmuschaos/go-runner:latest" - imagePullPolicy: Always args: - - -c - - ./experiments -name kubelet-service-kill + - -c + - ./experiments -name pod-dns-spoof command: - - /bin/bash + - /bin/bash env: - - - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds + - name: TARGET_CONTAINER + value: "" - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME - value: '' + # provide lib image + - name: LIB_IMAGE + value: "litmuschaos/go-runner:latest" - - name: LIB - value: 'litmus' + - name: TOTAL_CHAOS_DURATION + value: "60" # in seconds - - name: NODE_LABEL - value: '' + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME + value: "" - # provide lib image - - name: LIB_IMAGE - value: 'ubuntu:16.04' - - # provide the target node name - - name: TARGET_NODE - value: '' + ## percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: "" + + - name: TARGET_PODS + value: "" + + # provide the name of container runtime, it supports docker, containerd, crio + - name: CONTAINER_RUNTIME + value: "docker" + + # provide the socket file path + - name: SOCKET_PATH + value: "/var/run/docker.sock" + + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: "parallel" + + # map of the target hostnames eg. '{"abc.com":"spoofabc.com"}' . If empty no queries will be spoofed + - name: SPOOF_MAP + value: "" labels: - name: kubelet-service-kill + experiment: pod-dns-spoof app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/service-kill: "true" + app.kubernetes.io/runtime-api-usage: "true" app.kubernetes.io/version: latest ---- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Taint the node where application pod is scheduled + Kills the kubelet service on the application node to check the resiliency. kind: ChaosExperiment metadata: - name: node-taint + name: kubelet-service-kill labels: - name: node-taint + name: kubelet-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -3236,12 +3204,8 @@ spec: verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] - resources: ["pods/exec","pods/eviction"] + resources: ["pods/exec"] verbs: ["get","list","create"] - # ignore daemonsets while draining the node - - apiGroups: ["apps"] - resources: ["daemonsets"] - verbs: ["list","get","delete"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -3253,43 +3217,42 @@ spec: # for experiment to perform node status checks - apiGroups: [""] resources: ["nodes"] - verbs: ["get","list","patch","update"] + verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name node-taint + - ./experiments -name kubelet-service-kill command: - /bin/bash env: + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds - - name: TARGET_NODE - value: '' - - - name: NODE_LABEL + # Period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Provide the LIB here - # Only litmus supported - name: LIB value: 'litmus' - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME + - name: NODE_LABEL value: '' - # set taint label & effect - # key=value:effect or key:effect - - name: TAINTS - value: '' + # provide lib image + - name: LIB_IMAGE + value: 'ubuntu:16.04' + + # provide the target node name + - name: TARGET_NODE + value: '' labels: - name: node-taint + name: kubelet-service-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job + app.kubernetes.io/service-kill: "true" app.kubernetes.io/version: latest --- @@ -3413,18 +3376,18 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Give a cpu spike on a node belonging to a deployment + It injects chaos inside the pod which modifies the status code of the response from the provided application server to desired status code provided by the user and reverts after a specified duration kind: ChaosExperiment metadata: - name: node-cpu-hog + name: pod-http-status-code labels: - name: node-cpu-hog + name: pod-http-status-code app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest spec: definition: - scope: Cluster + scope: Namespaced permissions: # Create and monitor the experiment & helper pods - apiGroups: [""] @@ -3446,6 +3409,22 @@ spec: - apiGroups: [""] resources: ["pods/exec"] verbs: ["get","list","create"] + # deriving the parent/owner details of the pod(if parent is anyof {deployment, statefulset, daemonsets}) + - apiGroups: ["apps"] + resources: ["deployments","statefulsets","replicasets", "daemonsets"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: ["apps.openshift.io"] + resources: ["deploymentconfigs"] + verbs: ["list","get"] + # deriving the parent/owner details of the pod(if parent is deploymentConfig) + - apiGroups: [""] + resources: ["replicationcontrollers"] + verbs: ["get","list"] + # deriving the parent/owner details of the pod(if parent is argo-rollouts) + - apiGroups: ["argoproj.io"] + resources: ["rollouts"] + verbs: ["list","get"] # for configuring and monitor the experiment job by the chaos-runner pod - apiGroups: ["batch"] resources: ["jobs"] @@ -3454,65 +3433,86 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name node-cpu-hog + - ./experiments -name pod-http-status-code command: - /bin/bash env: - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before and after injection of chaos in sec - - name: RAMP_TIME + - name: TARGET_CONTAINER value: '' - ## ENTER THE NUMBER OF CORES OF CPU FOR CPU HOGGING - ## OPTIONAL VALUE IN CASE OF EMPTY VALUE IT WILL TAKE NODE CPU CAPACITY - - name: NODE_CPU_CORE + # provide lib image + - name: LIB_IMAGE + value: 'litmuschaos/go-runner:latest' + + # modified status code for the http response + # if no value is provided, a random status code from the supported code list will selected + # if an invalid status code is provided, the experiment will fail + # supported status code list: [200, 201, 202, 204, 300, 301, 302, 304, 307, 400, 401, 403, 404, 500, 501, 502, 503, 504] + - name: STATUS_CODE value: '' - ## LOAD CPU WITH GIVEN PERCENT LOADING FOR THE CPU STRESS WORKERS. - ## 0 IS EFFECTIVELY A SLEEP (NO LOAD) AND 100 IS FULL LOADING - - name: CPU_LOAD - value: '100' + # whether to modify the body as per the status code provided + - name: "MODIFY_RESPONSE_BODY" + value: "true" - # ENTER THE COMMA SEPARATED TARGET NODES NAME - - name: TARGET_NODES - value: '' + # port of the target service + - name: TARGET_SERVICE_PORT + value: "80" - - name: NODE_LABEL + # port on which the proxy will listen + - name: PROXY_PORT + value: "20000" + + # network interface on which the proxy will listen + - name: NETWORK_INTERFACE + value: "eth0" + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + + # Time period to wait before and after injection of chaos in sec + - name: RAMP_TIME value: '' - # PROVIDE THE LIB HERE - # ONLY LITMUS SUPPORTED + # lib can be litmus or pumba - name: LIB value: 'litmus' - # provide lib image - - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + # percentage of total pods to target + - name: PODS_AFFECTED_PERC + value: '' - ## percentage of total nodes to target - - name: NODES_AFFECTED_PERC + - name: TARGET_PODS value: '' - ## it defines the sequence of chaos execution for multiple target nodes + # provide the name of container runtime + # for litmus LIB, it supports docker, containerd, crio + # for pumba LIB, it supports docker only + - name: CONTAINER_RUNTIME + value: 'docker' + + # provide the socket file path + - name: SOCKET_PATH + value: '/var/run/docker.sock' + + # To select pods on specific node(s) + - name: NODE_LABEL + value: '' + + ## it defines the sequence of chaos execution for multiple target pods ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: - name: node-cpu-hog + name: pod-http-status-code app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: latest --- diff --git a/charts/kafka/experiments.yaml b/charts/kafka/experiments.yaml index 09ea53ab2..893dc2be1 100644 --- a/charts/kafka/experiments.yaml +++ b/charts/kafka/experiments.yaml @@ -1,12 +1,12 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Deleting a kafka broker pod + Detaching a persistent disk from a node/instance for kafka. kind: ChaosExperiment metadata: - name: kafka-broker-pod-failure + name: kafka-broker-disk-failure labels: - name: kafka-broker-pod-failure + name: kafka-broker-disk-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -14,76 +14,66 @@ spec: definition: scope: Cluster permissions: - # Create and monitor the experiment & helper pods - - apiGroups: [""] - resources: ["pods"] - verbs: ["create","delete","get","list","patch","update", "deletecollection"] - # Performs CRUD operations on the events inside chaosengine and chaosresult - - apiGroups: [""] - resources: ["events"] - verbs: ["create","get","list","patch","update"] - # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) - - apiGroups: [""] - resources: ["secrets","configmaps"] - verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log - - apiGroups: [""] - resources: ["pods/log"] - verbs: ["get","list","watch"] - # for creating and managing to execute comands inside target container - - apiGroups: [""] - resources: ["pods/exec"] - verbs: ["get","list","create"] - # for deriving the parent/owner details of the pod - - apiGroups: ["apps"] - resources: ["deployments","statefulsets"] - verbs: ["list","get"] - # for configuring and monitor the experiment job by the chaos-runner pod - - apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create","list","get","delete","deletecollection"] - # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow - - apiGroups: ["litmuschaos.io"] - resources: ["chaosengines","chaosexperiments","chaosresults"] - verbs: ["create","list","get","patch","update","delete"] - image: "litmuschaos/go-runner:latest" + - apiGroups: + - "" + - "apps" + - "batch" + - "litmuschaos.io" + resources: + - "statefulsets" + - "secrets" + - "jobs" + - "pods/log" + - "events" + - "pods" + - "pods/exec" + - "chaosengines" + - "chaosexperiments" + - "chaosresults" + verbs: + - "create" + - "delete" + - "get" + - "list" + - "patch" + image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name kafka-broker-pod-failure + - ansible-playbook ./experiments/kafka/kafka-broker-disk-failure/kafka-broker-disk-failure-ansible-logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: + - name: ANSIBLE_STDOUT_CALLBACK + value: 'default' - name: KAFKA_KIND value: 'statefulset' - name: KAFKA_LIVENESS_STREAM - value: 'enable' + value: 'enabled' - name: KAFKA_LIVENESS_IMAGE - value: 'litmuschaos/kafka-client:latest' + value: 'litmuschaos/kafka-client:ci' - # Recommended timeout for EKS platform: 60000 ms - name: KAFKA_CONSUMER_TIMEOUT - value: '30000' #in ms + value: '30000' - name: TOTAL_CHAOS_DURATION value: '15' - - name: CHAOS_INTERVAL - value: '5' + - name: PROJECT_ID + value: '' - ## it defines the sequence of chaos execution for multiple target pods - ## supported values: serial, parallel - - name: SEQUENCE - value: 'parallel' + - name: DISK_NAME + value: '' - - name: FORCE - value: 'true' + - name: ZONE_NAME + value: '' - - name: KAFKA_INSTANCE_NAME - value: '' + # GKE and AWS supported + - name: CLOUD_PLATFORM + value: 'GKE' - name: KAFKA_NAMESPACE value: '' @@ -94,6 +84,9 @@ spec: - name: KAFKA_BROKER value: '' + - name: KAFKA_INSTANCE_NAME + value: '' + - name: KAFKA_REPLICATION_FACTOR value: '' @@ -114,28 +107,26 @@ spec: - name: ZOOKEEPER_PORT value: '' - - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus - - name: LIB - value: 'litmus' - labels: - name: kafka-broker-pod-failure + name: kafka-broker-disk-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest + secrets: + - name: kafka-broker-disk-failure + mountPath: /tmp/ + --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Detaching a persistent disk from a node/instance for kafka. + Deleting a kafka broker pod kind: ChaosExperiment metadata: - name: kafka-broker-disk-failure + name: kafka-broker-pod-failure labels: - name: kafka-broker-disk-failure + name: kafka-broker-pod-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -143,66 +134,76 @@ spec: definition: scope: Cluster permissions: - - apiGroups: - - "" - - "apps" - - "batch" - - "litmuschaos.io" - resources: - - "statefulsets" - - "secrets" - - "jobs" - - "pods/log" - - "events" - - "pods" - - "pods/exec" - - "chaosengines" - - "chaosexperiments" - - "chaosresults" - verbs: - - "create" - - "delete" - - "get" - - "list" - - "patch" - image: "litmuschaos/ansible-runner:latest" + # Create and monitor the experiment & helper pods + - apiGroups: [""] + resources: ["pods"] + verbs: ["create","delete","get","list","patch","update", "deletecollection"] + # Performs CRUD operations on the events inside chaosengine and chaosresult + - apiGroups: [""] + resources: ["events"] + verbs: ["create","get","list","patch","update"] + # Fetch configmaps & secrets details and mount it to the experiment pod (if specified) + - apiGroups: [""] + resources: ["secrets","configmaps"] + verbs: ["get","list",] + # Track and get the runner, experiment, and helper pods log + - apiGroups: [""] + resources: ["pods/log"] + verbs: ["get","list","watch"] + # for creating and managing to execute comands inside target container + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["get","list","create"] + # for deriving the parent/owner details of the pod + - apiGroups: ["apps"] + resources: ["deployments","statefulsets"] + verbs: ["list","get"] + # for configuring and monitor the experiment job by the chaos-runner pod + - apiGroups: ["batch"] + resources: ["jobs"] + verbs: ["create","list","get","delete","deletecollection"] + # for creation, status polling and deletion of litmus chaos resources used within a chaos workflow + - apiGroups: ["litmuschaos.io"] + resources: ["chaosengines","chaosexperiments","chaosresults"] + verbs: ["create","list","get","patch","update","delete"] + image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/kafka/kafka-broker-disk-failure/kafka-broker-disk-failure-ansible-logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ./experiments -name kafka-broker-pod-failure command: - /bin/bash env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - name: KAFKA_KIND value: 'statefulset' - name: KAFKA_LIVENESS_STREAM - value: 'enabled' + value: 'enable' - name: KAFKA_LIVENESS_IMAGE - value: 'litmuschaos/kafka-client:ci' + value: 'litmuschaos/kafka-client:latest' + # Recommended timeout for EKS platform: 60000 ms - name: KAFKA_CONSUMER_TIMEOUT - value: '30000' + value: '30000' #in ms - name: TOTAL_CHAOS_DURATION value: '15' - - name: PROJECT_ID - value: '' + - name: CHAOS_INTERVAL + value: '5' - - name: DISK_NAME - value: '' + ## it defines the sequence of chaos execution for multiple target pods + ## supported values: serial, parallel + - name: SEQUENCE + value: 'parallel' - - name: ZONE_NAME - value: '' + - name: FORCE + value: 'true' - # GKE and AWS supported - - name: CLOUD_PLATFORM - value: 'GKE' + - name: KAFKA_INSTANCE_NAME + value: '' - name: KAFKA_NAMESPACE value: '' @@ -213,9 +214,6 @@ spec: - name: KAFKA_BROKER value: '' - - name: KAFKA_INSTANCE_NAME - value: '' - - name: KAFKA_REPLICATION_FACTOR value: '' @@ -236,14 +234,16 @@ spec: - name: ZOOKEEPER_PORT value: '' + + ## env var that describes the library used to execute the chaos + ## default: litmus. Supported values: litmus + - name: LIB + value: 'litmus' + labels: - name: kafka-broker-disk-failure + name: kafka-broker-pod-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - secrets: - - name: kafka-broker-disk-failure - mountPath: /tmp/ - --- diff --git a/charts/kube-aws/experiments.yaml b/charts/kube-aws/experiments.yaml index b3a113d9b..e2900ff9e 100644 --- a/charts/kube-aws/experiments.yaml +++ b/charts/kube-aws/experiments.yaml @@ -103,12 +103,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Stopping an EC2 instance identified by ID. + Detaching an ebs volume from ec2 instance. kind: ChaosExperiment metadata: - name: ec2-terminate-by-id + name: ebs-loss-by-id labels: - name: ec2-terminate-by-id + name: ebs-loss-by-id app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -144,15 +144,11 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] - # for experiment to perform node status checks - - apiGroups: [""] - resources: ["nodes"] - verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name ec2-terminate-by-id + - ./experiments -name ebs-loss-by-id command: - /bin/bash env: @@ -166,22 +162,16 @@ spec: - name: RAMP_TIME value: '' - # enable it if the target instance is a part of self-managed nodegroup. - - name: MANAGED_NODEGROUP - value: 'disable' - - # Instance ID of the target ec2 instance - # Multiple IDs can also be provided as comma separated values ex: id1,id2 - - name: EC2_INSTANCE_ID + - name: EBS_VOLUME_ID value: '' - name: REGION value: '' - name: SEQUENCE - value: 'parallel' + value: 'parallel' - # Provide the path of aws credentials mounted from secret + # Provide the path of aws credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE value: '/tmp/cloud_config.yml' @@ -191,7 +181,7 @@ spec: value: 'litmus' labels: - name: ec2-terminate-by-id + name: ebs-loss-by-id app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest @@ -281,12 +271,12 @@ spec: apiVersion: litmuschaos.io/v1alpha1 description: message: | - Detaching an ebs volume from ec2 instance. + Stopping an EC2 instance identified by ID. kind: ChaosExperiment metadata: - name: ebs-loss-by-tag + name: ec2-terminate-by-id labels: - name: ebs-loss-by-tag + name: ec2-terminate-by-id app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -322,11 +312,15 @@ spec: - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] + # for experiment to perform node status checks + - apiGroups: [""] + resources: ["nodes"] + verbs: ["get","list"] image: "litmuschaos/go-runner:latest" imagePullPolicy: Always args: - -c - - ./experiments -name ebs-loss-by-tag + - ./experiments -name ec2-terminate-by-id command: - /bin/bash env: @@ -336,22 +330,26 @@ spec: - name: CHAOS_INTERVAL value: '30' + # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - - name: EBS_VOLUME_TAG + # enable it if the target instance is a part of self-managed nodegroup. + - name: MANAGED_NODEGROUP + value: 'disable' + + # Instance ID of the target ec2 instance + # Multiple IDs can also be provided as comma separated values ex: id1,id2 + - name: EC2_INSTANCE_ID value: '' - name: REGION value: '' - name: SEQUENCE - value: 'parallel' - - - name: VOLUME_AFFECTED_PERC - value: '' + value: 'parallel' - # Provide the path of aws credentials mounted from secret + # Provide the path of aws credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE value: '/tmp/cloud_config.yml' @@ -361,7 +359,7 @@ spec: value: 'litmus' labels: - name: ebs-loss-by-tag + name: ec2-terminate-by-id app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest @@ -376,9 +374,9 @@ description: Detaching an ebs volume from ec2 instance. kind: ChaosExperiment metadata: - name: ebs-loss-by-id + name: ebs-loss-by-tag labels: - name: ebs-loss-by-id + name: ebs-loss-by-tag app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest @@ -418,7 +416,7 @@ spec: imagePullPolicy: Always args: - -c - - ./experiments -name ebs-loss-by-id + - ./experiments -name ebs-loss-by-tag command: - /bin/bash env: @@ -428,18 +426,20 @@ spec: - name: CHAOS_INTERVAL value: '30' - # Period to wait before and after injection of chaos in sec - name: RAMP_TIME value: '' - - name: EBS_VOLUME_ID + - name: EBS_VOLUME_TAG value: '' - name: REGION value: '' - name: SEQUENCE - value: 'parallel' + value: 'parallel' + + - name: VOLUME_AFFECTED_PERC + value: '' # Provide the path of aws credentials mounted from secret - name: AWS_SHARED_CREDENTIALS_FILE @@ -451,7 +451,7 @@ spec: value: 'litmus' labels: - name: ebs-loss-by-id + name: ebs-loss-by-tag app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest diff --git a/charts/openebs/experiments.yaml b/charts/openebs/experiments.yaml index 4668ce3f8..3b3beb3e1 100644 --- a/charts/openebs/experiments.yaml +++ b/charts/openebs/experiments.yaml @@ -1,42 +1,46 @@ apiVersion: litmuschaos.io/v1alpha1 description: message: | - Network delay to target pod belonging to a deployment/statefulset/daemonset + Network loss to pool pod belonging to a OpenEBS PVC kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-target-network-delay + name: openebs-pool-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-target-network-delay + name: openebs-pool-network-loss spec: definition: scope: Cluster permissions: - apiGroups: - "" - - "extensions" - "apps" - - "batch" - "litmuschaos.io" + - "batch" + - "extensions" - "storage.k8s.io" + - "openebs.io" resources: - - "jobs" - "pods" - - "services" - - "events" - - "pods/exec" - "pods/log" + - "pods/exec" + - "events" + - "jobs" - "configmaps" - - "secrets" + - "services" - "persistentvolumeclaims" - "storageclasses" + - "persistentvolumeclaims" - "persistentvolumes" - "chaosengines" - "chaosexperiments" - "chaosresults" + - "cstorpools" + - "cstorvolumereplicas" + - "replicasets" verbs: - "create" - "get" @@ -48,7 +52,7 @@ spec: imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-target-network-delay/openebs_target_network_delay_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-pool-network-loss/openebs_pool_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: @@ -58,23 +62,20 @@ spec: - name: OPENEBS_NAMESPACE value: 'openebs' - - name: APP_PVC - value: '' - - - name: TC_IMAGE - value: 'gaiadocker/iproute2' - # only pumba supported # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE + - name: LIB_IMAGE value: 'gaiaadm/pumba:0.6.5' - - name: NETWORK_DELAY - value: '60000' # in milliseconds + - name: TC_IMAGE + value: 'gaiadocker/iproute2' + + - name: NETWORK_PACKET_LOSS_PERCENTAGE + value: '100' # in percentage - name: TOTAL_CHAOS_DURATION - value: '60' # in seconds - + value: '120' # in seconds + - name: LIVENESS_APP_LABEL value: '' @@ -82,164 +83,181 @@ spec: value: '' - name: DATA_PERSISTENCE - value: '' + value: '' labels: - name: openebs-target-network-delay + name: openebs-pool-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-network-delay - # mountPath: /mnt +--- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Network loss to target pod belonging to a OpenEBS PVC + OpenEBS Pool Disk Loss contains chaos to disrupt state of infra resources. Experiments can inject disk loss against openEBS pool. kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-target-network-loss + name: openebs-pool-disk-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-target-network-loss + name: openebs-pool-disk-loss spec: definition: scope: Cluster permissions: - apiGroups: - "" - - "extensions" - "apps" - - "batch" - "litmuschaos.io" + - "batch" + - "extensions" - "storage.k8s.io" + - "openebs.io" resources: - - "jobs" - "pods" - - "events" - - "services" + - "jobs" - "pods/log" + - "events" - "pods/exec" + - "cstorpools" - "configmaps" - "secrets" - - "persistentvolumeclaims" - "storageclasses" - "persistentvolumes" - - "chaosengines" + - "persistentvolumeclaims" + - "cstorvolumereplicas" - "chaosexperiments" - "chaosresults" + - "chaosengines" verbs: - "create" - - "get" - - "delete" - "list" + - "get" - "patch" - "update" + - "delete" image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-target-network-loss/openebs_target_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-pool-disk-loss/openebs_pool_disk_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' + - name: ANSIBLE_STDOUT_CALLBACK + value: 'default' - - name: OPENEBS_NAMESPACE - value: 'openebs' + - name: TOTAL_CHAOS_DURATION + value: '60' - - name: APP_PVC - value: '' + # Period to wait before injection of chaos in sec + - name: RAMP_TIME + value: '' - - name: TC_IMAGE - value: 'gaiadocker/iproute2' + # GKE and AWS supported + - name: CLOUD_PLATFORM + value: 'GKE' - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' + - name: PROJECT_ID + value: '' - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' # in percentage + - name: NODE_NAME + value: '' - - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds + - name: DISK_NAME + value: '' - - name: LIVENESS_APP_LABEL - value: '' + - name: ZONE_NAME + value: '' - - name: LIVENESS_APP_NAMESPACE - value: '' + - name: DEVICE_NAME + value: '' + + - name: LIVENESS_APP_LABEL + value: '' - - name: DATA_PERSISTENCE - value: '' + - name: LIVENESS_APP_NAMESPACE + value: '' + - name: DATA_PERSISTENCE + value: '' + + - name: OPENEBS_NAMESPACE + value: 'openebs' + labels: - name: openebs-target-network-loss + name: openebs-pool-disk-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-network-loss - # mountPath: /mnt + + configmaps: + - name: openebs-pool-disk-loss + mountPath: /mnt/ + + secrets: + - name: cloud-secret + mountPath: /tmp/ --- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kill the cstor target/Jiva controller container and check if gets created again + Kill all openebs control plane pod and check if gets scheduled again kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-target-container-failure + name: openebs-control-plane-chaos app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-target-container-failure + name: openebs-control-plane-chaos spec: definition: - scope: Cluster + scope: Namespaced permissions: - apiGroups: - "" - - "apps" - - "batch" - "litmuschaos.io" - - "storage.k8s.io" + - "batch" + - "apps" resources: - - "jobs" - "pods" - - "events" - - "pods/exec" - "pods/log" + - "deployments" + - "events" + - "jobs" - "configmaps" - - "secrets" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" - "chaosengines" - "chaosexperiments" - "chaosresults" verbs: - "create" - - "delete" - - "get" - "list" + - "get" - "patch" - "update" + - "delete" + - apiGroups: + - "" + resources: + - "nodes" + verbs: + - "get" + - "list" + image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-target-container-failure/openebs_target_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-control-plane-chaos/openebs_control_plane_chaos_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: @@ -249,60 +267,23 @@ spec: - name: OPENEBS_NAMESPACE value: 'openebs' - - name: APP_PVC + ## Period to wait before injection of chaos + - name: RAMP_TIME value: '' - - # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci - # For pumba image use : gaiaadm/pumba:0.6.5 - # For containerd image use : gprasath/crictl:ci - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - # Specify the container runtime used , to pick the relevant chaos util - - name: CONTAINER_RUNTIME - value: 'docker' - - # TARGET_CONTAINER values: cstor-volume-mgmt , cstor-istgt - # For cstor-volume-istgt container kill use : cstor-istgt - # For volume-mgmt-kill container use : cstor-volume-mgmt - - - name: TARGET_CONTAINER - value: 'cstor-volume-mgmt' - + - name: FORCE - value: 'true' - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE value: '' - - name: DATA_PERSISTENCE - value: '' - - - name: DEPLOY_TYPE - value: 'deployment' - - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' - - # provide the total chaos duration - - name: TOTAL_CHAOS_DURATION - value: '20' + ## env var that describes the library used to execute the chaos + ## default: litmus. Supported values: litmus, powerfulseal + - name: LIB + value: 'litmus' - - name: SOAK_TIME - value: '60' - labels: - name: openebs-target-container-failure + name: openebs-control-plane-chaos app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - #configmaps: - #- name: openebs-target-container-failure - # mountPath: /mnt --- apiVersion: litmuschaos.io/v1alpha1 @@ -399,123 +380,117 @@ spec: app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest ---- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kill the OpenEBS NFS provisioner container and check if pods consuming the NFS PVs continue to be available and volumes are writable (RWM mode) + Network loss to target pod belonging to a OpenEBS PVC kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-nfs-provisioner-kill + name: openebs-target-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-nfs-provisioner-kill + name: openebs-target-network-loss spec: definition: scope: Cluster permissions: - apiGroups: - "" + - "extensions" - "apps" - - "litmuschaos.io" - "batch" - - "extensions" + - "litmuschaos.io" - "storage.k8s.io" resources: + - "jobs" - "pods" - - "pods/exec" - - "pods/log" - - "deployments" - "events" - - "jobs" - - "configmaps" - "services" - - "persistentvolumeclaims" - - "storageclasses" + - "pods/log" + - "pods/exec" + - "configmaps" + - "secrets" + - "persistentvolumeclaims" + - "storageclasses" - "persistentvolumes" + - "chaosengines" - "chaosexperiments" - "chaosresults" - - "chaosengines" verbs: - "create" - - "list" - "get" - - "patch" - - "update" - "delete" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - "list" - + - "patch" + - "update" image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-nfs-provisioner-kill/openebs_nfs_provisioner_kill_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-target-network-loss/openebs_target_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - name: ANSIBLE_STDOUT_CALLBACK value: 'default' - # NFS default container - - name: TARGET_CONTAINER - value: 'nfs-provisioner' + - name: OPENEBS_NAMESPACE + value: 'openebs' - # Period to wait before injection of chaos in sec - - name: RAMP_TIME + - name: APP_PVC value: '' - # It supports pumba and containerd - - name: LIB - value: 'pumba' + - name: TC_IMAGE + value: 'gaiadocker/iproute2' - # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci - # For pumba image use: gaiaadm/pumba:0.6.5 - # For containerd image use: gprasath/crictl:ci + # only pumba supported + # For pumba image use : gaiaadm/pumba:0.6.5 - name: LIB_IMAGE value: 'gaiaadm/pumba:0.6.5' - # provide the chaos interval - - name: CHAOS_INTERVAL - value: '10' + - name: NETWORK_PACKET_LOSS_PERCENTAGE + value: '100' # in percentage - # provide the total chaos duration - name: TOTAL_CHAOS_DURATION - value: '20' + value: '120' # in seconds + + - name: LIVENESS_APP_LABEL + value: '' + + - name: LIVENESS_APP_NAMESPACE + value: '' + + - name: DATA_PERSISTENCE + value: '' labels: - name: openebs-nfs-provisioner-kill + name: openebs-target-network-loss app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - configmaps: - - name: openebs-nfs-provisioner-kill - mountPath: /mnt/ + #configmaps: + #- name: openebs-target-network-loss + # mountPath: /mnt --- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kill the cstor target/Jiva controller pod and check if gets created again + Kill the pool pod and check if gets scheduled again kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-target-pod-failure + name: openebs-pool-pod-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-target-pod-failure + name: openebs-pool-pod-failure spec: definition: scope: Cluster @@ -526,23 +501,23 @@ spec: - "apps" - "batch" - "litmuschaos.io" + - "openebs.io" - "storage.k8s.io" resources: - "deployments" + - "replicasets" - "jobs" + - "pods/log" - "events" - "pods" - - "pods/log" - - "pods/exec" - "configmaps" - "secrets" - - "services" + - "storageclasses" + - "persistentvolumeclaims" + - "cstorvolumereplicas" - "chaosengines" - "chaosexperiments" - "chaosresults" - - "persistentvolumeclaims" - - "storageclasses" - - "persistentvolumes" verbs: - "create" - "get" @@ -561,94 +536,94 @@ spec: imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-target-pod-failure/openebs_target_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-pool-pod-failure/openebs_pool_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' + value: default - - name: OPENEBS_NAMESPACE + - name: OPENEBS_NS value: 'openebs' - + - name: APP_PVC value: '' - - name: FORCE - value: 'true' - - name: LIVENESS_APP_LABEL value: '' - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: DATA_PERSISTENCE - value: '' + value: '' - - name: TOTAL_CHAOS_DURATION - value: '60' + - name: CHAOS_ITERATIONS + value: '2' # provide the kill count - name: KILL_COUNT value: '' - - name: CHAOS_INTERVAL - value: '15' - - - name: DEPLOY_TYPE - value: 'deployment' + - name: DATA_PERSISTENCE + value: '' labels: - name: openebs-target-pod-failure + name: openebs-pool-pod-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest #configmaps: - #- name: openebs-target-pod-failure + #- name: openebs-pool-pod-failure # mountPath: /mnt + --- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kill all openebs control plane pod and check if gets scheduled again + Kill the cstor target/Jiva controller pod and check if gets created again kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-control-plane-chaos + name: openebs-target-pod-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-control-plane-chaos + name: openebs-target-pod-failure spec: definition: - scope: Namespaced + scope: Cluster permissions: - apiGroups: - "" - - "litmuschaos.io" - - "batch" + - "extensions" - "apps" + - "batch" + - "litmuschaos.io" + - "storage.k8s.io" resources: - - "pods" - - "pods/log" - "deployments" - - "events" - "jobs" + - "events" + - "pods" + - "pods/log" + - "pods/exec" - "configmaps" + - "secrets" + - "services" - "chaosengines" - "chaosexperiments" - "chaosresults" + - "persistentvolumeclaims" + - "storageclasses" + - "persistentvolumes" verbs: - "create" - - "list" - "get" + - "delete" + - "list" - "patch" - "update" - - "delete" - apiGroups: - "" resources: @@ -656,12 +631,11 @@ spec: verbs: - "get" - "list" - image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-control-plane-chaos/openebs_control_plane_chaos_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-target-pod-failure/openebs_target_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: @@ -670,40 +644,59 @@ spec: - name: OPENEBS_NAMESPACE value: 'openebs' - - ## Period to wait before injection of chaos - - name: RAMP_TIME + + - name: APP_PVC value: '' - + - name: FORCE + value: 'true' + + - name: LIVENESS_APP_LABEL value: '' - ## env var that describes the library used to execute the chaos - ## default: litmus. Supported values: litmus, powerfulseal - - name: LIB - value: 'litmus' + - name: LIVENESS_APP_NAMESPACE + value: '' + + - name: DATA_PERSISTENCE + value: '' + + - name: TOTAL_CHAOS_DURATION + value: '60' + + # provide the kill count + - name: KILL_COUNT + value: '' + + - name: CHAOS_INTERVAL + value: '15' + + - name: DEPLOY_TYPE + value: 'deployment' labels: - name: openebs-control-plane-chaos + name: openebs-target-pod-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest + #configmaps: + #- name: openebs-target-pod-failure + # mountPath: /mnt --- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - OpenEBS Pool Disk Loss contains chaos to disrupt state of infra resources. Experiments can inject disk loss against openEBS pool. + Kill the OpenEBS NFS provisioner container and check if pods consuming the NFS PVs continue to be available and volumes are writable (RWM mode) kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-pool-disk-loss + name: openebs-nfs-provisioner-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-pool-disk-loss + name: openebs-nfs-provisioner-kill spec: definition: scope: Cluster @@ -715,20 +708,18 @@ spec: - "batch" - "extensions" - "storage.k8s.io" - - "openebs.io" resources: - "pods" - - "jobs" + - "pods/exec" - "pods/log" + - "deployments" - "events" - - "pods/exec" - - "cstorpools" + - "jobs" - "configmaps" - - "secrets" + - "services" + - "persistentvolumeclaims" - "storageclasses" - "persistentvolumes" - - "persistentvolumeclaims" - - "cstorvolumereplicas" - "chaosexperiments" - "chaosresults" - "chaosengines" @@ -739,113 +730,101 @@ spec: - "patch" - "update" - "delete" + - apiGroups: + - "" + resources: + - "nodes" + verbs: + - "get" + - "list" + image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-pool-disk-loss/openebs_pool_disk_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-nfs-provisioner-kill/openebs_nfs_provisioner_kill_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - - name: ANSIBLE_STDOUT_CALLBACK - value: 'default' - - - name: TOTAL_CHAOS_DURATION - value: '60' - - # Period to wait before injection of chaos in sec - - name: RAMP_TIME - value: '' - - # GKE and AWS supported - - name: CLOUD_PLATFORM - value: 'GKE' - - - name: PROJECT_ID - value: '' + - name: ANSIBLE_STDOUT_CALLBACK + value: 'default' - - name: NODE_NAME - value: '' + # NFS default container + - name: TARGET_CONTAINER + value: 'nfs-provisioner' - - name: DISK_NAME - value: '' + # Period to wait before injection of chaos in sec + - name: RAMP_TIME + value: '' - - name: ZONE_NAME - value: '' + # It supports pumba and containerd + - name: LIB + value: 'pumba' - - name: DEVICE_NAME - value: '' - - - name: LIVENESS_APP_LABEL - value: '' + # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci + # For pumba image use: gaiaadm/pumba:0.6.5 + # For containerd image use: gprasath/crictl:ci + - name: LIB_IMAGE + value: 'gaiaadm/pumba:0.6.5' - - name: LIVENESS_APP_NAMESPACE - value: '' + # provide the chaos interval + - name: CHAOS_INTERVAL + value: '10' - - name: DATA_PERSISTENCE - value: '' + # provide the total chaos duration + - name: TOTAL_CHAOS_DURATION + value: '20' - - name: OPENEBS_NAMESPACE - value: 'openebs' - labels: - name: openebs-pool-disk-loss + name: openebs-nfs-provisioner-kill app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest - configmaps: - - name: openebs-pool-disk-loss - mountPath: /mnt/ - - secrets: - - name: cloud-secret - mountPath: /tmp/ + - name: openebs-nfs-provisioner-kill + mountPath: /mnt/ +--- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Network loss to pool pod belonging to a OpenEBS PVC + Kill the pool container and check if gets scheduled again kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-pool-network-loss + name: openebs-pool-container-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-pool-network-loss + name: openebs-pool-container-failure spec: definition: scope: Cluster permissions: - apiGroups: - "" + - "extensions" - "apps" - - "litmuschaos.io" - "batch" - - "extensions" - - "storage.k8s.io" + - "litmuschaos.io" - "openebs.io" + - "storage.k8s.io" resources: + - "replicasets" + - "events" + - "jobs" - "pods" - "pods/log" - "pods/exec" - - "events" - - "jobs" - "configmaps" - - "services" - - "persistentvolumeclaims" - - "storageclasses" + - "secrets" - "persistentvolumeclaims" - - "persistentvolumes" + - "cstorvolumereplicas" - "chaosengines" - "chaosexperiments" - "chaosresults" - - "cstorpools" - - "cstorvolumereplicas" - - "replicasets" verbs: - "create" - "get" @@ -857,90 +836,96 @@ spec: imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-pool-network-loss/openebs_pool_network_loss_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-pool-container-failure/openebs_pool_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - name: ANSIBLE_STDOUT_CALLBACK value: 'default' - - name: OPENEBS_NAMESPACE + - name: OPENEBS_NS value: 'openebs' + - name: APP_PVC + value: '' + + - name: LIVENESS_APP_LABEL + value: '' + # only pumba supported # For pumba image use : gaiaadm/pumba:0.6.5 - name: LIB_IMAGE value: 'gaiaadm/pumba:0.6.5' - - name: TC_IMAGE - value: 'gaiadocker/iproute2' + - name: LIVENESS_APP_NAMESPACE + value: '' - - name: NETWORK_PACKET_LOSS_PERCENTAGE - value: '100' # in percentage + # provide the chaos interval + - name: CHAOS_INTERVAL + value: '10' + # provide the total chaos duration - name: TOTAL_CHAOS_DURATION - value: '120' # in seconds - - - name: LIVENESS_APP_LABEL - value: '' - - - name: LIVENESS_APP_NAMESPACE - value: '' + value: '20' - name: DATA_PERSISTENCE value: '' + - name: CHAOS_ITERATIONS + value: '2' + labels: - name: openebs-pool-network-loss + name: openebs-pool-container-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest + #configmaps: + #- name: openebs-pool-container-failure + # mountPath: /mnt --- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kill the pool container and check if gets scheduled again + Kill the cstor target/Jiva controller container and check if gets created again kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-pool-container-failure + name: openebs-target-container-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-pool-container-failure + name: openebs-target-container-failure spec: definition: scope: Cluster permissions: - apiGroups: - "" - - "extensions" - "apps" - "batch" - "litmuschaos.io" - - "openebs.io" - "storage.k8s.io" resources: - - "replicasets" - - "events" - "jobs" - "pods" - - "pods/log" + - "events" - "pods/exec" + - "pods/log" - "configmaps" - "secrets" - "persistentvolumeclaims" - - "cstorvolumereplicas" + - "storageclasses" + - "persistentvolumes" - "chaosengines" - "chaosexperiments" - "chaosresults" verbs: - "create" - - "get" - "delete" + - "get" - "list" - "patch" - "update" @@ -948,29 +933,50 @@ spec: imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-pool-container-failure/openebs_pool_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-target-container-failure/openebs_target_container_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - name: ANSIBLE_STDOUT_CALLBACK value: 'default' - - name: OPENEBS_NS + - name: OPENEBS_NAMESPACE value: 'openebs' - name: APP_PVC value: '' + # LIB_IMAGE can be - gaiaadm/pumba:0.6.5, gprasath/crictl:ci + # For pumba image use : gaiaadm/pumba:0.6.5 + # For containerd image use : gprasath/crictl:ci + - name: LIB_IMAGE + value: 'gaiaadm/pumba:0.6.5' + + # Specify the container runtime used , to pick the relevant chaos util + - name: CONTAINER_RUNTIME + value: 'docker' + + # TARGET_CONTAINER values: cstor-volume-mgmt , cstor-istgt + # For cstor-volume-istgt container kill use : cstor-istgt + # For volume-mgmt-kill container use : cstor-volume-mgmt + + - name: TARGET_CONTAINER + value: 'cstor-volume-mgmt' + + - name: FORCE + value: 'true' + - name: LIVENESS_APP_LABEL value: '' - # only pumba supported - # For pumba image use : gaiaadm/pumba:0.6.5 - - name: LIB_IMAGE - value: 'gaiaadm/pumba:0.6.5' - - name: LIVENESS_APP_NAMESPACE - value: '' + value: '' + + - name: DATA_PERSISTENCE + value: '' + + - name: DEPLOY_TYPE + value: 'deployment' # provide the chaos interval - name: CHAOS_INTERVAL @@ -980,36 +986,32 @@ spec: - name: TOTAL_CHAOS_DURATION value: '20' - - name: DATA_PERSISTENCE - value: '' - - - name: CHAOS_ITERATIONS - value: '2' - + - name: SOAK_TIME + value: '60' + labels: - name: openebs-pool-container-failure + name: openebs-target-container-failure app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest #configmaps: - #- name: openebs-pool-container-failure + #- name: openebs-target-container-failure # mountPath: /mnt ---- --- apiVersion: litmuschaos.io/v1alpha1 description: message: | - Kill the pool pod and check if gets scheduled again + Network delay to target pod belonging to a deployment/statefulset/daemonset kind: ChaosExperiment metadata: labels: litmuschaos.io/name: openebs - name: openebs-pool-pod-failure + name: openebs-target-network-delay app.kubernetes.io/part-of: litmus app.kubernetes.io/component: chaosexperiment app.kubernetes.io/version: latest - name: openebs-pool-pod-failure + name: openebs-target-network-delay spec: definition: scope: Cluster @@ -1020,20 +1022,19 @@ spec: - "apps" - "batch" - "litmuschaos.io" - - "openebs.io" - "storage.k8s.io" resources: - - "deployments" - - "replicasets" - "jobs" - - "pods/log" - - "events" - "pods" + - "services" + - "events" + - "pods/exec" + - "pods/log" - "configmaps" - "secrets" - - "storageclasses" - "persistentvolumeclaims" - - "cstorvolumereplicas" + - "storageclasses" + - "persistentvolumes" - "chaosengines" - "chaosexperiments" - "chaosresults" @@ -1044,54 +1045,53 @@ spec: - "list" - "patch" - "update" - - apiGroups: - - "" - resources: - - "nodes" - verbs: - - "get" - - "list" image: "litmuschaos/ansible-runner:latest" imagePullPolicy: Always args: - -c - - ansible-playbook ./experiments/openebs/openebs-pool-pod-failure/openebs_pool_pod_failure_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 + - ansible-playbook ./experiments/openebs/openebs-target-network-delay/openebs_target_network_delay_ansible_logic.yml -i /etc/ansible/hosts -vv; exit 0 command: - /bin/bash env: - name: ANSIBLE_STDOUT_CALLBACK - value: default + value: 'default' - - name: OPENEBS_NS + - name: OPENEBS_NAMESPACE value: 'openebs' - name: APP_PVC value: '' + - name: TC_IMAGE + value: 'gaiadocker/iproute2' + + # only pumba supported + # For pumba image use : gaiaadm/pumba:0.6.5 + - name: LIB_IMAGE + value: 'gaiaadm/pumba:0.6.5' + + - name: NETWORK_DELAY + value: '60000' # in milliseconds + + - name: TOTAL_CHAOS_DURATION + value: '60' # in seconds + - name: LIVENESS_APP_LABEL value: '' - name: LIVENESS_APP_NAMESPACE - value: '' - - - name: CHAOS_ITERATIONS - value: '2' - - # provide the kill count - - name: KILL_COUNT value: '' - name: DATA_PERSISTENCE - value: '' + value: '' labels: - name: openebs-pool-pod-failure + name: openebs-target-network-delay app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job app.kubernetes.io/version: latest #configmaps: - #- name: openebs-pool-pod-failure + #- name: openebs-target-network-delay # mountPath: /mnt - --- diff --git a/experiments/generic/pod-http-modify-body/engine.yaml b/experiments/generic/pod-http-modify-body/engine.yaml index cdf068844..1956c53d4 100644 --- a/experiments/generic/pod-http-modify-body/engine.yaml +++ b/experiments/generic/pod-http-modify-body/engine.yaml @@ -18,7 +18,7 @@ spec: # set chaos duration (in sec) as desired - name: TOTAL_CHAOS_DURATION value: '60' # in seconds - + # provide the body string to overwrite the response body - name: RESPONSE_BODY value: '' @@ -39,4 +39,3 @@ spec: ## percentage of total pods to target - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/experiments/generic/pod-http-modify-body/experiment.yaml b/experiments/generic/pod-http-modify-body/experiment.yaml index 0856d7216..4add2bc64 100644 --- a/experiments/generic/pod-http-modify-body/experiment.yaml +++ b/experiments/generic/pod-http-modify-body/experiment.yaml @@ -26,10 +26,10 @@ spec: - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -38,7 +38,7 @@ spec: - apiGroups: ["apps"] resources: ["deployments","statefulsets","replicasets", "daemonsets"] verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"] @@ -72,13 +72,23 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' - + value: 'litmuschaos/go-runner:latest' + # provide the body string to overwrite the response body # if no value is provided, response will be an empty body. - name: RESPONSE_BODY value: '' + # provide the encoding type for the response body + # currently supported value are gzip, deflate + # if empty no encoding will be applied + - name: CONTENT_ENCODING + value: '' + + # provide the content type for the response body + - name: CONTENT_TYPE + value: 'text/plain' + # port of the target service - name: TARGET_SERVICE_PORT value: "80" @@ -86,7 +96,7 @@ spec: # port on which the proxy will listen - name: PROXY_PORT value: "20000" - + # toxicity is the probability of the request to be affected # provide the percentage value in the range of 0-100 # 0 means no request will be affected and 100 means all request will be affected @@ -133,9 +143,9 @@ spec: ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: name: pod-http-modify-body app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml b/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml index 8be10aa97..0cf42479e 100644 --- a/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml +++ b/experiments/generic/pod-http-modify-body/pod-http-modify-body.chartserviceversion.yaml @@ -1,36 +1,36 @@ apiVersion: litmuchaos.io/v1alpha1 kind: ChartServiceVersion metadata: - name: pod-http-modify-body + name: pod-http-modify-body version: 0.1.0 annotations: categories: generic spec: - displayName: pod-http-modify-body + displayName: pod-http-modify-body categoryDescription: > - Pod-http-modify-body contains chaos to disrupt http requests of kubernetes pods. This experiment can modify the body of the response from the service targetted. + Pod-http-modify-body contains chaos to disrupt http requests of kubernetes pods. This experiment can modify the body of the response from the service targetted. - Causes modification of response body of the HTTP request. - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" + keywords: + - "pods" + - "kubernetes" + - "generic" + - "exec" + - "http" - "response body" - platforms: + platforms: - "Minikube" maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: + maintainers: + - name: Akash Shrivastava + email: akash.shrivastava@harness.io + minKubeVersion: 1.12.0 + provider: name: Harness labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: latest - links: + links: - name: Source Code url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-modify-body - name: Documentation diff --git a/experiments/generic/pod-http-modify-body/rbac-psp.yaml b/experiments/generic/pod-http-modify-body/rbac-psp.yaml index 2869bded7..d871fd9a6 100644 --- a/experiments/generic/pod-http-modify-body/rbac-psp.yaml +++ b/experiments/generic/pod-http-modify-body/rbac-psp.yaml @@ -28,10 +28,10 @@ rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -40,7 +40,7 @@ rules: - apiGroups: ["apps"] resources: ["deployments","statefulsets","replicasets", "daemonsets"] verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"] diff --git a/experiments/generic/pod-http-modify-body/rbac.yaml b/experiments/generic/pod-http-modify-body/rbac.yaml index 584be6242..16ec26958 100644 --- a/experiments/generic/pod-http-modify-body/rbac.yaml +++ b/experiments/generic/pod-http-modify-body/rbac.yaml @@ -28,10 +28,10 @@ rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -40,7 +40,7 @@ rules: - apiGroups: ["apps"] resources: ["deployments","statefulsets","replicasets", "daemonsets"] verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"] diff --git a/experiments/generic/pod-http-status-code/engine.yaml b/experiments/generic/pod-http-status-code/engine.yaml index 36f9cfc33..72c116959 100644 --- a/experiments/generic/pod-http-status-code/engine.yaml +++ b/experiments/generic/pod-http-status-code/engine.yaml @@ -22,7 +22,7 @@ spec: # set chaos interval (in sec) as desired - name: CHAOS_INTERVAL value: '10' - + # modified status code for the http response # if no value is provided, a random status code from the supported code list will selected # if an invalid status code is provided, the experiment will fail @@ -33,7 +33,10 @@ spec: # whether to modify the body as per the status code provided - name: "MODIFY_RESPONSE_BODY" value: "true" - + + # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true + - name: RESPONSE_BODY + value: '' # port of the target service - name: TARGET_SERVICE_PORT value: "80" @@ -51,4 +54,3 @@ spec: - name: PODS_AFFECTED_PERC value: '' - \ No newline at end of file diff --git a/experiments/generic/pod-http-status-code/experiment.yaml b/experiments/generic/pod-http-status-code/experiment.yaml index 8d1180529..663202bd7 100644 --- a/experiments/generic/pod-http-status-code/experiment.yaml +++ b/experiments/generic/pod-http-status-code/experiment.yaml @@ -26,10 +26,10 @@ spec: - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -38,7 +38,7 @@ spec: - apiGroups: ["apps"] resources: ["deployments","statefulsets","replicasets", "daemonsets"] verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"] @@ -72,7 +72,7 @@ spec: # provide lib image - name: LIB_IMAGE - value: 'litmuschaos/go-runner:latest' + value: 'litmuschaos/go-runner:latest' # modified status code for the http response # if no value is provided, a random status code from the supported code list will selected @@ -86,6 +86,20 @@ spec: - name: "MODIFY_RESPONSE_BODY" value: "true" + # provide the body string to overwrite the response body. This will be used only if MODIFY_RESPONSE_BODY is set to true + - name: RESPONSE_BODY + value: '' + + # provide the encoding type for the response body + # currently supported value are gzip, deflate + # if empty no encoding will be applied + - name: CONTENT_ENCODING + value: '' + + # provide the content type for the response body + - name: CONTENT_TYPE + value: 'text/plain' + # port of the target service - name: TARGET_SERVICE_PORT value: "80" @@ -99,7 +113,7 @@ spec: # 0 means no request will be affected and 100 means all request will be affected - name: TOXICITY value: "100" - + # network interface on which the proxy will listen - name: NETWORK_INTERFACE value: "eth0" @@ -140,9 +154,9 @@ spec: ## supported values: serial, parallel - name: SEQUENCE value: 'parallel' - + labels: name: pod-http-status-code app.kubernetes.io/part-of: litmus app.kubernetes.io/component: experiment-job - app.kubernetes.io/version: latest + app.kubernetes.io/version: latest diff --git a/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml b/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml index 13ebb6f6d..fad76f309 100644 --- a/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml +++ b/experiments/generic/pod-http-status-code/pod-http-status-code.chartserviceversion.yaml @@ -1,37 +1,37 @@ apiVersion: litmuchaos.io/v1alpha1 kind: ChartServiceVersion metadata: - name: pod-http-status-code + name: pod-http-status-code version: 0.1.0 annotations: categories: generic spec: - displayName: pod-http-status-code + displayName: pod-http-status-code categoryDescription: > - pod-http-status-code contains chaos to disrupt http requests of kubernetes pods. This experiment can modify the status code of the response on the service targetted. + pod-http-status-code contains chaos to disrupt http requests of kubernetes pods. This experiment can modify the status code of the response on the service targetted. - Causes modification of status code of the HTTP request. - The application pod should be healthy once chaos is stopped. Service-requests should be served despite chaos. - keywords: - - "pods" - - "kubernetes" - - "generic" - - "exec" - - "http" - - "status code" + keywords: + - "pods" + - "kubernetes" + - "generic" + - "exec" + - "http" + - "status code" - "response code" - platforms: + platforms: - "Minikube" maturity: alpha - maintainers: - - name: Akash Shrivastava - email: akash.shrivastava@harness.io - minKubeVersion: 1.12.0 - provider: + maintainers: + - name: Akash Shrivastava + email: akash.shrivastava@harness.io + minKubeVersion: 1.12.0 + provider: name: Harness labels: app.kubernetes.io/component: chartserviceversion app.kubernetes.io/version: latest - links: + links: - name: Source Code url: https://github.com/litmuschaos/litmus-go/tree/master/experiments/generic/pod-http-status-code - name: Documentation diff --git a/experiments/generic/pod-http-status-code/rbac-psp.yaml b/experiments/generic/pod-http-status-code/rbac-psp.yaml index 8318ccd5f..58d13cd34 100644 --- a/experiments/generic/pod-http-status-code/rbac-psp.yaml +++ b/experiments/generic/pod-http-status-code/rbac-psp.yaml @@ -29,10 +29,10 @@ rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -41,7 +41,7 @@ rules: - apiGroups: ["apps"] resources: ["deployments","statefulsets","replicasets", "daemonsets"] verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"] diff --git a/experiments/generic/pod-http-status-code/rbac.yaml b/experiments/generic/pod-http-status-code/rbac.yaml index 5f117f5f0..8716759d3 100644 --- a/experiments/generic/pod-http-status-code/rbac.yaml +++ b/experiments/generic/pod-http-status-code/rbac.yaml @@ -28,10 +28,10 @@ rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get","list",] - # Track and get the runner, experiment, and helper pods log + # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] - verbs: ["get","list","watch"] + verbs: ["get","list","watch"] # for creating and managing to execute comands inside target container - apiGroups: [""] resources: ["pods/exec"] @@ -40,7 +40,7 @@ rules: - apiGroups: ["apps"] resources: ["deployments","statefulsets","replicasets", "daemonsets"] verbs: ["list","get"] - # deriving the parent/owner details of the pod(if parent is deploymentConfig) + # deriving the parent/owner details of the pod(if parent is deploymentConfig) - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"]