إنشاء واستخدام خادم 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 على جهاز ظاهري
لتوزيع خادم 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 الخاصة بك.
بعد إنشاء Linux VM، انسخ الملف الذي تم إنشاؤه في الخطوة السابقة من جهازك المحلي إلى الجهاز الظاهري باستخدام الأمر التالي:
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
بعد نسخ الملف، افتح اتصال shell (SSH) الآمن بالجهاز الظاهري وقم بتنفيذ الأمر التالي:
sudo ./nfs-server-setup.sh
إذا فشل التنفيذ بسبب خطأ رفض الإذن، فقم بتعيين إذن التنفيذ للجميع عن طريق تشغيل الأمر التالي:
chmod +x ~/nfs-server-setup.sh
ربط مجموعة AKS بخادم NFS
يمكنك الاتصال بخادم NFS من مجموعة AKS الخاصة بك عن طريق توفير وحدة تخزين ثابتة ومطالبة وحدة تخزين ثابتة تحدد كيفية الوصول إلى وحدة التخزين. من الضروري توصيل هذين المصدرين في نفس الشبكات الظاهرية أو الشبكات الظاهرية. لمعرفة كيفية إعداد نظام المجموعة في نفس VNet، راجع: إنشاء مجموعة AKS في VNet الموجودة.
بمجرد أن يكون كلا الموردين على نفس الشبكة الظاهرية أو النظيرة، قم بتوفير وحدة تخزين ثابتة ومطالبة وحدة تخزين ثابتة في نظام مجموعة AKS. يمكن بعد ذلك للحاويات إدخال مُحرك NFS إلى الدليل المحلي الخاص بها.
إنشاء بيان 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.
أنشئ بيان 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
الخطوات التالية
- للحصول على أفضل الممارسات المرتبطة بها، راجع أفضل الممارسات للتخزين والنسخ الاحتياطي في AKS.
- لمعرفة المزيد بشأن إعداد NFS Server أو للمساعدة في تصحيح الأخطاء، راجع البرنامج التعليمي التالي من مجتمع Ubuntu دروس NFS
Azure Kubernetes Service