Project: Litmus (Observability and Analysis / Chaos Engineering)
File: vm-poweroff.md

It causes VMWare VMs to Stop/Power-off before bringing them back to Powered-on state after a specified chaos duration using the VMWare APIs to start/stop the target VM. It helps to check the performance of the application/process running on the VMWare VMs. !!! tip "Scenario: poweroff the vm" ??? info "View the uses of the experiment" coming soon ??? info "Verify the prerequisites" Ensure that Kubernetes Version > 1.16 Ensure that the Litmus Chaos Operator is running by executing <code>kubectl get pods</code> in operator namespace (typically, <code>litmus</code>).If not, install from <a href="https://v1-docs.litmuschaos.io/docs/getstarted/#install-litmus">here</a> Ensure that the <code>vm-poweroff</code> experiment resource is available in the cluster by executing <code>kubectl get chaosexperiments</code> in the desired namespace. If not, install from <a href="https://hub.litmuschaos.io/api/chaos/master?file=faults/vmware/vm-poweroff/fault.yaml">here</a> Ensure that you have sufficient Vcenter access to stop and start the VM. (Optional) Ensure to create a Kubernetes secret having the Vcenter credentials in the `CHAOS_NAMESPACE`. A sample secret file looks like: ```yaml apiVersion: v1 kind: Secret metadata: name: vcenter-secret namespace: litmus type: Opaque stringData: VCENTERSERVER: XXXXXXXXXXX VCENTERUSER: XXXXXXXXXXXXX VCENTERPASS: XXXXXXXXXXXXX ``` Note: You can pass the VM credentials as secrets or as an chaosengine ENV variable. ??? info "View the default validations" VM should be in healthy state. !!! 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 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: vm-poweroff-sa namespace: default labels: name: vm-poweroff-sa app.kubernetes.io/part-of: litmus apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: vm-poweroff-sa labels: name: vm-poweroff-sa app.kubernetes.io/part-of: litmus rules: apiGroups: [""] resources: ["pods"] verbs: ["create","delete","get","list","patch","update", "deletecollection"] apiGroups: [""] resources: ["events"] verbs: ["create","get","list","patch","update"] apiGroups: [""] resources: ["secrets","configmaps"] verbs: ["get","list",] apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] apiGroups: [""] resources: ["pods/exec"] verbs: ["get","list","create"] apiGroups: ["batch"] resources: ["jobs"] verbs: ["create","list","get","delete","deletecollection"] apiGroups: ["litmuschaos.io"] resources: ["chaosengines","chaosexperiments","chaosresults"] verbs: ["create","list","get","patch","update","delete"] apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: vm-poweroff-sa labels: name: vm-poweroff-sa app.kubernetes.io/part-of: litmus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: vm-poweroff-sa subjects: kind: ServiceAccount name: vm-poweroff-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. ??? info "check the experiment tunables" <h2>Mandatory Fields</h2> <table> <tr> <th> Variables </th> <th> Description </th> <th> Notes </th> </tr> <tr> <td> APPVMMOIDS </td> <td> MOIDs of the vmware instance</td> <td> Once you open VM in vCenter WebClient, you can find MOID in address field (VirtualMachine:vm-5365). Alternatively you can use the CLI to fetch the MOID. Eg: vm-5365 </td> </tr> </table> <h2>Optional Fields</h2> <table> <tr> <th> Variables </th> <th> Description </th> <th> Notes </th> </tr> <tr> <td> TOTALCHAOSDURATION </td> <td> The total time duration for chaos insertion (sec) </td> <td> Defaults to 30s </td> </tr> <tr> <td> CHAOS_INTERVAL </td> <td> The interval (in sec) between successive instance termination </td> <td> Defaults to 30s </td> </tr> <tr> <td> SEQUENCE </td> <td> It defines sequence of chaos execution for multiple instance </td> <td> Default value: parallel. Supported: serial, parallel </td> </tr> <tr> <td> RAMP_TIME </td> <td> Period to wait before and after injection of chaos in sec </td> <td> </td> </tr> </table> Refer the to tune the common tunables for all the experiments. It contains MOID of the vm instance. It can be tuned via `APPVMMOIDS` ENV. Use the following example to tune this: ```yaml apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" chaosServiceAccount: vm-poweroff-sa experiments: name: vm-poweroff spec: components: env: name: APPVMMOIDS value: 'vm-53,vm-65' name: TOTALCHAOSDURATION value: '60' ```