توفير وحدات تخزين 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

يصف هذا القسم كيفية إنشاء وحدة تخزين NFS على Azure NetApp Files وعرض وحدة التخزين بشكل ثابت إلى Kubernetes. كما يصف كيفية استخدام وحدة التخزين مع تطبيق حاوية.

إنشاء وحدة تخزين NFS

  1. تعريف المتغيرات للاستخدام لاحقا. استبدل 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"
    
  2. إنشاء وحدة تخزين باستخدام 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
    

إنشاء وحدة التخزين الثابتة

  1. سرد تفاصيل وحدة التخزين باستخدام 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",
          ...
        }
      ],
      ...
    }
    
  2. قم بإنشاء ملف باسم 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
    
  3. إنشاء وحدة التخزين الثابتة باستخدام kubectl apply الأمر :

    kubectl apply -f pv-nfs.yaml
    
  4. تحقق من أن حالة وحدة التخزين الثابتة متوفرة باستخدام kubectl describe الأمر :

    kubectl describe pv pv-nfs
    

إنشاء مطالبة وحدة تخزين ثابتة

  1. قم بإنشاء ملف باسم 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
    
  2. إنشاء مطالبة وحدة التخزين الدائمة باستخدام kubectl apply الأمر :

    kubectl apply -f pvc-nfs.yaml
    
  3. تحقق من أن حالة مطالبة وحدة التخزين الثابتة مرتبطةkubectl describe باستخدام الأمر :

    kubectl describe pvc pvc-nfs
    

الإدخال باستخدام كبسولة

  1. قم بإنشاء ملف باسم 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
    
  2. إنشاء الجراب باستخدام kubectl apply الأمر :

    kubectl apply -f nginx-nfs.yaml
    
  3. تحقق من أن pod قيد التشغيل باستخدام kubectl describe الأمر :

    kubectl describe pod nginx-nfs
    
  4. تحقق من تحميل وحدة التخزين الخاصة بك على الجراب باستخدام 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.

  1. لتثبيت 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
    
  2. لتأكيد تثبيت 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 والمكان الذي يحتاج إلى إنشاء وحدات تخزين فيه، يتم إنشاء خلفية. تتطلب هذه الخطوة تفاصيل حول الحساب الذي تم إنشاؤه في خطوة سابقة.

  1. قم بإنشاء ملف باسم backend-secret.yaml وانسخه في YAML التالي. Client ID قم بتغيير و clientSecret إلى القيم الصحيحة للبيئة الخاصة بك.

    apiVersion: v1
    kind: Secret
    metadata:
      name: backend-tbc-anf-secret
    type: Opaque
    stringData:
      clientID: abcde356-bf8e-fake-c111-abcde35613aa
      clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
    
  2. قم بإنشاء ملف باسم backend-anf.yaml وانسخه في YAML التالي. subscriptionIDقم بتغيير و tenantIDlocationو و 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: 12abc678-4774-fake-a1b2-a7abcde39312
      tenantID: a7abcde3-edc1-fake-b111-a7abcde356cf
      location: eastus
      serviceLevel: Premium
      credentials:
        name: backend-tbc-anf-secret
    

    لمزيد من المعلومات حول الخلفيات، راجع خيارات وأمثلة تكوين الواجهة الخلفية لملفات Azure NetApp.

  3. تطبيق البيانات السرية والخلفية باستخدام 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
    
  4. تأكد من إنشاء الخلفية باستخدام kubectl get الأمر :

     kubectl get tridentbackends -n trident
    

    إخراج الأمر يشبه المثال التالي:

    NAME        BACKEND               BACKEND UUID
    tbe-kfrdh   backend-tbc-anf   8da4e926-9dd4-4a40-8d6a-375aab28c566
    

أنشئ فئة تخزين

يتم استخدام فئة تخزين لتعريف كيفية إنشاء وحدة تخزين بشكل حيوي مع وحدة تخزين ثابتة. لاستهلاك وحدات تخزين Azure NetApp Files، يجب إنشاء فئة تخزين.

  1. أنشئ ملفا باسم 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"
    
  2. إنشاء فئة التخزين باستخدام kubectl apply الأمر :

    kubectl apply -f anf-storageclass.yaml
    

    إخراج الأمر يشبه المثال التالي:

    storageclass/azure-netapp-files created
    
  3. 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.

  1. قم بإنشاء ملف باسم 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
    
  2. إنشاء مطالبة وحدة التخزين الدائمة باستخدام kubectl apply الأمر :

    kubectl apply -f anf-pvc.yaml
    

    إخراج الأمر يشبه المثال التالي:

    persistentvolumeclaim/anf-pvc created
    
  3. لعرض معلومات حول مطالبة وحدة التخزين الثابتة، قم بتشغيل 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.

  1. أنشئ ملفا باسم 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
    
  2. إنشاء الجراب باستخدام 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. لمزيد من المعلومات، راجع: