## Introduction - It Causes container failure of specific/random replicas of an application resources. - It tests deployment sanity (replica availability & uninterrupted service) and recovery workflow of the application - Good for testing recovery of pods having side-car containers !!! tip "Scenario: Kill target container" ![Container-Kill](../../images/container-kill.png) ## Uses ??? info "View the uses of the experiment" coming soon ## Prerequisites ??? info "Verify the prerequisites" - Ensure that Kubernetes Version > 1.16 - Ensure that the Litmus Chaos Operator is running by executing kubectl get pods in operator namespace (typically, litmus).If not, install from here - Ensure that the container-kill experiment resource is available in the cluster by executing kubectl get chaosexperiments in the desired namespace. If not, install from here ## Default Validations ??? info "View the default validations" The application pods should be in running state 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" [embedmd]:# (https://raw.githubusercontent.com/litmuschaos/chaos-charts/master/charts/generic/container-kill/rbac.yaml yaml) ```yaml --- apiVersion: v1 kind: ServiceAccount metadata: name: container-kill-sa namespace: default labels: name: container-kill-sa app.kubernetes.io/part-of: litmus --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: container-kill-sa namespace: default labels: name: container-kill-sa app.kubernetes.io/part-of: litmus rules: - apiGroups: [""] resources: ["pods","events"] verbs: ["create","list","get","patch","update","delete","deletecollection"] - apiGroups: [""] resources: ["pods/exec","pods/log","replicationcontrollers"] verbs: ["list","get","create"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["create","list","get","delete","deletecollection"] - apiGroups: ["apps"] resources: ["deployments","statefulsets","daemonsets","replicasets"] verbs: ["list","get"] - apiGroups: ["apps.openshift.io"] resources: ["deploymentconfigs"] verbs: ["list","get"] - apiGroups: ["argoproj.io"] resources: ["rollouts"] verbs: ["list","get"] - apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: container-kill-sa namespace: default labels: name: container-kill-sa app.kubernetes.io/part-of: litmus roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: container-kill-sa subjects: - kind: ServiceAccount name: container-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"

Optional Fields

