Project: Litmus (Observability and Analysis / Chaos Engineering)
File: azure-disk-loss.md

It causes detachment of virtual disk from an Azure instance before re-attaching it back to the instance after the specified chaos duration. It helps to check the performance of the application/process running on the instance. <!-- TODO: Add image --> !!! tip "Scenario: Detach the virtual disk from instance" ??? 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>azure-disk-loss</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/azure/azure-disk-loss/fault.yaml">here</a> Ensure that you have sufficient Azure access to detach and attach a disk. We will use azure to connect with the instance using azure GO SDK in the experiment. For generating auth file run `az ad sp create-for-rbac --sdk-auth > azure.auth` Azure CLI command. Ensure to create a Kubernetes secret having the auth file created in the step in `CHAOS_NAMESPACE`. A sample secret file looks like: ```yaml apiVersion: v1 kind: Secret metadata: name: cloud-secret type: Opaque stringData: azure.auth: |- { "clientId": "XXXXXXXXX", "clientSecret": "XXXXXXXXX", "subscriptionId": "XXXXXXXXX", "tenantId": "XXXXXXXXX", "activeDirectoryEndpointUrl": "XXXXXXXXX", "resourceManagerEndpointUrl": "XXXXXXXXX", "activeDirectoryGraphResourceId": "XXXXXXXXX", "sqlManagementEndpointUrl": "XXXXXXXXX", "galleryEndpointUrl": "XXXXXXXXX", "managementEndpointUrl": "XXXXXXXXX" } ``` If you change the secret key name (from `azure.auth`) please also update the `AZUREAUTHLOCATION` ENV value on `experiment.yaml`with the same name. ??? info "View the default validations" Azure Disk should be connected to an instance. !!! 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: azure-disk-loss-sa namespace: default labels: name: azure-disk-loss-sa app.kubernetes.io/part-of: litmus apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: azure-disk-loss-sa namespace: default labels: name: azure-disk-loss-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"] ``` Use this sample RBAC manifest to create a chaosServiceAccount in the desired (app)

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> VIRTUALDISKNAMES </td> <td> Name of virtual disks to target.</td> <td> Provide comma separated names for multiple disks</td> </tr> <tr> <td> RESOURCE_GROUP </td> <td> The resource group of the target disk(s)</td> <td> </td> </tr> </table> <h2>Optional Fields</h2> <table> <tr> <th> Variables </th> <th> Description </th> <th> Notes </th> </tr> <tr> <td> SCALE_SET </td> <td> Whether disk is connected to Scale set instance</td> <td> Accepts "enable"/"disable". Default is "disable"</td> </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 poweroff.</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 comma separated list of disk names subjected to disk loss chaos. It can be tuned via `VIRTUALDISKNAMES` 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: azure-disk-loss-sa experiments: name: azure-disk-loss spec: components: env: name: VIRTUALDISKNAMES value: 'disk-01,disk-02' name: RESOURCE_GROUP value: '<resource group of VIRTUALDISKNAMES>' name: TOTALCHAOSDURATION value: '60' ``` It contains comma separated list of disk names attached to scale set instances subjected to disk loss chaos. It can be tuned via `VIRTUALDISKNAMES` and `SCALE_SET` 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: azure-disk-loss-sa experiments: name: azure-disk-loss spec: components: env: name: VIRTUALDISKNAMES value: 'disk-01,disk-02' name: RESOURCE_GROUP value: '<resource group of VIRTUALDISKNAMES>' name: SCALE_SET value: 'enable' name: TOTALCHAOSDURATION value: '60' ``` The multiple iterations of chaos can be tuned via setting `CHAOS_INTERVAL` ENV. Which defines the delay between each iteration of chaos. Use the following example to tune this: ```yaml apiVersion: litmuschaos.io/v1alpha1 kind: ChaosEngine metadata: name: engine-nginx spec: engineState: "active" annotationCheck: "false" chaosServiceAccount: azure-disk-loss-sa experiments: name: azure-disk-loss spec: components: env: name: CHAOS_INTERVAL value: '10' name: TOTALCHAOSDURATION value: '60' name: VIRTUALDISKNAMES value: 'disk-01,disk-02' name: RESOURCE_GROUP value: '<resource group of VIRTUALDISKNAMES>' ```