الترحيل من فئة التخزين داخل الشجرة إلى برامج تشغيل CSI على خدمة Azure Kubernetes (AKS)
تم تقديم تنفيذ برنامج تشغيل واجهة تخزين الحاويات (CSI) في خدمة Azure Kubernetes (AKS) بدءا من الإصدار 1.21. من خلال اعتماد واستخدام CSI كمعيار، يجب ترحيل أحمال العمل الحالية ذات الحالة باستخدام وحدات التخزين الثابتة (PVs) داخل الشجرة أو ترقيتها لاستخدام برنامج تشغيل CSI.
لجعل هذه العملية بسيطة قدر الإمكان، ولضمان عدم فقدان البيانات، توفر هذه المقالة خيارات ترحيل مختلفة. تتضمن هذه الخيارات برامج نصية للمساعدة في ضمان ترحيل سلس من داخل الشجرة إلى أقراص Azure وبرامج تشغيل Azure Files CSI.
قبل البدء
- إصدار Azure CLI، 2.37.0 أو أحدث. قم بتشغيل
az --version
للعثور على الإصدار، ثم قم بتشغيلaz upgrade
لترقية الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. - يمكن لمسؤولي Kubectl والكتلة الوصول إلى إنشاء أو الحصول على أو سرد أو حذف الوصول إلى PVC أو PV أو لقطة وحدة التخزين أو محتوى لقطة وحدة التخزين. بالنسبة إلى مجموعة Microsoft Entra RBAC الممكنة، أنت عضو في دور مسؤول نظام مجموعة Azure Kubernetes Service RBAC.
ترحيل وحدات تخزين القرص
إشعار
تم إهمال التسميات failure-domain.beta.kubernetes.io/zone
و failure-domain.beta.kubernetes.io/region
في AKS 1.24 وإزالتها في 1.28. إذا كانت وحدات التخزين الثابتة الحالية لا تزال تستخدم nodeAffinity المطابقة لهذين الوصفين، فستحتاج إلى تغييرها إلى topology.kubernetes.io/zone
و topology.kubernetes.io/region
التسميات في إعداد وحدة التخزين الثابتة الجديد.
يتم دعم الترحيل من داخل الشجرة إلى CSI باستخدام خيارين للترحيل:
- إنشاء وحدة تخزين ثابتة
- إنشاء وحدة تخزين ديناميكية
إنشاء وحدة تخزين ثابتة
باستخدام هذا الخيار، يمكنك إنشاء PV عن طريق تعيين claimRef
ثابت إلى PVC جديد ستقوم بإنشائه لاحقا، وتحديد volumeName
ل PersistentVolumeClaim.
مزايا هذا النهج هي:
- إنها بسيطة ويمكن أتمتتها.
- لا حاجة لتنظيف التكوين الأصلي باستخدام فئة التخزين داخل الشجرة.
- مخاطر منخفضة أثناء إجراء حذف منطقي فقط من Kubernetes PV/PVC، لا يتم حذف البيانات الفعلية.
- لم يتم تكبد أي تكلفة إضافية نتيجة لعدم الحاجة إلى إنشاء كائنات Azure إضافية، مثل القرص واللقطات وما إلى ذلك.
فيما يلي اعتبارات مهمة لتقييمها:
- يتطلب الانتقال إلى وحدات التخزين الثابتة من وحدات التخزين الأصلية ذات النمط الديناميكي إنشاء كائنات PV وإدارتها يدويا لجميع الخيارات.
- وقت تعطل التطبيق المحتمل عند إعادة نشر التطبيق الجديد مع الإشارة إلى كائن PVC الجديد.
الترحيل
قم بتحديث PV
ReclaimPolicy
الموجود من Delete إلى Retain عن طريق تشغيل الأمر التالي:kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
استبدل pvName باسم PersistentVolume المحدد. بدلا من ذلك، إذا كنت ترغب في تحديث reclaimPolicy ل PVs متعددة، قم بإنشاء ملف باسم patchReclaimPVs.sh ونسخه في التعليمات البرمجية التالية.
#!/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
قم بتنفيذ البرنامج النصي مع المعلمة
namespace
لتحديد مساحة./PatchReclaimPolicy.sh <namespace>
اسم نظام المجموعة .احصل على قائمة بجميع أجهزة الكمبيوتر الشخصية في مساحة الاسم التي تم فرزها حسب creationTimestamp عن طريق تشغيل الأمر التالي. قم بتعيين مساحة الاسم باستخدام الوسيطة
--namespace
مع مساحة اسم المجموعة الفعلية.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
هذه الخطوة مفيدة إذا كان لديك عدد كبير من PVs التي تحتاج إلى ترحيل، وتريد ترحيل عدد قليل في كل مرة. يمكنك تشغيل هذا الأمر من تحديد أجهزة الكمبيوتر الشخصية التي تم إنشاؤها في إطار زمني معين. عند تشغيل البرنامج النصي CreatePV.sh ، فإن اثنتين من المعلمات هما وقت البدء ووقت الانتهاء الذي يمكنك من ترحيل أجهزة الكمبيوتر الشخصية فقط خلال تلك الفترة الزمنية.
أنشئ ملفا باسم CreatePV.sh وانسخه في التعليمات البرمجية التالية. يقوم البرنامج النصي بالآتي:
- إنشاء PersistentVolume جديد باسم
existing-pv-csi
لكافة PersistentVolumes في مساحات الأسماء لفئةstorageClassName
التخزين . - تكوين اسم PVC جديد ك
existing-pvc-csi
. - إنشاء PVC جديد باسم 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
- إنشاء PersistentVolume جديد باسم
لإنشاء PersistentVolume جديد لكافة PersistentVolumes في مساحة الاسم، قم بتنفيذ البرنامج النصي CreatePV.sh مع المعلمات التالية:
namespace
- مساحة اسم نظام المجموعةsourceStorageClass
- StorageClass المستندة إلى برنامج تشغيل التخزين داخل الشجرةtargetCSIStorageClass
- StorageClass المستندة إلى برنامج تشغيل تخزين CSI، والتي يمكن أن تكون إحدى فئات التخزين الافتراضية التي تم تعيين التزويد عليها إلى disk.csi.azure.com أو file.csi.azure.com. أو يمكنك إنشاء فئة تخزين مخصصة طالما تم تعيينها إلى أي من هذين المزودين.startTimeStamp
- توفير وقت بدء قبل وقت إنشاء PVC بالتنسيق yyyy-mm-ddthh:mm:sszendTimeStamp
- توفير وقت الانتهاء بالتنسيق yyyy-mm-ddthh:mm:ssz.
./CreatePV.sh <namespace> <sourceIntreeStorageClass> <targetCSIStorageClass> <startTimestamp> <endTimestamp>
تحديث التطبيق الخاص بك لاستخدام PVC الجديد.
إنشاء وحدة تخزين ديناميكية
باستخدام هذا الخيار، يمكنك إنشاء وحدة تخزين ثابتة ديناميكيا من مطالبة وحدة تخزين ثابتة.
مزايا هذا النهج هي:
إنها أقل خطورة لأنه يتم إنشاء جميع الكائنات الجديدة مع الاحتفاظ بنسخ أخرى مع اللقطات.
لا حاجة لإنشاء PVs بشكل منفصل وإضافة اسم وحدة التخزين في بيان PVC.
فيما يلي اعتبارات مهمة لتقييمها:
في حين أن هذا الأسلوب أقل خطورة، فإنه ينشئ كائنات متعددة من شأنها أن تزيد من تكاليف التخزين الخاصة بك.
أثناء إنشاء وحدة (وحدات) التخزين الجديدة، لا يتوفر التطبيق الخاص بك.
يجب تنفيذ خطوات الحذف بحذر. يمكن تطبيق تأمينات الموارد المؤقتة على مجموعة الموارد الخاصة بك حتى يكتمل الترحيل ويتم التحقق من التطبيق الخاص بك بنجاح.
إجراء التحقق من صحة البيانات/التحقق منها حيث يتم إنشاء أقراص جديدة من اللقطات.
الترحيل
قبل المتابعة، تحقق مما يلي:
بالنسبة لأحمال العمل المحددة حيث تتم كتابة البيانات إلى الذاكرة قبل كتابتها على القرص، يجب إيقاف التطبيق والسماح بمسح البيانات الموجودة في الذاكرة إلى القرص.
VolumeSnapshot
يجب أن تكون الفئة موجودة كما هو موضح في المثال التالي 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"
احصل على قائمة بجميع أجهزة الكمبيوتر الشخصية في مساحة اسم محددة تم فرزها حسب creationTimestamp عن طريق تشغيل الأمر التالي. قم بتعيين مساحة الاسم باستخدام الوسيطة
--namespace
مع مساحة اسم المجموعة الفعلية.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
هذه الخطوة مفيدة إذا كان لديك عدد كبير من PVs التي تحتاج إلى ترحيل، وتريد ترحيل عدد قليل في كل مرة. يمكنك تشغيل هذا الأمر من تحديد أجهزة الكمبيوتر الشخصية التي تم إنشاؤها في إطار زمني معين. عند تشغيل البرنامج النصي MigrateCSI.sh ، فإن اثنتين من المعلمات هما وقت البدء ووقت الانتهاء الذي يمكنك من ترحيل أجهزة الكمبيوتر الشخصية فقط خلال تلك الفترة الزمنية.
أنشئ ملفا باسم MigrateToCSI.sh وانسخه في التعليمات البرمجية التالية. يقوم البرنامج النصي بالآتي:
- إنشاء لقطة قرص كاملة باستخدام Azure CLI
- يخلق
VolumesnapshotContent
- يخلق
VolumeSnapshot
- إنشاء PVC جديد من
VolumeSnapshot
- إنشاء ملف جديد باسم الملف
<namespace>-timestamp
الذي يحتوي على قائمة بجميع الموارد القديمة التي تحتاج إلى تنظيف.
#!/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
لترحيل وحدات تخزين القرص، قم بتنفيذ البرنامج النصي MigrateToCSI.sh مع المعلمات التالية:
namespace
- مساحة اسم نظام المجموعةsourceStorageClass
- StorageClass المستندة إلى برنامج تشغيل التخزين داخل الشجرةtargetCSIStorageClass
- فئة التخزين المستندة إلى برنامج تشغيل تخزين CSIvolumeSnapshotClass
- اسم فئة لقطة وحدة التخزين. على سبيل المثال،custom-disk-snapshot-sc
startTimeStamp
- توفير وقت بدء بالتنسيق yyyy-mm-ddthh:mm:ssz.endTimeStamp
- توفير وقت الانتهاء بالتنسيق yyyy-mm-ddthh:mm:ssz.
./MigrateToCSI.sh <namespace> <sourceStorageClass> <TargetCSIstorageClass> <VolumeSnapshotClass> <startTimestamp> <endTimestamp>
تحديث التطبيق الخاص بك لاستخدام PVC الجديد.
احذف الموارد القديمة يدويا بما في ذلك PVC/PV داخل الشجرة و VolumeSnapshot و VolumeSnapshotContent. وإلا، فإن الحفاظ على PVC/PC في الشجرة وعناصر اللقطة سيولد المزيد من التكلفة.
ترحيل وحدات تخزين مشاركة الملف
يتم دعم الترحيل من داخل الشجرة إلى CSI عن طريق إنشاء وحدة تخزين ثابتة:
- لا حاجة لتنظيف التكوين الأصلي باستخدام فئة التخزين داخل الشجرة.
- مخاطر منخفضة أثناء إجراء حذف منطقي فقط من Kubernetes PV/PVC، لا يتم حذف البيانات الفعلية.
- لا توجد تكلفة إضافية متكبدة نتيجة لعدم الحاجة إلى إنشاء كائنات Azure إضافية، مثل مشاركات الملفات، وما إلى ذلك.
الترحيل
قم بتحديث PV
ReclaimPolicy
الموجود من Delete إلى Retain عن طريق تشغيل الأمر التالي:kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
استبدل pvName باسم PersistentVolume المحدد. بدلا من ذلك، إذا كنت ترغب في تحديث reclaimPolicy ل PVs متعددة، قم بإنشاء ملف باسم patchReclaimPVs.sh ونسخه في التعليمات البرمجية التالية.
#!/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
قم بتنفيذ البرنامج النصي مع المعلمة
namespace
لتحديد مساحة./PatchReclaimPolicy.sh <namespace>
اسم نظام المجموعة .قم بإنشاء فئة تخزين جديدة مع تعيين التزويد إلى
file.csi.azure.com
، أو يمكنك استخدام إحدى فئات التخزين الافتراضية مع توفير ملف CSI.احصل على
secretName
وshareName
من PersistentVolumes الموجودة عن طريق تشغيل الأمر التالي:kubectl describe pv pvName
قم بإنشاء PV جديد باستخدام StorageClass الجديد، و و
shareName
secretName
من PV داخل الشجرة. أنشئ ملفا باسم azurefile-mount-pv.yaml وانسخه في التعليمات البرمجية التالية. ضمنcsi
، حدِّثresourceGroup
وvolumeHandle
وshareName
. بالنسبة لخيارات التحميل، القيمة الافتراضية ل fileMode وdirMode هي 0777.القيمة الافتراضية ل
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
أنشئ ملفا باسم ملف azurefile-mount-pvc.yaml باستخدام PersistentVolumeClaim يستخدم PersistentVolume باستخدام التعليمات البرمجية التالية.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
kubectl
استخدم الأمر لإنشاء PersistentVolume.kubectl apply -f azurefile-mount-pv.yaml
kubectl
استخدم الأمر لإنشاء PersistentVolumeClaim.kubectl apply -f azurefile-mount-pvc.yaml
تحقق من إنشاء PersistentVolumeClaim وربطه ب PersistentVolume عن طريق تشغيل الأمر التالي.
kubectl get pvc azurefile
الإخراج مشابه لما يلي:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
قم بتحديث مواصفات الحاوية للإشارة إلى PersistentVolumeClaim وتحديث الجراب الخاص بك. على سبيل المثال، انسخ التعليمات البرمجية التالية وأنشئ ملفا باسم azure-files-pod.yaml.
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
لا يمكن تحديث مواصفات الجراب في مكانها. استخدم الأوامر التالية
kubectl
لحذف ثم إعادة إنشاء الجراب.kubectl delete pod mypod
kubectl apply -f azure-files-pod.yaml
الخطوات التالية
- لمزيد من المعلومات حول أفضل ممارسات التخزين، راجع أفضل الممارسات للتخزين والنسخ الاحتياطي في خدمة Azure Kubernetes.
- حماية أجهزة الكمبيوتر المستندة إلى برنامج تشغيل CSI التي تم ترحيلها حديثا عن طريق نسخها احتياطيا باستخدام Azure Backup ل AKS.
Azure Kubernetes Service