|
| 1 | +--- |
| 2 | +title: Enable multi-zone storage redundancy in Azure Container Storage Preview to improve stateful application availability |
| 3 | +description: Enable storage redundancy across multiple availability zones in Azure Container Storage Preview to improve stateful application availability. Use multi-zone storage pools and zone-redundant storage (ZRS) disks. |
| 4 | +author: khdownie |
| 5 | +ms.service: azure-container-storage |
| 6 | +ms.topic: how-to |
| 7 | +ms.date: 11/03/2023 |
| 8 | +ms.author: kendownie |
| 9 | +--- |
| 10 | + |
| 11 | +# Enable multi-zone storage redundancy in Azure Container Storage Preview |
| 12 | + |
| 13 | +You can improve stateful application availability by using multi-zone storage pools and zone-redundant storage (ZRS) disks when using [Azure Container Storage](container-storage-introduction.md) in a multi-zone Azure Kubernetes Service (AKS) cluster. To create an AKS cluster that uses availability zones, see [Use availability zones in Azure Kubernetes Service](../../aks/availability-zones.md). |
| 14 | + |
| 15 | +## Prerequisites |
| 16 | + |
| 17 | +- This article requires version 2.0.64 or later of the Azure CLI. See [How to install the Azure CLI](/cli/azure/install-azure-cli). If you're using Azure Cloud Shell, the latest version is already installed. If you plan to run the commands locally instead of in Azure Cloud Shell, be sure to run them with administrative privileges. |
| 18 | +- You'll need an AKS cluster with a node pool of at least three virtual machines (VMs) for the cluster nodes, each with a minimum of four virtual CPUs (vCPUs). |
| 19 | +- This article assumes you've already [installed Azure Container Storage](container-storage-aks-quickstart.md) on your AKS cluster. |
| 20 | +- You'll need the Kubernetes command-line client, `kubectl`. It's already installed if you're using Azure Cloud Shell, or you can install it locally by running the `az aks install-cli` command. |
| 21 | + |
| 22 | +## Create a multi-zone storage pool |
| 23 | + |
| 24 | +In your storage pool definition, you can specify the zones where you want your storage capacity to be distributed across. The total storage pool capacity will be distributed evenly across the number of zones specified. For example, if two zones are specified, each zone gets half of the storage pool capacity; if three zones are specified, each zone gets one-third of the total capacity. Corresponding storage will be provisioned in each of the zones. This is useful when running workloads that offer application-level replication such as Cassandra. |
| 25 | + |
| 26 | +If there are no nodes available in a specified zone, the capacity will be provisioned once a node is available in that zone. Persistent volumes (PVs) can only be created from storage pool capacity from one zone. |
| 27 | + |
| 28 | +Valid values for `zones` are: |
| 29 | + |
| 30 | +- [""] |
| 31 | +- ["1"] |
| 32 | +- ["2"] |
| 33 | +- ["3"] |
| 34 | +- ["1", "2"] |
| 35 | +- ["1", "3"] |
| 36 | +- ["2", "3"] |
| 37 | +- ["1", "2", "3"] |
| 38 | + |
| 39 | +Follow these steps to create a multi-zone storage pool that uses Azure Disks. For `zones`, choose a valid value. |
| 40 | + |
| 41 | +1. Use your favorite text editor to create a YAML manifest file such as `code acstor-multizone-storagepool.yaml`. |
| 42 | + |
| 43 | +1. Paste in the following code and save the file. The storage pool **name** value can be whatever you want. For **storage**, specify the amount of storage capacity for the pool in Gi or Ti. |
| 44 | + |
| 45 | + ```yml |
| 46 | + apiVersion: containerstorage.azure.com/v1beta1 |
| 47 | + kind: StoragePool |
| 48 | + metadata: |
| 49 | + name: azuredisk |
| 50 | + namespace: acstor |
| 51 | + spec: |
| 52 | + zones: ["1", "2", "3"] |
| 53 | + poolType: |
| 54 | + azureDisk: {} |
| 55 | + resources: |
| 56 | + requests: |
| 57 | + storage: 1Ti |
| 58 | + ``` |
| 59 | +
|
| 60 | +1. Apply the YAML manifest file to create the multi-zone storage pool. |
| 61 | + |
| 62 | + ```azurecli-interactive |
| 63 | + kubectl apply -f acstor-multizone-storagepool.yaml |
| 64 | + ``` |
| 65 | + |
| 66 | +## Use zone-redundant storage (ZRS) disks |
| 67 | + |
| 68 | +If your workload requires storage redundancy, you can leverage disks that use [zone-redundant storage](../../virtual-machines/disks-deploy-zrs.md), which copies your data synchronously across three Azure availability zones in the primary region. |
| 69 | + |
| 70 | +You can specify the disk `skuName` as either `StandardSSD_ZRS` or `Premium_ZRS` in your storage pool definition, as in the following example. |
| 71 | + |
| 72 | + ```yml |
| 73 | + apiVersion: containerstorage.azure.com/v1beta1 |
| 74 | + kind: StoragePool |
| 75 | + metadata: |
| 76 | + name: azuredisk |
| 77 | + namespace: acstor |
| 78 | + spec: |
| 79 | + poolType: |
| 80 | + azureDisk: |
| 81 | + skuName: Premium_ZRS |
| 82 | + resources: |
| 83 | + requests: |
| 84 | + storage: 1Ti |
| 85 | + ``` |
| 86 | +
|
| 87 | +## See also |
| 88 | +
|
| 89 | +- [What is Azure Container Storage?](container-storage-introduction.md) |
0 commit comments