Variables Description Notes
TARGET_CONTAINER The name of container to be killed inside the pod If the TARGET_CONTAINER is not provided it will delete the first container
CHAOS_INTERVAL Time interval b/w two successive container kill (in sec) If the CHAOS_INTERVAL is not provided it will take the default value of 10s
TOTAL_CHAOS_DURATION The time duration for chaos injection (seconds) Defaults to 20s
PODS_AFFECTED_PERC The Percentage of total pods to target Defaults to 0 (corresponds to 1 replica), provide numeric value only
TARGET_PODS Comma separated list of application pod name subjected to container kill chaos If not provided, it will select target pods randomly based on provided appLabels
LIB_IMAGE LIB Image used to kill the container Defaults to litmuschaos/go-runner:latest
LIB The category of lib use to inject chaos Default value: litmus, supported values: pumba and litmus
RAMP_TIME Period to wait before injection of chaos in sec
SEQUENCE It defines sequence of chaos execution for multiple target pods Default value: parallel. Supported: serial, parallel
SIGNAL It contains termination signal used for container kill Default value: SIGKILL
SOCKET_PATH Path of the containerd/crio/docker socket file Defaults to `/var/run/docker.sock`
CONTAINER_RUNTIME container runtime interface for the cluster Defaults to docker, supported values: docker, containerd and crio for litmus and only docker for pumba LIB
## Experiment Examples ### Common and Pod specific tunables Refer the [common attributes](../common/common-tunables-for-all-experiments.md) and [Pod specific tunable](common-tunables-for-pod-experiments.md) to tune the common tunables for all experiments and pod specific tunables. ### Kill Specific Container It defines the name of the targeted container subjected to chaos. It can be tuned via `TARGET_CONTAINER` ENV. If `TARGET_CONTAINER` is provided as empty then it will use the first container of the targeted pod. [embedmd]:# (https://raw.githubusercontent.com/litmuschaos/litmus/master/mkdocs/docs/experiments/categories/pods/container-kill/kill-specific-container.yaml yaml) ```yaml # kill the specific target container apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" appinfo: appns: "default" applabel: "app=nginx" appkind: "deployment" chaosServiceAccount: container-kill-sa experiments: - name: container-kill spec: components: env: # name of the target container - name: TARGET_CONTAINER value: 'nginx' - name: TOTAL_CHAOS_DURATION VALUE: '60' ``` ### Multiple Iterations Of Chaos The multiple iterations of chaos can be tuned via setting `CHAOS_INTERVAL` ENV. Which defines the delay between each iteration of chaos. [embedmd]:# (https://raw.githubusercontent.com/litmuschaos/litmus/master/mkdocs/docs/experiments/categories/pods/container-kill/chaos-interval.yaml yaml) ```yaml # defines delay between each successive iteration of the chaos apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" appinfo: appns: "default" applabel: "app=nginx" appkind: "deployment" chaosServiceAccount: container-kill-sa experiments: - name: container-kill spec: components: env: # delay between each iteration of chaos - name: CHAOS_INTERVAL value: '15' # time duration for the chaos execution - name: TOTAL_CHAOS_DURATION VALUE: '60' ``` ### Container Runtime Socket Path It defines the `CONTAINER_RUNTIME` and `SOCKET_PATH` ENV to set the container runtime and socket file path: - `CONTAINER_RUNTIME`: It supports `docker`, `containerd`, and `crio` runtimes. The default value is `docker`. - `SOCKET_PATH`: It contains path of docker socket file by default(`/var/run/docker.sock`). For other runtimes provide the appropriate path. [embedmd]:# (https://raw.githubusercontent.com/litmuschaos/litmus/master/mkdocs/docs/experiments/categories/pods/container-kill/container-runtime-and-socket-path.yaml yaml) ```yaml ## provide the container runtime and socket file path apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" appinfo: appns: "default" applabel: "app=nginx" appkind: "deployment" chaosServiceAccount: container-kill-sa experiments: - name: container-kill spec: components: env: # runtime for the container # supports docker, containerd, crio - name: CONTAINER_RUNTIME value: 'docker' # path of the socket file - name: SOCKET_PATH value: '/var/run/docker.sock' - name: TOTAL_CHAOS_DURATION VALUE: '60' ``` ### Signal For Kill It defines the Linux signal passed while killing the container. It can be tuned via `SIGNAL` ENV. It defaults to the `SIGTERM`. [embedmd]:# (https://raw.githubusercontent.com/litmuschaos/litmus/master/mkdocs/docs/experiments/categories/pods/container-kill/signal.yaml yaml) ```yaml # specific linux signal passed while kiiling container apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" appinfo: appns: "default" applabel: "app=nginx" appkind: "deployment" chaosServiceAccount: container-kill-sa experiments: - name: container-kill spec: components: env: # signal passed while killing container # defaults to SIGTERM - name: SIGNAL value: 'SIGKILL' - name: TOTAL_CHAOS_DURATION VALUE: '60' ``` ### Pumba Chaos Library It specifies the Pumba chaos library for the chaos injection. It can be tuned via `LIB` ENV. The defaults chaos library is `litmus`. [embedmd]:# (https://raw.githubusercontent.com/litmuschaos/litmus/master/mkdocs/docs/experiments/categories/pods/container-kill/pumba.yaml yaml) ```yaml # pumba chaoslib used to kill the container apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" appinfo: appns: "default" applabel: "app=nginx" appkind: "deployment" chaosServiceAccount: container-kill-sa experiments: - name: container-kill spec: components: env: # name of the lib # supoorts pumba and litmus - name: LIB value: 'pumba' - name: TOTAL_CHAOS_DURATION VALUE: '60' ```