## Introduction - It can target random pods with a Spring Boot application and allows configuring the assaults to inject app-kill. When the configured methods are called in the application, it will shut down the application. !!! tip "Scenario: Kill Spring Boot Application" ![Spring Boot App Kill](../../images/spring-boot-chaos.png) ## Uses ??? info "View the uses of the experiment" coming soon ## Prerequisites ??? info "Verify the prerequisites" ## Default Validations ??? info "View the default validations" - Spring boot pods are healthy before and after chaos injection ## Minimal RBAC configuration example (optional) !!! tip "NOTE" If you are using this experiment as part of a litmus workflow scheduled constructed & executed from chaos-center, then you may be making use of the [litmus-admin](https://litmuschaos.github.io/litmus/litmus-admin-rbac.yaml) RBAC, which is pre-installed in the cluster as part of the agent setup. ??? note "View the Minimal RBAC permissions" ```yaml apiVersion: v1 kind: ServiceAccount metadata: name: spring-boot-app-kill-sa namespace: default labels: name: spring-boot-app-kill-sa app.kubernetes.io/part-of: litmus --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: spring-boot-app-kill-sa namespace: default labels: name: spring-boot-app-kill-sa app.kubernetes.io/part-of: litmus rules: # 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"] # Track and get the runner, experiment, and helper pods log - apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] # for creating and managing to execute commands 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"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: spring-boot-app-kill-sa namespace: default labels: name: spring-boot-app-kill-sa app.kubernetes.io/part-of: litmus roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: spring-boot-app-kill-sa subjects: - kind: ServiceAccount name: spring-boot-app-kill-sa namespace: default ``` Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app) namespace. This example consists of the minimum necessary role permissions to execute the experiment. ## Experiment tunables ??? info "check the experiment tunables"

Mandatory Fields

Variables Description Notes
CM_PORT It contains port of the spring boot application

Optional Fields

Variables Description Notes
CM_LEVEL It contains the number of requests to be attacked, n value means the nth request will be affected Default value is 1, it lies in [1,10000] range
CM_WATCHED_CUSTOM_SERVICES It limits watched packages/classes/methods by providing a comma-seperated list of fully qualified packages(class and/or method names) Default is an empty list, which means it will target all services
CM_WATCHERS It contains comma separated list of watchers from the following watchers list [controller, restController, service, repository, component, webClient] Default it is restController
SEQUENCE It defines sequence of chaos execution for multiple target pods Default value: parallel. Supported: serial, parallel
PODS_AFFECTED_PERC The Percentage of total pods to target Defaults to 0% (corresponds to 1 replica)
LIB The chaos lib used to inject the chaos Defaults to litmus. Supported litmus only
RAMP_TIME Period to wait before and after injection of chaos in sec
## Experiment Examples ### Common Experiment Tunables Refer the [common attributes](../common/common-tunables-for-all-experiments.md) and [Spring Boot specific tunable](spring-boot-experiments-tunables.md) to tune the common tunables for all experiments and spring-boot specific tunables. ### Spring Boot Application Port It tunes the spring-boot application port via `CM_PORT` ENV Use the following example to tune this: [embedmd]:# (./spring-boot-app-kill/target-port.yaml yaml) ```yaml # kill spring-boot target application apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: spring-boot-chaos namespace: default spec: appinfo: appns: 'default' applabel: 'app=spring-boot' appkind: 'deployment' # It can be active/stop engineState: 'active' chaosServiceAccount: spring-boot-app-kill-sa experiments: - name: spring-boot-app-kill spec: components: env: # port of the spring boot application - name: CM_PORT value: '8080' ```