توفير وحدات تخزين NFS لملفات Azure NetApp لخدمة Azure Kubernetes
بعد تكوين Azure NetApp Files لخدمة Azure Kubernetes، يمكنك توفير وحدات تخزين Azure NetApp Files لخدمة Azure Kubernetes.
تدعم Azure NetApp Files وحدات التخزين باستخدام NFS (NFSv3 أو NFSv4.1) أو SMB أو بروتوكول مزدوج (NFSv3 وSMB أو NFSv4.1 وSMB).
- توضح هذه المقالة تفاصيل توفير وحدات تخزين NFS بشكل ثابت أو ديناميكي.
- للحصول على معلومات حول توفير وحدات تخزين SMB بشكل ثابت أو ديناميكي، راجع توفير وحدات تخزين Azure NetApp Files SMB لخدمة Azure Kubernetes.
- للحصول على معلومات حول توفير وحدات تخزين البروتوكول المزدوج بشكل ثابت، راجع توفير وحدات تخزين البروتوكول المزدوج لملفات Azure NetApp لخدمة Azure Kubernetes
تكوين ثابت للتطبيقات التي تستخدم وحدات تخزين NFS
يصف هذا القسم كيفية إنشاء وحدة تخزين NFS على Azure NetApp Files وعرض وحدة التخزين بشكل ثابت إلى Kubernetes. كما يصف كيفية استخدام وحدة التخزين مع تطبيق حاوية.
إنشاء وحدة تخزين NFS
تعريف المتغيرات للاستخدام لاحقا. استبدل myresourcegroup وmylocation وmyaccountname وmypool1 وpremium وmyfilepath وmyvolsize وmyvolname وvnetid و anfSubnetID بقيمة مناسبة من حسابك وبيئتك. يجب أن يكون مسار الملف فريدا داخل جميع حسابات ANF.
RESOURCE_GROUP="myresourcegroup" LOCATION="mylocation" ANF_ACCOUNT_NAME="myaccountname" POOL_NAME="mypool1" SERVICE_LEVEL="premium" # Valid values are Standard, Premium, and Ultra UNIQUE_FILE_PATH="myfilepath" VOLUME_SIZE_GIB="myvolsize" VOLUME_NAME="myvolname" VNET_ID="vnetId" SUBNET_ID="anfSubnetId"
إنشاء وحدة تخزين باستخدام
az netappfiles volume create
الأمر . لمزيد من المعلومات، راجع إنشاء وحدة تخزين NFS لملفات Azure NetApp.az netappfiles volume create \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --name "$VOLUME_NAME" \ --service-level $SERVICE_LEVEL \ --vnet $VNET_ID \ --subnet $SUBNET_ID \ --usage-threshold $VOLUME_SIZE_GIB \ --file-path $UNIQUE_FILE_PATH \ --protocol-types NFSv3
إنشاء وحدة التخزين الثابتة
سرد تفاصيل وحدة التخزين باستخدام
az netappfiles volume show
الأمر . استبدل المتغيرات بالقيم المناسبة من حساب Azure NetApp Files والبيئة إذا لم يتم تعريفها في خطوة سابقة.az netappfiles volume show \ --resource-group $RESOURCE_GROUP \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --volume-name "$VOLUME_NAME -o JSON
الإخراج التالي هو مثال على الأمر أعلاه المنفذ بقيم حقيقية.
{ ... "creationToken": "myfilepath2", ... "mountTargets": [ { ... "ipAddress": "10.0.0.4", ... } ], ... }
قم بإنشاء ملف باسم
pv-nfs.yaml
وانسخه في YAML التالي. تأكد من أن الخادم يطابق عنوان IP للإخراج من الخطوة 1، وأن المسار يطابق الإخراج منcreationToken
الأعلى. يجب أن تتطابق السعة أيضا مع حجم وحدة التخزين من الخطوة أعلاه.apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 100Gi accessModes: - ReadWriteMany mountOptions: - vers=3 nfs: server: 10.0.0.4 path: /myfilepath2
إنشاء وحدة التخزين الثابتة باستخدام
kubectl apply
الأمر :kubectl apply -f pv-nfs.yaml
تحقق من أن حالة وحدة التخزين الثابتة متوفرة باستخدام
kubectl describe
الأمر :kubectl describe pv pv-nfs
إنشاء مطالبة وحدة تخزين ثابتة
قم بإنشاء ملف باسم
pvc-nfs.yaml
وانسخه في YAML التالي. ينشئ هذا البيان PVC باسمpvc-nfs
لتخزين 100Gi ووضع الوصول، ويطابقReadWriteMany
PV الذي قمت بإنشائه.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 100Gi
إنشاء مطالبة وحدة التخزين الدائمة باستخدام
kubectl apply
الأمر :kubectl apply -f pvc-nfs.yaml
تحقق من أن حالة مطالبة وحدة التخزين الثابتة مرتبطة
kubectl describe
باستخدام الأمر :kubectl describe pvc pvc-nfs
الإدخال باستخدام كبسولة
قم بإنشاء ملف باسم
nginx-nfs.yaml
وانسخه في YAML التالي. يعرف هذا البيان جرابnginx
يستخدم مطالبة وحدة التخزين الدائمة.kind: Pod apiVersion: v1 metadata: name: nginx-nfs spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: nginx-nfs command: - "/bin/sh" - "-c" - while true; do echo $(date) >> /mnt/azure/outfile; sleep 1; done volumeMounts: - name: disk01 mountPath: /mnt/azure volumes: - name: disk01 persistentVolumeClaim: claimName: pvc-nfs
إنشاء الجراب باستخدام
kubectl apply
الأمر :kubectl apply -f nginx-nfs.yaml
تحقق من أن pod قيد التشغيل باستخدام
kubectl describe
الأمر :kubectl describe pod nginx-nfs
تحقق من تحميل وحدة التخزين الخاصة بك على الجراب باستخدام
kubectl exec
للاتصال بالجراب، ثم استخدمdf -h
للتحقق مما إذا كان يتم تحميل وحدة التخزين.kubectl exec -it nginx-nfs -- sh
/ # df -h Filesystem Size Used Avail Use% Mounted on ... 10.0.0.4:/myfilepath2 100T 384K 100T 1% /mnt/azure ...
تكوين ديناميكي للتطبيقات التي تستخدم وحدات تخزين NFS
يمكن استخدام Astra Trident لتوفير ملفات NFS أو SMB ديناميكيا على Azure NetApp Files. وحدات تخزين SMB المتوفرة ديناميكيا مدعومة فقط مع عقد عامل windows.
يصف هذا القسم كيفية استخدام Astra Trident لإنشاء وحدة تخزين NFS ديناميكيا على Azure NetApp Files وإدخالها تلقائيا إلى تطبيق حاوية.
تثبيت Astra Trident
لتوفير وحدات تخزين NFS ديناميكيا، تحتاج إلى تثبيت Astra Trident. تُعد Astra Trident موفر التخزين الديناميكي لـ NetApp الذي تم بناؤه لهذا الغرض من أجل Kubernetes. تبسيط استهلاك التخزين لتطبيقات Kubernetes باستخدام برنامج تشغيل واجهة تخزين الحاويات (CSI) في Astra Trident. ينشر Astra Trident على مجموعات Kubernetes كوحدات pod ويوفر خدمات تزامن تخزين ديناميكية لأحمال عمل Kubernetes الخاصة بك.
يمكن تثبيت Trident باستخدام عامل تشغيل Trident (يدويا أو باستخدام Helm) أو tridentctl
. لمعرفة المزيد حول أساليب التثبيت هذه وكيفية عملها، راجع دليل تثبيت Astra Trident.
تثبيت Astra Trident باستخدام Helm
يجب تثبيت Helm على محطة العمل لتثبيت Astra Trident باستخدام هذا الأسلوب. للحصول على طرق أخرى لتثبيت Astra Trident، راجع دليل تثبيت Astra Trident.
لتثبيت Astra Trident باستخدام Helm لنظام مجموعة مع عقد عامل Linux فقط، قم بتشغيل الأوامر التالية:
helm repo add netapp-trident https://netapp.github.io/trident-helm-chart helm install trident netapp-trident/trident-operator --version 23.04.0 --create-namespace --namespace trident
إخراج الأمر يشبه المثال التالي:
NAME: trident LAST DEPLOYED: Fri May 5 13:55:36 2023 NAMESPACE: trident STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI storage provisioner for Kubernetes. Your release is named 'trident' and is installed into the 'trident' namespace. Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster. To configure Trident to manage storage resources, you will need a copy of tridentctl, which is available in pre-packaged Trident releases. You may find all Trident releases and source code online at https://github.com/NetApp/trident. To learn more about the release, try: $ helm status trident $ helm get all trident
لتأكيد تثبيت Astra Trident بنجاح، قم بتشغيل الأمر التالي
kubectl describe
:kubectl describe torc trident
إخراج الأمر يشبه المثال التالي:
Name: trident Namespace: Labels: app.kubernetes.io/managed-by=Helm Annotations: meta.helm.sh/release-name: trident meta.helm.sh/release-namespace: trident API Version: trident.netapp.io/v1 Kind: TridentOrchestrator Metadata: ... Spec: IPv6: false Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: <nil> Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent k8sTimeout: 0 Kubelet Dir: <nil> Log Format: text Log Layers: <nil> Log Workflows: <nil> Namespace: trident Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Windows: false Status: Current Installation Params: IPv6: false Autosupport Hostname: Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: Autosupport Serial Number: Debug: false Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent Image Pull Secrets: Image Registry: k8sTimeout: 30 Kubelet Dir: /var/lib/kubelet Log Format: text Log Layers: Log Level: info Log Workflows: Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Message: Trident installed Namespace: trident Status: Installed Version: v23.04.0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Installing 2m59s trident-operator.netapp.io Installing Trident Normal Installed 2m31s trident-operator.netapp.io Trident installed
إنشاء خلفية
لإرشاد Astra Trident حول اشتراك Azure NetApp Files والمكان الذي يحتاج إلى إنشاء وحدات تخزين فيه، يتم إنشاء خلفية. تتطلب هذه الخطوة تفاصيل حول الحساب الذي تم إنشاؤه في خطوة سابقة.
قم بإنشاء ملف باسم
backend-secret.yaml
وانسخه في YAML التالي.Client ID
قم بتغيير وclientSecret
إلى القيم الصحيحة للبيئة الخاصة بك.apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: 00001111-aaaa-2222-bbbb-3333cccc4444 clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
قم بإنشاء ملف باسم
backend-anf.yaml
وانسخه في YAML التالي.subscriptionID
قم بتغيير وtenantID
location
و وserviceLevel
إلى القيم الصحيحة للبيئة الخاصة بك.subscriptionID
استخدم لاشتراك Azure حيث يتم تمكين Azure NetApp Files.tenantID
احصل على وclientID
وclientSecret
من تسجيل تطبيق في معرف Microsoft Entra مع أذونات كافية لخدمة Azure NetApp Files. يتضمن تسجيل التطبيق دور المالك أو المساهم المحدد مسبقا بواسطة Azure. يجب أن يكون الموقع موقع Azure يحتوي على شبكة فرعية مفوضة واحدة على الأقل تم إنشاؤها في خطوة سابقة. يجب أن يتطابقserviceLevel
معserviceLevel
المكون لتجمع السعة في تكوين Azure NetApp Files لأحمال عمل AKS.apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: backend-tbc-anf spec: version: 1 storageDriverName: azure-netapp-files subscriptionID: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e tenantID: aaaabbbb-0000-cccc-1111-dddd2222eeee location: eastus serviceLevel: Premium credentials: name: backend-tbc-anf-secret
لمزيد من المعلومات حول الخلفيات، راجع خيارات وأمثلة تكوين الواجهة الخلفية لملفات Azure NetApp.
تطبيق البيانات السرية والخلفية باستخدام
kubectl apply
الأمر . أولا تطبيق البيانات السرية:kubectl apply -f backend-secret.yaml -n trident
إخراج الأمر يشبه المثال التالي:
secret/backend-tbc-anf-secret created
تطبيق الخلفية:
kubectl apply -f backend-anf.yaml -n trident
إخراج الأمر يشبه المثال التالي:
tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
تأكد من إنشاء الخلفية باستخدام
kubectl get
الأمر :kubectl get tridentbackends -n trident
إخراج الأمر يشبه المثال التالي:
NAME BACKEND BACKEND UUID tbe-kfrdh backend-tbc-anf 8da4e926-9dd4-4a40-8d6a-375aab28c566
أنشئ فئة تخزين
يتم استخدام فئة تخزين لتعريف كيفية إنشاء وحدة تخزين بشكل حيوي مع وحدة تخزين ثابتة. لاستهلاك وحدات تخزين Azure NetApp Files، يجب إنشاء فئة تخزين.
أنشئ ملفا باسم
anf-storageclass.yaml
وانسخه في YAML التالي:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azure-netapp-files provisioner: csi.trident.netapp.io parameters: backendType: "azure-netapp-files" fsType: "nfs"
إنشاء فئة التخزين باستخدام
kubectl apply
الأمر :kubectl apply -f anf-storageclass.yaml
إخراج الأمر يشبه المثال التالي:
storageclass/azure-netapp-files created
kubectl get
قم بتشغيل الأمر لعرض حالة فئة التخزين:kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE azure-netapp-files csi.trident.netapp.io Delete Immediate false
إنشاء PVC
مطالبة وحدة التخزين الدائمة (PVC) هي طلب للتخزين من قبل المستخدم. عند إنشاء مطالبة وحدة تخزين ثابتة، تنشئ Astra Trident تلقائيا وحدة تخزين Azure NetApp Files وتجعلها متاحة لاستهلاك أحمال عمل Kubernetes.
قم بإنشاء ملف باسم
anf-pvc.yaml
وانسخه في YAML التالي. في هذا المثال، هناك حاجة إلى وحدة تخزين 1-TiB مع وصول ReadWriteMany.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Ti storageClassName: azure-netapp-files
إنشاء مطالبة وحدة التخزين الدائمة باستخدام
kubectl apply
الأمر :kubectl apply -f anf-pvc.yaml
إخراج الأمر يشبه المثال التالي:
persistentvolumeclaim/anf-pvc created
لعرض معلومات حول مطالبة وحدة التخزين الثابتة، قم بتشغيل
kubectl get
الأمر :kubectl get pvc
إخراج الأمر يشبه المثال التالي:
kubectl get pvc -n trident NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc Bound pvc-bffa315d-3f44-4770-86eb-c922f567a075 1Ti RWO azure-netapp-files 62s
استخدم الحجم الثابت
بعد إنشاء PVC، ينشئ Astra Trident وحدة التخزين الثابتة. يمكن إنشاء جراب لتحميل وحدة تخزين Azure NetApp Files والوصول إليها.
يمكن استخدام البيان التالي لتعريف جراب NGINX الذي يقوم بتحميل وحدة تخزين Azure NetApp Files التي تم إنشاؤها في الخطوة السابقة. في هذا المثال، يتم إدخال وحدة التخزين في /mnt/data
.
أنشئ ملفا باسم
anf-nginx-pod.yaml
وانسخه في YAML التالي:kind: Pod apiVersion: v1 metadata: name: nginx-pod spec: containers: - name: nginx image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/data" name: volume volumes: - name: volume persistentVolumeClaim: claimName: anf-pvc
إنشاء الجراب باستخدام
kubectl apply
الأمر :kubectl apply -f anf-nginx-pod.yaml
إخراج الأمر يشبه المثال التالي:
pod/nginx-pod created
قام Kubernetes بإنشاء جراب مع وحدة التخزين التي تم تحميلها ويمكن الوصول إليها داخل الحاوية
nginx
في/mnt/data
. يمكنك التأكيد عن طريق التحقق من سجلات الأحداث للحجيرة باستخدامkubectl describe
الأمر :kubectl describe pod nginx-pod
إخراج الأمر يشبه المثال التالي:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: anf-pvc ReadOnly: false default-token-k7952: Type: Secret (a volume populated by a Secret) SecretName: default-token-k7952 Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 15s default-scheduler Successfully assigned trident/nginx-pod to brameshb-non-root-test Normal SuccessfulAttachVolume 15s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-bffa315d-3f44-4770-86eb-c922f567a075" Normal Pulled 12s kubelet Container image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" already present on machine Normal Created 11s kubelet Created container nginx Normal Started 10s kubelet Started container nginx
الخطوات التالية
يدعم Astra Trident العديد من الميزات مع Azure NetApp Files. لمزيد من المعلومات، راجع:
Azure Kubernetes Service