In today’s world where data is the key and data redundancy is the primary key factor while deciding an architecture or solution. Snapshots are definitely one of the easiest and most reliable solution for point in time data backup. Microsoft launched a ManagedClusterSnapshotPreview
feature that can help users snapshot their cluster configuration.
Cluster snapshots allow you to save configuration from an Azure Kubernetes Service (AKS) cluster, which can then be used to easily apply the configuration to other clusters. Currently, it snapshots the following properties:
- ManagedClusterSKU
- EnableRbac
- KubernetesVersion
- LoadBalancerSKU
- NetworkMode
- NetworkPolicy
- NetworkPlugin
Important: AKS preview features are available on a self-service, opt-in basis. Previews are provided "as is" and "as available," and they're excluded from the service-level agreements and limited warranty. AKS previews are partially covered by customer support on a best-effort basis. As such, these features aren't meant for production use.
Prerequisite
- An Azure subscription. If you don’t have an Azure subscription, you can create a free account.
- The latest version of the Azure CLI installed.
- Your cluster must be running successfully.
- Your cluster must have been created with the
AddonManagerV2Preview
andCSIControllersV2Preview
custom header feature values:Azure CLICopyaz aks create -g $RESOURCE_GROUP -n $CLUSTER_NAME --aks-custom-headers AKSHTTPCustomFeatures=AddonManagerV2Preview,AKSHTTPCustomFeatures=CSIControllersV2Preview
Install the aks-preview
Azure CLI extension
Install the latest version of the aks-preview
Azure CLI extension using the following command:
az extension add --upgrade --name aks-preview
Register the ManagedClusterSnapshotPreview
feature flag
To use this, you must enable the ManagedClusterSnapshotPreview
feature flag on your subscription.
az feature register --name ManagedClusterSnapshotPreview --namespace Microsoft.ContainerService
You can check on the registration status by using the az feature list
command:
az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/ManagedClusterSnapshotPreview')].{Name:name,State:properties.state}"
When ready, refresh the registration of the Microsoft.ContainerService resource provider by using the az provider register
command:
az provider register --namespace Microsoft.ContainerService
Take a snapshot of your cluster
To begin, get the id
of the cluster you want to take a snapshot of using az aks show
:
az aks show -g $RESOURCE_GROUP -n $CLUSTER_NAME
Using the id
you just obtained, create a snapshot using az aks snapshot create
:
az aks snapshot create -g $RESOURCE_GROUp -n snapshot1 --cluster-id $CLUSTER_ID
Your output will look similar to the following example:
{
"creationData": {
"sourceResourceId": $CLUSTER_ID
},
"id": "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedclustersnapshots/snapshot1",
"location": "eastus2",
"managedClusterPropertiesReadOnly": {
"enableRbac": true,
"kubernetesVersion": "1.22.6",
"networkProfile": {
"loadBalancerSku": "Standard",
"networkMode": null,
"networkPlugin": "kubenet",
"networkPolicy": null
},
"sku": {
"name": "Basic",
"tier": "Paid"
}
},
"name": "snapshot1",
"resourceGroup": $RESOURCE_GROUP,
"snapshotType": "ManagedCluster",
"systemData": {
"createdAt": "2022-04-21T00:47:49.041399+00:00",
"createdBy": "user@contoso.com",
"createdByType": "User",
"lastModifiedAt": "2022-04-21T00:47:49.041399+00:00",
"lastModifiedBy": "user@contoso.com",
"lastModifiedByType": "User"
},
"tags": null,
"type": "Microsoft.ContainerService/ManagedClusterSnapshots"
}
View a snapshot
To list all available snapshots, use the az aks snapshot list
command:
az aks snapshot list -g $RESOURCE_GROUP
To view details for an individual snapshot, reference it by name in the az aks snapshot show command
. For example, to view the snapshot snapshot1
created in the steps above:
az aks snapshot show -g $RESOURCE_GROUp -n snapshot1 -o table
Your output will look similar to the following example:
Name Location ResourceGroup Sku EnableRbac KubernetesVersion NetworkPlugin LoadBalancerSku
--------- ---------- --------------- ----- ------------ ------------------- --------------- -----------------
snapshot1 eastus2 qizhe-rg Paid True 1.22.6 kubenet Standard
Delete a snapshot
Removing a snapshot can be done by referencing the snapshot’s name in the az aks snapshot delete
command. For example, to delete the snapshot snapshot1
created in the above steps:
az aks snapshot delete -g $RESOURCE_GROUP -n snapshot1
Create a cluster from a snapshot
New AKS clusters can be created based on the configuration captured in a snapshot. To do so, first obtain the id
of the desired snapshot. Next, use az aks create
, using the snapshot’s id
with the --cluster-snapshot-id
flag. Be sure to include the addonManagerV2
and CSIControllersV2Preview
feature flag custom header values. For example:
az aks create -g $RESOURCE_GROUP -n aks-from-snapshot --cluster-snapshot-id "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedclustersnapshots/snapshot1" --aks-custom-headers AKSHTTPCustomFeatures=AddonManagerV2Preview,AKSHTTPCustomFeatures=CSIControllersV2Preview
Note: The cluster can be created with other allowed parameters that are not captured in the snapshot, such asvm-sku-size
or--node-count
. However, no configuration arguments for parameters that are part of the snapshot should be included. If the values passed in these arguments differs from the snapshot's values, cluster creation will fail.
Update or upgrade a cluster using a snapshot
Clusters can also be updated and upgraded while using a snapshot by using the snapshot’s id
with the --cluster-snapshot-id
flag:
az aks update -g $RESOURCE_GROUP -n aks-from-snapshot --cluster-snapshot-id "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedclustersnapshots/snapshot1" --aks-custom-headers AKSHTTPCustomFeatures=AddonManagerV2Preview,AKSHTTPCustomFeatures=CSIControllersV2Preview
az aks upgrade -g $RESOURCE_GROUP -n aks-from-snapshot --cluster-snapshot-id "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedclustersnapshots/snapshot1" --aks-custom-headers AKSHTTPCustomFeatures=AddonManagerV2Preview,AKSHTTPCustomFeatures=CSIControllersV2Preview