المختبر 6.3 - StorageClasses والتزويد الديناميكي
أهداف المختبر
في نهاية هذا المختبر، ستكون قادرًا على:
- فهم مفهوم StorageClass.
- إنشاء StorageClass مخصص.
- استخدام التزويد الديناميكي مع PVC.
- فهم الأنواع المختلفة من المزودين.
- التحقق من التزويد التلقائي لـ PVs.
المدة المقدرة
45-60 دقيقة
المتطلبات الأساسية
- تثبيت وتكوين kubectl.
- تشغيل عنقود Kubernetes محلية (minikube أو kind).
- معرفة حول StorageClasses (الفصل 6.3).
الجزء 1: فهم StorageClasses
تعرف StorageClass "نوع" التخزين بخصائص (مزود، معلمات، مطالبة). يسمح بالتزويد الديناميكي لـ PersistentVolumes.
الخطوة 1.1: سرد StorageClasses الموجودة
تحقق من StorageClasses المتاحة في مجموعتك:
kubectl get storageclass
# أو
kubectl get sc
على minikube، يجب أن ترى StorageClass افتراضي (مثل standard أو hostpath). على kind، قد يكون هناك standard أو لا يوجد.
تحقق من تفاصيل StorageClass:
kubectl describe storageclass <nom-de-la-storageclass>
الجزء 2: إنشاء StorageClass مخصص
بالنسبة لمجموعة محلية، سنقوم بإنشاء StorageClass يستخدم hostPath كمزود (عبر مزود محلي أو يدوي).
الخطوة 2.1: إنشاء StorageClass
أنشئ ملف storageclass-local.yaml:
# storageclass-local.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner # لا يوجد تزويد تلقائي لـ hostPath
volumeBindingMode: WaitForFirstConsumer # انتظر حتى يستخدم Pod الـ PVC قبل إنشاء الـ PV
allowVolumeExpansion: false # لا يسمح بتوسيع الحجم
توضيح:
provisioner: kubernetes.io/no-provisioner: يشير إلى عدم وجود تزويد تلقائي. بالنسبة لمجموعة محلية مع hostPath، يجب علينا إنشاء PVs يدويًا، لكن StorageClass يسمح بتجميعها.volumeBindingMode: WaitForFirstConsumer: ينتظر الـ PVC حتى يتم إنشاء Pod قبل ربط الـ PV. هذا يسمح للجدولة باختيار العقدة الصحيحة.allowVolumeExpansion: false: لا يمكن توسيع الأحجام بعد الإنشاء.
قم بتطبيق StorageClass:
kubectl apply -f storageclass-local.yaml
تحقق من أنه تم إنشاؤه:
kubectl get storageclass local-storage
الجزء 3: التزويد الديناميكي (محاكاة)
للتزويد الديناميكي الحقيقي، ستحتاج إلى مزود مثل:
kubernetes.io/aws-ebs(AWS)kubernetes.io/azure-disk(Azure)kubernetes.io/gce-pd(GCP)kubernetes.io/cinder(OpenStack)
على minikube، يمكنك استخدام المزود k8s.io/minikube-hostpath إذا كان متاحًا.
الخطوة 3.1: إنشاء StorageClass مع التزويد الديناميكي (minikube)
إذا كنت تستخدم minikube، أنشئ StorageClass يستخدم المزود minikube:
# storageclass-minikube.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minikube-dynamic
provisioner: k8s.io/minikube-hostpath # مزود minikube
volumeBindingMode: Immediate # الربط فورًا
reclaimPolicy: Delete # حذف الـ PV عند حذف الـ PVC
allowVolumeExpansion: true # السماح بالتوسيع
قم بتطبيقها:
kubectl apply -f storageclass-minikube.yaml
الخطوة 3.2: إنشاء PVC مع StorageClass
أنشئ ملف pvc-dynamic.yaml:
# pvc-dynamic.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-dynamic
spec:
storageClassName: minikube-dynamic # يستخدم StorageClass مع التزويد الديناميكي
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
قم بتطبيق الـ PVC:
kubectl apply -f pvc-dynamic.yaml
تحقق من أن الـ PVC تم إنشاؤه وأنه تم تزويد PV تلقائيًا:
kubectl get pvc pvc-dynamic
kubectl get pv
يجب أن ترى PV جديد تم إنشاؤه تلقائيًا بحالة Bound ومرتبط بالـ PVC.
الجزء 4: استخدام الـ PVC الديناميكي
أنشئ Pod يستخدم الـ PVC الديناميكي:
# pod-dynamic-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-dynamic-pvc
spec:
containers:
- name: app-container
image: busybox
command: ["/bin/sh", "-c"]
args: ["echo 'بيانات في حجم ديناميكي - $(date)' > /data/dynamic-data.txt && cat /data/dynamic-data.txt && sleep 3600"]
volumeMounts:
- name: dynamic-storage
mountPath: /data
volumes:
- name: dynamic-storage
persistentVolumeClaim:
claimName: pvc-dynamic
قم بتطبيق الـ Pod:
kubectl apply -f pod-dynamic-pvc.yaml
تحقق من السجلات:
kubectl logs pod-dynamic-pvc
الجزء 5: توسيع الحجم (اختياري)
إذا كان allowVolumeExpansion: true، يمكنك توسيع PVC بعد إنشائه.
عدل الـ PVC لطلب مساحة أكبر:
kubectl patch pvc pvc-dynamic -p '{"spec":{"resources":{"requests":{"storage":"200Mi"}}}}'
تحقق من أن الطلب قد تم تحديثه:
kubectl get pvc pvc-dynamic
ملاحظة: يعتمد التوسيع الفعلي للحجم على المزود ونوع التخزين الأساسي.
الجزء 6: التنظيف
احذف الموارد التي تم إنشاؤها:
kubectl delete pod pod-dynamic-pvc
kubectl delete -f pvc-dynamic.yaml
# سيتم حذف الـ PV تلقائيًا إذا كانت reclaimPolicy: Delete
kubectl delete -f storageclass-minikube.yaml
kubectl delete -f storageclass-local.yaml
ملخص المختبر
في هذا المختبر، استكشفت StorageClasses و التزويد الديناميكي. تعلمت كيفية إنشاء StorageClasses مخصصة، واستخدام التزويد التلقائي لـ PVs عبر PVCs، وفهم أوضاع الربط المختلفة وسياسات المطالبة.
الخطوات التالية
سيعرض لك المختبر الأخير من هذه الوحدة كيفية استخدام PersistentVolumes مع StatefulSets للتطبيقات ذات الحالة.
المختبر 6.4: StatefulSet مع التخزين الدائم
تم إنشاء المختبر في: ديسمبر 2024