إنشاء واستخدام خادم Linux NFS (نظام ملفات الشبكة) مع Azure Kubernetes Service (AKS) يدوياً

غالبًا ما يكون تبادل البيانات بين الحاويات مكونًا ضروريًا من الخدمات، والتطبيقات المستندة إلى الحاوية. عادة ما يكون لديك العديد من القرون المختلفة التي تحتاج إلى الوصول إلى نفس المعلومات على وحدة تخزين خارجية دائمة. بينما تعد Azure Files خيارا، فإن إنشاء خادم NFS على جهاز Azure الظاهري هو شكل آخر من أشكال التخزين المشترك المستمر.

ستوضح لك هذه المقالة كيفية إنشاء خادم NFS على جهاز ظاهري Azure Ubuntu، وإعداد مجموعة AKS الخاصة بك مع الوصول إلى نظام الملفات المشترك هذا كوحدة تخزين ثابتة.

قبل البدء

تفترض هذه المقالة أن لديك ما يلي لدعم هذا التكوين:

  • نظام مجموعة AKS الموجودة. إذا لم يكن لديك نظام مجموعة AKS، للحصول على إرشادات حول تصميم تنفيذ على نطاق المؤسسة ل AKS، راجع تخطيط تصميم AKS الخاص بك.
  • يجب أن تكون مجموعة AKS الخاصة بك على نفس Azure Virtual Network (VNet) أو Azure Virtual Network مثل خادم NFS. يجب إنشاء نظام المجموعة على شبكة VNet موجودة، والتي يمكن أن تكون نفس شبكة VNet مثل جهاز NFS Server VM الخاص بك. تم توضيح خطوات التكوين باستخدام VNet الحالي في المقالات التالية: إنشاء مجموعة AKS في VNET الموجودة وتوصيل الشبكات الظاهرية مع نظير VNET.
  • جهاز Azure Ubuntu الظاهري Linux الذي يعمل بالإصدار 18.04 أو أحدث. لتوزيع Linux VM على Azure، راجع إنشاء وإدارة Linux VMs.

إذا قمت بتوزيع مجموعة AKS الخاصة بك أولاً، يقوم Azure تلقائياً بتعبئة إعدادات الشبكة الظاهرية عند توزيع Azure Ubuntu VM الخاص بك، مع ربط Ubuntu VM على نفس شبكة VNet. إذا كنت ترغب في العمل مع شبكات نظيرة بدلا من ذلك، راجع الوثائق أعلاه.

توزيع خادم NFS على جهاز ظاهري

  1. لتوزيع خادم NFS على الجهاز الظاهري Azure Ubuntu، انسخ نص Bash النصي التالي واحفظه في جهازك المحلي. استبدل قيمة المتغير AKS_SUBNET بالمتغير الصحيح من نظام مجموعة AKS، وإلا فإن القيمة الافتراضية المحددة تفتح خادم NFS لكافة المنافذ والاتصالات. في هذه المقالة، تمت تسمية الملف nfs-server-setup.sh.

    #!/bin/bash
    
    # This script should be executed on Linux Ubuntu Virtual Machine
    
    EXPORT_DIRECTORY=${1:-/export/data}
    DATA_DIRECTORY=${2:-/data}
    AKS_SUBNET=${3:-*}
    
    echo "Updating packages"
    apt-get -y update
    
    echo "Installing NFS kernel server"
    
    apt-get -y install nfs-kernel-server
    
    echo "Making data directory ${DATA_DIRECTORY}"
    mkdir -p ${DATA_DIRECTORY}
    
    echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}"
    mkdir -p ${EXPORT_DIRECTORY}
    
    echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}"
    mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY}
    
    echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory"
    chmod 777 ${EXPORT_DIRECTORY}
    
    parentdir="$(dirname "$EXPORT_DIRECTORY")"
    echo "Giving 777 permissions to parent: ${parentdir} directory"
    chmod 777 $parentdir
    
    echo "Appending bound directories into fstab"
    echo "${DATA_DIRECTORY}    ${EXPORT_DIRECTORY}   none    bind  0  0" >> /etc/fstab
    
    echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file"
    echo "/export        ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports
    echo "/export        localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports
    
    nohup service nfs-kernel-server restart
    

    يبدأ البرنامج النصي إعادة تشغيل خادم NFS، وبعد ذلك يمكنك متابعة الاتصال بخادم NFS من مجموعة AKS الخاصة بك.

  2. بعد إنشاء Linux VM، انسخ الملف الذي تم إنشاؤه في الخطوة السابقة من جهازك المحلي إلى الجهاز الظاهري باستخدام الأمر التالي:

    scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
    
  3. بعد نسخ الملف، افتح اتصال shell (SSH) الآمن بالجهاز الظاهري وقم بتنفيذ الأمر التالي:

    sudo ./nfs-server-setup.sh
    

    إذا فشل التنفيذ بسبب خطأ رفض الإذن، فقم بتعيين إذن التنفيذ للجميع عن طريق تشغيل الأمر التالي:

    chmod +x ~/nfs-server-setup.sh
    

ربط مجموعة AKS بخادم NFS

يمكنك الاتصال بخادم NFS من مجموعة AKS الخاصة بك عن طريق توفير وحدة تخزين ثابتة ومطالبة وحدة تخزين ثابتة تحدد كيفية الوصول إلى وحدة التخزين. من الضروري توصيل هذين المصدرين في نفس الشبكات الظاهرية أو الشبكات الظاهرية. لمعرفة كيفية إعداد نظام المجموعة في نفس VNet، راجع: إنشاء مجموعة AKS في VNet الموجودة.

بمجرد أن يكون كلا الموردين على نفس الشبكة الظاهرية أو النظيرة، قم بتوفير وحدة تخزين ثابتة ومطالبة وحدة تخزين ثابتة في نظام مجموعة AKS. يمكن بعد ذلك للحاويات إدخال مُحرك NFS إلى الدليل المحلي الخاص بها.

  1. إنشاء بيان YAML باسم pv-azurefilesnfs.yaml باستخدام PersistentVolume. على سبيل المثال:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: NFS_NAME
      labels:
        type: nfs
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteMany
      nfs:
        server: NFS_INTERNAL_IP
        path: NFS_EXPORT_FILE_PATH
    

    استبدل قيم NFS_INTERNAL_IPو NFS_NAME وNFS_EXPORT_FILE_PATH بالإعدادات الفعلية من خادم NFS.

  2. أنشئ بيان YAML باسم pvc-azurefilesnfs.yaml باستخدام PersistentVolumeClaim يستخدم PersistentVolume. على سبيل المثال:

    هام

    يجب أن تظل قيمةstorageClassName سلسلة فارغة وإلا فلن تعمل المطالبة.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: NFS_NAME
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 1Gi
      selector: 
        matchLabels:
          type: nfs
    

    استبدل قيمة NFS_NAME بالإعداد الفعلي من خادم NFS.

استكشاف الأخطاء وإصلاحها

إذا لم تتمكن من الاتصال بالخادم من مجموعة AKS الخاصة بك، فقد تكون المشكلة هي الدليل الذي تم تصديره أو الدليل الأصل، وليست لديه أذونات كافية للوصول إلى NFS Server VM.

تحقق من منح كل من دليل التصدير والدليل الأصل الخاص به 777 إذنا.

يمكنك التحقق من الأذونات عن طريق تشغيل الأمر التالي ويجب أن تحتوي الأدلة على أذونات 'drwxrwxrwx' :

ls -l

الخطوات التالية