GCP VM Disk Loss By Label
Introduction¶
- It causes chaos to disrupt the state of GCP persistent disk volume filtered using a label by detaching it from its VM instance for a certain chaos duration.
Scenario: detach the gcp disk
Uses¶
View the uses of the experiment
coming soon
Prerequisites¶
Verify the prerequisites
- Ensure that Kubernetes Version > 1.17
- Ensure that the Chaos Operator is running by executing
kubectl get pods
in operator namespace (typically,litmus
).If not, install from here - Ensure that the
gcp-vm-disk-loss-by-label
experiment resource is available in the cluster by executingkubectl get chaosexperiments
in the desired namespace. If not, install from here - Ensure that your service account has an editor access or owner access for the GCP project.
- Ensure that the target disk volume is not a boot disk of any VM instance.
-
Ensure to create a Kubernetes secret having the GCP service account credentials in the default namespace. A sample secret file looks like:
apiVersion: v1 kind: Secret metadata: name: cloud-secret type: Opaque stringData: type: project_id: private_key_id: private_key: client_email: client_id: auth_uri: token_uri: auth_provider_x509_cert_url: client_x509_cert_url:
Default Validations¶
View the default validations
- All the disk volumes having the target label are attached to their respective instances
Minimal RBAC configuration example (optional)¶
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 RBAC, which is pre installed in the cluster as part of the agent setup.
View the Minimal RBAC permissions
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: gcp-vm-disk-loss-by-label-sa
namespace: default
labels:
name: gcp-vm-disk-loss-by-label-sa
app.kubernetes.io/part-of: litmus
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: gcp-vm-disk-loss-by-label-sa
labels:
name: gcp-vm-disk-loss-by-label-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"]
# 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 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: ClusterRoleBinding
metadata:
name: gcp-vm-disk-loss-by-label-sa
labels:
name: gcp-vm-disk-loss-by-label-sa
app.kubernetes.io/part-of: litmus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: gcp-vm-disk-loss-by-label-sa
subjects:
- kind: ServiceAccount
name: gcp-vm-disk-loss-by-label-sa
namespace: default
Experiment tunables¶
check the experiment tunables
Mandatory Fields
Variables | Description | Notes |
---|---|---|
GCP_PROJECT_ID | The ID of the GCP Project of which the disk volumes are a part of | All the target disk volumes should belong to a single GCP Project |
DISK_VOLUME_LABEL | Label of the targeted non-boot persistent disk volume | The DISK_VOLUME_LABEL should be provided as key:value or key if the corresponding value is empty ex: disk:target-disk |
ZONES | The zone of target disk volumes | Only one zone can be provided i.e. all target disks should lie in the same zone |
Optional Fields
Variables | Description | Notes |
---|---|---|
TOTAL_CHAOS_DURATION | The total time duration for chaos insertion (sec) | Defaults to 30s |
CHAOS_INTERVAL | The interval (in sec) between the successive chaos iterations (sec) | Defaults to 30s |
DISK_AFFECTED_PERC | The percentage of total disks filtered using the label to target | Defaults to 0 (corresponds to 1 disk), provide numeric value only |
SEQUENCE | It defines sequence of chaos execution for multiple disks | Default value: parallel. Supported: serial, parallel |
RAMP_TIME | Period to wait before and after injection of chaos in sec |
Experiment Examples¶
Common Experiment Tunables¶
Refer the common attributes to tune the common tunables for all the experiments.
Detach Volumes By Label¶
It contains the label of disk volumes to be subjected to disk loss chaos. It will detach all the disks with the label DISK_VOLUME_LABEL
in zone ZONES
within the GCP_PROJECT_ID
project. It re-attaches the disk volume after waiting for the specified TOTAL_CHAOS_DURATION
duration.
NOTE:
The DISK_VOLUME_LABEL
accepts only one label and ZONES
also accepts only one zone name. Therefore, all the disks must lie in the same zone.
Use the following example to tune this:
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: engine-nginx
spec:
engineState: "active"
annotationCheck: "false"
chaosServiceAccount: gcp-vm-disk-loss-by-label-sa
experiments:
- name: gcp-vm-disk-loss-by-label
spec:
components:
env:
- name: DISK_VOLUME_LABEL
value: 'disk:target-disk'
- name: ZONES
value: 'us-east1-b'
- name: GCP_PROJECT_ID
value: 'my-project-4513'
- name: TOTAL_CHAOS_DURATION
value: '60'
Mutiple 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.
Use the following example to tune this:
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: engine-nginx
spec:
engineState: "active"
annotationCheck: "false"
chaosServiceAccount: gcp-vm-disk-loss-by-label-sa
experiments:
- name: gcp-vm-disk-loss-by-label
spec:
components:
env:
- name: CHAOS_INTERVAL
value: '15'
- name: TOTAL_CHAOS_DURATION
value: '60'
- name: DISK_VOLUME_LABEL
value: 'disk:target-disk'
- name: ZONES
value: 'us-east1-b'
- name: GCP_PROJECT_ID
value: 'my-project-4513'