Migrace z třídy úložiště ve stromové struktuře na ovladače CSI ve službě Azure Kubernetes Service (AKS)
Implementace ovladače Rozhraní úložiště kontejneru (CSI) byla zavedena ve službě Azure Kubernetes Service (AKS) od verze 1.21. Přijetím a použitím csI jako standardu by se vaše stávající stavové úlohy používající trvalé svazky ve stromu měly migrovat nebo upgradovat tak, aby používaly ovladač CSI.
Aby byl tento proces co nejjednodušší a aby se zajistilo, že nedojde ke ztrátě dat, najdete v tomto článku různé možnosti migrace. Mezi tyto možnosti patří skripty, které vám pomůžou zajistit bezproblémovou migraci ze stromu na disky Azure a ovladače CSI služby Azure Files.
Než začnete
- Azure CLI verze 2.37.0 nebo novější. Spuštěním příkazu vyhledejte
az --version
verzi a spusťteaz upgrade
upgrade verze. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI. - Správci kubectl a clusteru mají přístup k vytvoření, získání, výpisu, odstranění přístupu k PVC nebo PV, snímku svazku nebo k obsahu snímku svazku. V případě clusteru s povoleným Microsoft Entra RBAC jste členem role správce clusteru RBAC služby Azure Kubernetes Service.
Migrace svazků disků
Poznámka:
Popisky failure-domain.beta.kubernetes.io/zone
a failure-domain.beta.kubernetes.io/region
jsou zastaralé v AKS 1.24 a odebrány ve verzi 1.28. Pokud vaše stávající trvalé svazky stále používají nodeAffinity odpovídající těmto dvěma popiskům, musíte je změnit na topology.kubernetes.io/zone
a topology.kubernetes.io/region
popisky v novém nastavení trvalého svazku.
Migrace ze stromové struktury na csI se podporuje pomocí dvou možností migrace:
- Vytvoření statického svazku
- Vytvoření dynamického svazku
Vytvoření statického svazku
Pomocí této možnosti vytvoříte PV staticky přiřazením claimRef
k novému PVC, který později vytvoříte, a určíte volumeName
pro PersistentVolumeClaim.
Výhody tohoto přístupu jsou:
- Tento proces je jednoduchý a dá se automatizovat.
- Není potřeba mazat původní konfiguraci využívající třídu úložiště ve stromové struktuře.
- Tento proces je méně riskantní, protože se provádí pouze logické odstranění trvalého svazku nebo deklarace identity trvalého svazku Kubernetes a skutečná fyzická data se neodstraní.
- V důsledku toho, že nebudete muset vytvářet další objekty Azure, jako jsou disky, snímky atd., se neúčtují žádné další náklady.
Při vyhodnocování je potřeba vzít v úvahu následující důležité aspekty:
- Všechny varianty přechodu na statické svazky z původních dynamických svazků vyžadují ruční vytvoření a správu objektů trvalých svazků.
- Při opětovném nasazování nové aplikace s odkazem na nový objekt deklarace identity trvalého svazku může dojít k výpadku aplikace.
Migrace
Spuštěním následujícího příkazu aktualizujte existující pv
ReclaimPolicy
z delete na Zachovat :kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
Nahraďte pvName názvem vybraného PersistentVolume. Případně pokud chcete aktualizovat adresu reclaimPolicy pro více virtuálních počítačů, vytvořte soubor s názvem patchReclaimPVs.sh a zkopírujte ho do následujícího kódu.
#!/bin/bash # Patch the Persistent Volume in case ReclaimPolicy is Delete NAMESPACE=$1 i=1 for PVC in $(kubectl get pvc -n $NAMESPACE | awk '{ print $1}'); do # Ignore first record as it contains header if [ $i -eq 1 ]; then i=$((i + 1)) else PV="$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.spec.volumeName}')" RECLAIMPOLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" echo "Reclaim Policy for Persistent Volume $PV is $RECLAIMPOLICY" if [[ $RECLAIMPOLICY == "Delete" ]]; then echo "Updating ReclaimPolicy for $pv to Retain" kubectl patch pv $PV -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' fi fi done
Spusťte skript s parametrem
namespace
pro určení oboru názvů./PatchReclaimPolicy.sh <namespace>
clusteru .Spuštěním následujícího příkazu získejte seznam všech pvcs v oboru názvů seřazený podle creationTimestamp . Nastavte obor názvů pomocí argumentu
--namespace
spolu se skutečným oborem názvů clusteru.kubectl get pvc -n <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage
Tento krok je užitečný, pokud máte velký počet počítačů, které je potřeba migrovat, a chcete migrovat několik najednou. Spuštěním tohoto příkazu můžete zjistit, které pvcs byly vytvořeny v daném časovém rámci. Při spuštění skriptu CreatePV.sh jsou dva parametry počátečním a koncovým časem, které umožňují migrovat pouze řadiče pro čtení v daném časovém období.
Vytvořte soubor s názvem CreatePV.sh a zkopírujte následující kód. Skript provede následující akce:
- Vytvoří nový PersistentVolume s názvem
existing-pv-csi
pro všechny PersistentVolumes v oborech názvů pro třídustorageClassName
úložiště . - Nakonfigurujte nový název PVC jako
existing-pvc-csi
. - Vytvoří nový PVC s zadaným názvem PV.
#!/bin/bash #kubectl get pvc -n <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage # TimeFormat 2022-04-20T13:19:56Z NAMESPACE=$1 FILENAME=$(date +%Y%m%d%H%M)-$NAMESPACE EXISTING_STORAGE_CLASS=$2 STORAGE_CLASS_NEW=$3 STARTTIMESTAMP=$4 ENDTIMESTAMP=$5 i=1 for PVC in $(kubectl get pvc -n $NAMESPACE | awk '{ print $1}'); do # Ignore first record as it contains header if [ $i -eq 1 ]; then i=$((i + 1)) else PVC_CREATION_TIME=$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.metadata.creationTimestamp}') if [[ $PVC_CREATION_TIME >= $STARTTIMESTAMP ]]; then if [[ $ENDTIMESTAMP > $PVC_CREATION_TIME ]]; then PV="$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.spec.volumeName}')" RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" STORAGECLASS="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.storageClassName}')" echo $PVC RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" if [[ $RECLAIM_POLICY == "Retain" ]]; then if [[ $STORAGECLASS == $EXISTING_STORAGE_CLASS ]]; then STORAGE_SIZE="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.capacity.storage}')" SKU_NAME="$(kubectl get storageClass $STORAGE_CLASS_NEW -o jsonpath='{.parameters.skuname}')" DISK_URI="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.azureDisk.diskURI}')" PERSISTENT_VOLUME_RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" cat >$PVC-csi.yaml <<EOF apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: disk.csi.azure.com name: $PV-csi spec: accessModes: - ReadWriteOnce capacity: storage: $STORAGE_SIZE claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: $PVC-csi namespace: $NAMESPACE csi: driver: disk.csi.azure.com volumeAttributes: csi.storage.k8s.io/pv/name: $PV-csi csi.storage.k8s.io/pvc/name: $PVC-csi csi.storage.k8s.io/pvc/namespace: $NAMESPACE requestedsizegib: "$STORAGE_SIZE" skuname: $SKU_NAME volumeHandle: $DISK_URI persistentVolumeReclaimPolicy: $PERSISTENT_VOLUME_RECLAIM_POLICY storageClassName: $STORAGE_CLASS_NEW --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: $PVC-csi namespace: $NAMESPACE spec: accessModes: - ReadWriteOnce storageClassName: $STORAGE_CLASS_NEW resources: requests: storage: $STORAGE_SIZE volumeName: $PV-csi EOF kubectl apply -f $PVC-csi.yaml LINE="PVC:$PVC,PV:$PV,StorageClassTarget:$STORAGE_CLASS_NEW" printf '%s\n' "$LINE" >>$FILENAME fi fi fi fi fi done
- Vytvoří nový PersistentVolume s názvem
Pokud chcete vytvořit nový PersistentVolume pro všechny PersistentVolumes v oboru názvů, spusťte skript CreatePV.sh s následujícími parametry:
namespace
– Obor názvů clusterusourceStorageClass
– Třída StorageClass založená na ovladači úložiště ve stromové struktuřetargetCSIStorageClass
– Třída StorageClass založená na ovladači csI, která může být jednou z výchozích tříd úložiště, které mají zřizovací rutinu nastavenou na disk.csi.azure.com nebo file.csi.azure.com. Nebo můžete vytvořit vlastní třídu úložiště, pokud je nastavená na jeden z těchto dvou zřizovacích objektů.startTimeStamp
- Zadejte počáteční čas před časem vytvoření PVC ve formátu rrrr-mm-ddthh:mm:sszendTimeStamp
- Zadejte koncový čas ve formátu rrrr-mm-ddthh:mm:ssz.
./CreatePV.sh <namespace> <sourceIntreeStorageClass> <targetCSIStorageClass> <startTimestamp> <endTimestamp>
Aktualizujte aplikaci tak, aby používala nový PVC.
Vytvoření dynamického svazku
Pomocí této možnosti dynamicky vytvoříte trvalý svazek z deklarace trvalého svazku.
Výhody tohoto přístupu jsou:
Tento proces je méně riskantní, protože všechny nové objekty se vytvoří při zachování dalších kopií díky snímkům.
Není nutné vytvářet trvalé svazky zvlášť a přidávat názvy svazků do manifestu deklarace identity trvalého svazku.
Při vyhodnocování je potřeba vzít v úvahu následující důležité aspekty:
Tento přístup je sice méně riskantní, ale vytvoří se několik objektů, které zvyšují náklady na úložiště.
Během vytváření nových svazků je aplikace nedostupná.
Při odstraňování byste měli postupovat opatrně. Dočasné zámky prostředků se dají použít pro vaši skupinu prostředků, dokud se migrace nedokončí a vaše aplikace se úspěšně ověří.
Při vytváření nových disků ze snímků proveďte ověření dat.
Migrace
Než budete pokračovat, ověřte následující:
Pro konkrétní úlohy, ve kterých se data před zápisem na disk zapisují do paměti, by se měla aplikace zastavit a umožnit vyprázdnění dat v paměti na disk.
VolumeSnapshot
třída by měla existovat, jak je znázorněno v následujícím příkladu YAML:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: custom-disk-snapshot-sc driver: disk.csi.azure.com deletionPolicy: Delete parameters: incremental: "false"
Spuštěním následujícího příkazu získejte seznam všech pvcs v zadaném oboru názvů seřazeném podle creationTimestamp . Nastavte obor názvů pomocí argumentu
--namespace
spolu se skutečným oborem názvů clusteru.kubectl get pvc --namespace <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage
Tento krok je užitečný, pokud máte velký počet počítačů, které je potřeba migrovat, a chcete migrovat několik najednou. Spuštěním tohoto příkazu můžete zjistit, které pvcs byly vytvořeny v daném časovém rámci. Při spuštění skriptu MigrateCSI.sh jsou dva parametry počátečním a koncovým časem, které umožňují migrovat pouze řadiče pro čtení v daném časovém období.
Vytvořte soubor s názvem MigrateToCSI.sh a zkopírujte následující kód. Skript provede následující akce:
- Vytvoří snímek celého disku pomocí Azure CLI.
- Vytváří
VolumesnapshotContent
- Vytváří
VolumeSnapshot
- Vytvoří nový PVC z
VolumeSnapshot
- Vytvoří nový soubor s názvem souboru
<namespace>-timestamp
, který obsahuje seznam všech starých prostředků, které je potřeba vyčistit.
#!/bin/bash #kubectl get pvc -n <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage # TimeFormat 2022-04-20T13:19:56Z NAMESPACE=$1 FILENAME=$NAMESPACE-$(date +%Y%m%d%H%M) EXISTING_STORAGE_CLASS=$2 STORAGE_CLASS_NEW=$3 VOLUME_STORAGE_CLASS=$4 START_TIME_STAMP=$5 END_TIME_STAMP=$6 i=1 for PVC in $(kubectl get pvc -n $NAMESPACE | awk '{ print $1}'); do # Ignore first record as it contains header if [ $i -eq 1 ]; then i=$((i + 1)) else PVC_CREATION_TIME=$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.metadata.creationTimestamp}') if [[ $PVC_CREATION_TIME > $START_TIME_STAMP ]]; then if [[ $END_TIME_STAMP > $PVC_CREATION_TIME ]]; then PV="$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.spec.volumeName}')" RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" STORAGE_CLASS="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.storageClassName}')" echo $PVC RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" if [[ $STORAGE_CLASS == $EXISTING_STORAGE_CLASS ]]; then STORAGE_SIZE="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.capacity.storage}')" SKU_NAME="$(kubectl get storageClass $STORAGE_CLASS_NEW -o jsonpath='{.parameters.skuname}')" DISK_URI="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.azureDisk.diskURI}')" TARGET_RESOURCE_GROUP="$(cut -d'/' -f5 <<<"$DISK_URI")" echo $DISK_URI SUBSCRIPTION_ID="$(echo $DISK_URI | grep -o 'subscriptions/[^/]*' | sed 's#subscriptions/##g')" echo $TARGET_RESOURCE_GROUP PERSISTENT_VOLUME_RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" az snapshot create --resource-group $TARGET_RESOURCE_GROUP --name $PVC-$FILENAME --source "$DISK_URI" --subscription ${SUBSCRIPTION_ID} SNAPSHOT_PATH=$(az snapshot list --resource-group $TARGET_RESOURCE_GROUP --query "[?name == '$PVC-$FILENAME'].id | [0]" --subscription ${SUBSCRIPTION_ID}) SNAPSHOT_HANDLE=$(echo "$SNAPSHOT_PATH" | tr -d '"') echo $SNAPSHOT_HANDLE sleep 10 # Create Restore File cat <<EOF >$PVC-csi.yml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: $PVC-$FILENAME spec: deletionPolicy: 'Delete' driver: 'disk.csi.azure.com' volumeSnapshotClassName: $VOLUME_STORAGE_CLASS source: snapshotHandle: $SNAPSHOT_HANDLE volumeSnapshotRef: apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot name: $PVC-$FILENAME namespace: $1 --- apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: $PVC-$FILENAME namespace: $1 spec: volumeSnapshotClassName: $VOLUME_STORAGE_CLASS source: volumeSnapshotContentName: $PVC-$FILENAME --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-$PVC namespace: $1 spec: accessModes: - ReadWriteOnce storageClassName: $STORAGE_CLASS_NEW resources: requests: storage: $STORAGE_SIZE dataSource: name: $PVC-$FILENAME kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io EOF kubectl create -f $PVC-csi.yml LINE="OLDPVC:$PVC,OLDPV:$PV,VolumeSnapshotContent:volumeSnapshotContent-$FILENAME,VolumeSnapshot:volumesnapshot$FILENAME,OLDdisk:$DISK_URI" printf '%s\n' "$LINE" >>$FILENAME fi fi fi fi done
Pokud chcete migrovat diskové svazky, spusťte skript MigrateToCSI.sh s následujícími parametry:
namespace
– Obor názvů clusterusourceStorageClass
– Třída StorageClass založená na ovladači úložiště ve stromové struktuřetargetCSIStorageClass
– Třída StorageClass založená na ovladači úložiště CSIvolumeSnapshotClass
– Název třídy snímku svazku. Napříkladcustom-disk-snapshot-sc
.startTimeStamp
- Zadejte počáteční čas ve formátu rrrr-mm-ddthh:mm:ssz.endTimeStamp
- Zadejte koncový čas ve formátu rrrr-mm-ddthh:mm:ssz.
./MigrateToCSI.sh <namespace> <sourceStorageClass> <TargetCSIstorageClass> <VolumeSnapshotClass> <startTimestamp> <endTimestamp>
Aktualizujte aplikaci tak, aby používala nový PVC.
Ručně odstraňte starší prostředky, včetně prostředků PVC/PV ve stromové struktuře, VolumeSnapshot a VolumeSnapshotContent. Jinak bude údržba trvalých svazků a deklarací identity trvalých svazků ve stromové struktuře a objektů snímků znamenat vyšší náklady.
Migrace svazků sdílených složek
Migrace ze stromové struktury na csI je podporovaná vytvořením statického svazku:
- Není potřeba mazat původní konfiguraci využívající třídu úložiště ve stromové struktuře.
- Tento proces je méně riskantní, protože se provádí pouze logické odstranění trvalého svazku nebo deklarace identity trvalého svazku Kubernetes a skutečná fyzická data se neodstraní.
- V důsledku toho, že nebudete muset vytvářet další objekty Azure, jako jsou sdílené složky atd., se neúčtují žádné další náklady.
Migrace
Spuštěním následujícího příkazu aktualizujte existující pv
ReclaimPolicy
z delete na Zachovat :kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
Nahraďte pvName názvem vybraného PersistentVolume. Případně pokud chcete aktualizovat adresu reclaimPolicy pro více virtuálních počítačů, vytvořte soubor s názvem patchReclaimPVs.sh a zkopírujte ho do následujícího kódu.
#!/bin/bash # Patch the Persistent Volume in case ReclaimPolicy is Delete namespace=$1 i=1 for pvc in $(kubectl get pvc -n $namespace | awk '{ print $1}'); do # Ignore first record as it contains header if [ $i -eq 1 ]; then i=$((i + 1)) else pv="$(kubectl get pvc $pvc -n $namespace -o jsonpath='{.spec.volumeName}')" reclaimPolicy="$(kubectl get pv $pv -n $namespace -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')" echo "Reclaim Policy for Persistent Volume $pv is $reclaimPolicy" if [[ $reclaimPolicy == "Delete" ]]; then echo "Updating ReclaimPolicy for $pv to Retain" kubectl patch pv $pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' fi fi done
Spusťte skript s parametrem
namespace
pro určení oboru názvů./PatchReclaimPolicy.sh <namespace>
clusteru .Vytvořte novou třídu úložiště s nastavením zřizovacího modulu
file.csi.azure.com
nebo můžete použít některou z výchozích tříd StorageClasss se zřizovacím nástrojem pro soubory CSI.Spuštěním následujícího příkazu získejte
secretName
ashareName
z existujícího PersistentVolumes :kubectl describe pv pvName
Vytvořte novou pv pomocí nové třídy StorageClass a z objektu
shareName
secretName
PV ve stromu. Vytvořte soubor s názvem azurefile-mount-pv.yaml a zkopírujte ho do následujícího kódu. V částicsi
, updateresourceGroup
,volumeHandle
ashareName
. Pro možnosti připojení je výchozí hodnota fileMode a dirMode 0777.Výchozí hodnota je
fileMode
dirMode
0777.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: file.csi.azure.com name: azurefile spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: azurefile-csi csi: driver: file.csi.azure.com readOnly: false volumeHandle: unique-volumeid # make sure volumeid is unique for every identical share in the cluster volumeAttributes: resourceGroup: EXISTING_RESOURCE_GROUP_NAME # optional, only set this when storage account is not in the same resource group as the cluster nodes shareName: aksshare nodeStageSecretRef: name: azure-secret namespace: default mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict - nosharesock - nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
Pomocí následujícího kódu vytvořte soubor azurefile-mount-pvc.yaml s trvalým názvem PersistentVolumeClaim, který používá PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
kubectl
Pomocí příkazu vytvořte PersistentVolume.kubectl apply -f azurefile-mount-pv.yaml
kubectl
Pomocí příkazu vytvořte PersistentVolumeClaim.kubectl apply -f azurefile-mount-pvc.yaml
Spuštěním následujícího příkazu ověřte, že je váš TrvalýVolumeClaim vytvořen a svázán s trvalým objektem.
kubectl get pvc azurefile
Výstup vypadá přibližně takto:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
Aktualizujte specifikaci kontejneru tak, aby odkazoval na persistentVolumeClaim a aktualizoval pod. Zkopírujte například následující kód a vytvořte soubor s názvem azure-files-pod.yaml.
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
Specifikace podu se nedá aktualizovat. K odstranění a opětovnému vytvoření podu použijte následující
kubectl
příkazy.kubectl delete pod mypod
kubectl apply -f azure-files-pod.yaml
Další kroky
- Další informace o osvědčených postupech úložiště najdete v tématu Osvědčené postupy pro ukládání a zálohování ve službě Azure Kubernetes Service.
- Chraňte nově migrované počítače založené na ovladačích CSI jejich zálohováním pomocí služby Azure Backup pro AKS.
Azure Kubernetes Service