Azure Kubernetes Service'te (AKS) ağaç içi depolama sınıfından CSI sürücülerine geçiş
Kapsayıcı Depolama Arabirimi (CSI) sürücüsünün uygulanması, 1.21 sürümünden itibaren Azure Kubernetes Service'te (AKS) kullanıma sunulmuştur. CSI'yi standart olarak benimseyerek ve kullandığınızda, ağaç içi Kalıcı Birimleri (PV) kullanan mevcut durum bilgisi olan iş yükleriniz CSI sürücüsünü kullanacak şekilde geçirilmelidir veya yükseltilmelidir.
Bu işlemi olabildiğince basit hale getirmek ve veri kaybı olmamasını sağlamak için bu makalede farklı geçiş seçenekleri sağlanır. Bu seçenekler arasında ağaç içinden Azure Disklere ve Azure Dosyalar CSI sürücülerine sorunsuz bir geçiş sağlamaya yardımcı olan betikler bulunur.
Başlamadan önce
- Azure CLI sürüm 2.37.0 veya üzeri. Sürümü bulmak için komutunu
az --version
çalıştırın ve sürümü yükseltmek için komutunu çalıştırınaz upgrade
. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme. - Kubectl ve küme yöneticileri pvc veya PV, birim anlık görüntüsü veya birim anlık görüntüsü içeriği oluşturma, alma, listeleme, silme erişimine sahiptir. Microsoft Entra RBAC özellikli bir kümede, Azure Kubernetes Service RBAC Kümesi Yöneticisi rolünün bir üyesisiniz.
Disk birimlerini geçirme
Not
ve etiketleri failure-domain.beta.kubernetes.io/zone
failure-domain.beta.kubernetes.io/region
AKS 1.24'te kullanım dışı bırakıldı ve 1.28'de kaldırıldı. Mevcut kalıcı birimleriniz hala bu iki etiketle eşleşen nodeAffinity kullanıyorsa, bunları yeni kalıcı birim ayarında ve topology.kubernetes.io/region
etiketleri olarak topology.kubernetes.io/zone
değiştirmeniz gerekir.
Ağaç içi geçişten CSI'ye geçiş iki geçiş seçeneği kullanılarak desteklenir:
- Statik birim oluşturma
- Dinamik birim oluşturma
Statik birim oluşturma
Bu seçeneği kullanarak, daha sonra oluşturacağınız yeni bir PVC'ye statik olarak atayarak claimRef
bir PV oluşturur ve PersistentVolumeClaim için öğesini volumeName
belirtirsiniz.
Bu yaklaşımın avantajları şunlardır:
- Basit bir işlemdir ve otomatikleştirilebilir.
- Ağaç içi depolama sınıfını kullanarak özgün yapılandırmayı temizlemeye gerek yoktur.
- Kubernetes PV/PVC’nin yalnızca mantıksal silme işlemini gerçekleştirdiğinizden ve gerçek fiziksel veriler silinmediğinden risk düşüktür.
- Disk, anlık görüntüler vb. gibi ek Azure nesneleri oluşturmak zorunda kalmama nedeniyle ek maliyet oluşmaz.
Değerlendirmede dikkat edilmesi gereken önemli noktalar şunlardır:
- Özgün dinamik stildeki birimlerden statik birimlere geçişi tüm seçenekler için pv nesnelerinin el ile yapılmasını ve yönetilmesi gerekir.
- YPVC nesnesine istinaden yeni uygulama yeniden dağıtılırken uygulamanın olası kapalı kalma süresi.
Geçiş
Aşağıdaki komutu çalıştırarak mevcut PV'yi
ReclaimPolicy
Delete'den Koru'ya güncelleştirin:kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
pvName değerini seçtiğiniz PersistentVolume adıyla değiştirin. Alternatif olarak, birden çok PC için reclaimPolicy'yi güncelleştirmek istiyorsanız, patchReclaimPVs.sh adlı bir dosya oluşturun ve aşağıdaki kodu kopyalayın.
#!/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
Betiği parametresiyle yürüterek
namespace
küme ad alanını./PatchReclaimPolicy.sh <namespace>
belirtin.Aşağıdaki komutu çalıştırarak ad alanında creationTimestamp'a göre sıralanmış tüm PVC'lerin listesini alın. Gerçek küme ad alanıyla birlikte bağımsız değişkenini kullanarak
--namespace
ad alanını ayarlayın.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
Bu adım, geçirilmesi gereken çok sayıda PC'niz varsa ve bir kerede birkaç tane geçirmek istiyorsanız yararlıdır. Bu komutu çalıştırmak, belirli bir zaman diliminde hangi PVC'lerin oluşturulduğunu belirlemenizi sağlar. CreatePV.sh betiğini çalıştırdığınızda, parametrelerin ikisi yalnızca bu süre boyunca PVC'leri geçirmenizi sağlayan başlangıç saati ve bitiş saatidir.
CreatePV.sh adlı bir dosya oluşturun ve aşağıdaki kodu kopyalayın. Betik aşağıdakileri yapar:
- depolama sınıfı
storageClassName
için ad alanları içindeki tüm PersistentVolumes için adlıexisting-pv-csi
yeni bir PersistentVolume oluşturur. - Yeni PVC adını olarak
existing-pvc-csi
yapılandırın. - Belirttiğiniz PV adıyla yeni bir PVC oluşturur.
#!/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
- depolama sınıfı
Ad alanında tüm PersistentVolumes için yeni bir PersistentVolume oluşturmak için betiği aşağıdaki parametrelerle CreatePV.sh yürütür:
namespace
- Küme ad alanısourceStorageClass
- Ağaç içi depolama sürücüsü tabanlı StorageClasstargetCSIStorageClass
- Sağlamayı disk.csi.azure.com veya file.csi.azure.com olarak ayarlanmış varsayılan depolama sınıflarından biri olabilecek CSI depolama sürücüsü tabanlı StorageClass. Ya da bu iki hazırlayıcıdan birine ayarlı olduğu sürece özel bir depolama sınıfı oluşturabilirsiniz.startTimeStamp
- PVC oluşturma zamanından önce yyyy-mm-ddthh:mm:ssz biçiminde bir başlangıç zamanı sağlayınendTimeStamp
- yyyy-mm-ddthh:mm:ssz biçiminde bir bitiş zamanı sağlayın.
./CreatePV.sh <namespace> <sourceIntreeStorageClass> <targetCSIStorageClass> <startTimestamp> <endTimestamp>
Uygulamanızı yeni PVC'yi kullanacak şekilde güncelleştirin.
Dinamik birim oluşturma
Bu seçeneği kullanarak, Kalıcı Birim Talebi'nden dinamik olarak Kalıcı Birim oluşturursunuz.
Bu yaklaşımın avantajları şunlardır:
Tüm yeni nesneler, anlık görüntülerle diğer kopyalar korurken oluşturulduğu için risk daha azdır.
PC’leri ayrı olarak oluşturmanıza ve PVC bildiriminde birim adı eklemenize gerek yoktur.
Değerlendirmede dikkat edilmesi gereken önemli noktalar şunlardır:
Bu yaklaşım daha az riskli olsa da depolama maliyetlerinizi artıracak birden çok nesne oluşturur.
Yeni birimlerin oluşturulması sırasında uygulamanız kullanılamaz.
Silme adımları dikkatle gerçekleştirilmelidir. Geçiş tamamlanana ve uygulamanız başarıyla doğrulanana kadar kaynak grubunuz için geçici kaynak kilitleri uygulanabilir.
Anlık görüntülerden yeni diskler oluşturulurken veri doğrulama işlemi gerçekleştirin.
Geçiş
Devam etmeden önce aşağıdakileri doğrulayın:
Diske yazılmadan önce verilerin belleğe yazıldığı belirli iş yükleri için uygulama durdurulmalı ve bellek içi verilerin diske boşaltılmasını sağlamalıdır.
VolumeSnapshot
sınıfı, aşağıdaki ÖRNEK YAML'de gösterildiği gibi mevcut olmalıdır:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: custom-disk-snapshot-sc driver: disk.csi.azure.com deletionPolicy: Delete parameters: incremental: "false"
Aşağıdaki komutu çalıştırarak belirtilen ad alanında creationTimestamp'a göre sıralanmış tüm PVC'lerin listesini alın. Gerçek küme ad alanıyla birlikte bağımsız değişkenini kullanarak
--namespace
ad alanını ayarlayın.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
Bu adım, geçirilmesi gereken çok sayıda PC'niz varsa ve bir kerede birkaç tane geçirmek istiyorsanız yararlıdır. Bu komutu çalıştırmak, belirli bir zaman diliminde hangi PVC'lerin oluşturulduğunu belirlemenizi sağlar. MigrateCSI.sh betiğini çalıştırdığınızda, parametrelerin ikisi yalnızca bu süre boyunca PVC'leri geçirmenizi sağlayan başlangıç zamanı ve bitiş saatidir.
MigrateToCSI.sh adlı bir dosya oluşturun ve aşağıdaki kodda kopyalayın. Betik aşağıdakileri yapar:
- Azure CLI kullanarak tam disk anlık görüntüsü oluşturur
- Oluşturur
VolumesnapshotContent
- Oluşturur
VolumeSnapshot
- Yeni bir PVC oluşturur
VolumeSnapshot
- Temizlenmesi gereken tüm eski kaynakların listesini içeren dosya adıyla
<namespace>-timestamp
yeni bir dosya oluşturur.
#!/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
Disk birimlerini geçirmek için betik MigrateToCSI.sh aşağıdaki parametrelerle yürütür:
namespace
- Küme ad alanısourceStorageClass
- Ağaç içi depolama sürücüsü tabanlı StorageClasstargetCSIStorageClass
- CSI depolama sürücüsü tabanlı StorageClassvolumeSnapshotClass
- Birim anlık görüntü sınıfının adı. Örneğin,custom-disk-snapshot-sc
.startTimeStamp
- yyyy-mm-ddthh:mm:ssz biçiminde bir başlangıç zamanı sağlayın.endTimeStamp
- yyyy-mm-ddthh:mm:ssz biçiminde bir bitiş zamanı sağlayın.
./MigrateToCSI.sh <namespace> <sourceStorageClass> <TargetCSIstorageClass> <VolumeSnapshotClass> <startTimestamp> <endTimestamp>
Uygulamanızı yeni PVC'yi kullanacak şekilde güncelleştirin.
Ağaç içi PVC/PV, VolumeSnapshot ve VolumeSnapshotContent gibi eski kaynakları el ile silin. Aksi takdirde ağaç içi PVC/PC ve anlık görüntü nesnelerinin korunması daha fazla maliyete neden olacaktır.
Dosya paylaşımı birimlerini geçirme
Ağaç içi birimden CSI'ye geçiş, statik birim oluşturularak desteklenir:
- Ağaç içi depolama sınıfını kullanarak özgün yapılandırmayı temizlemeye gerek yoktur.
- Kubernetes PV/PVC’nin yalnızca mantıksal silme işlemini gerçekleştirdiğinizden ve gerçek fiziksel veriler silinmediğinden risk düşüktür.
- Dosya paylaşımları gibi ek Azure nesneleri oluşturmak zorunda kalmama nedeniyle ek maliyet oluşmaz.
Geçiş
Aşağıdaki komutu çalıştırarak mevcut PV'yi
ReclaimPolicy
Delete'den Koru'ya güncelleştirin:kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
pvName değerini seçtiğiniz PersistentVolume adıyla değiştirin. Alternatif olarak, birden çok PC için reclaimPolicy'yi güncelleştirmek istiyorsanız, patchReclaimPVs.sh adlı bir dosya oluşturun ve aşağıdaki kodu kopyalayın.
#!/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
Betiği parametresiyle yürüterek
namespace
küme ad alanını./PatchReclaimPolicy.sh <namespace>
belirtin.Hazırlayıcı olarak ayarlanmış
file.csi.azure.com
yeni bir Depolama Sınıfı oluşturun veya CSI dosya hazırlayıcısı ile varsayılan StorageClasses'lerden birini kullanabilirsiniz.secretName
Aşağıdaki komutu çalıştırarak mevcut PersistentVolumes'den veshareName
değerini alın:kubectl describe pv pvName
Yeni StorageClass'ı ve
shareName
ağaç içi PV'den vesecretName
öğesini kullanarak yeni bir BD oluşturun. azurefile-mount-pv.yaml adlı bir dosya oluşturun ve aşağıdaki kodu kopyalayın. altındacsi
, ,volumeHandle
veshareName
güncelleştirinresourceGroup
. Bağlama seçenekleri için fileMode ve dirMode için varsayılan değer 0777'dir.ve için varsayılan değer 0777'dir.
fileMode
dirMode
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
Aşağıdaki kodu kullanarak PersistentVolumeClaim kullanan bir PersistentVolumeClaim ile azurefile-mount-pvc.yaml adlı bir dosya oluşturun.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
kubectl
PersistentVolume'u oluşturmak için komutunu kullanın.kubectl apply -f azurefile-mount-pv.yaml
kubectl
PersistentVolumeClaim oluşturmak için komutunu kullanın.kubectl apply -f azurefile-mount-pvc.yaml
Aşağıdaki komutu çalıştırarak PersistentVolumeClaim'inizin oluşturulduğunu ve PersistentVolume'a bağlı olduğunu doğrulayın.
kubectl get pvc azurefile
Çıkış aşağıdakine benzer:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
PersistentVolumeClaim'inize başvurmak için kapsayıcı belirtiminizi güncelleştirin ve podunuzu güncelleştirin. Örneğin, aşağıdaki kodu kopyalayın ve azure-files-pod.yaml adlı bir dosya oluşturun.
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
Pod belirtimi yerinde güncelleştirilemez. Pod'u silmek ve sonra yeniden oluşturmak için aşağıdaki
kubectl
komutları kullanın.kubectl delete pod mypod
kubectl apply -f azure-files-pod.yaml
Sonraki adımlar
- Depolamanın en iyi yöntemleri hakkında daha fazla bilgi için bkz . Azure Kubernetes Service'te depolama ve yedekleme için en iyi yöntemler.
- Aks için Azure Backup kullanarak yeni geçirilen CSI Sürücüsü tabanlı PV'lerinizi yedekleyerek koruyun.
Azure Kubernetes Service