انتقل إلى المحتوى الرئيسي

الفصل 6.1 - وحدات التخزين

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم الأنواع المختلفة لوحدات التخزين في Kubernetes
  • استخدام وحدات التخزين المؤقتة (emptyDir، tmpfs)
  • التمييز بين وحدات التخزين المؤقتة والتخزين الدائم
  • اختيار النوع المناسب من وحدات التخزين وفقًا لحالة الاستخدام
  • فهم دورة حياة وحدات التخزين

مقدمة​

تسمح وحدات التخزين في Kubernetes للحاويات بالوصول إلى التخزين. على عكس نظام الملفات الخاص بالحاوية (المؤقت)، تستمر وحدات التخزين حتى إذا أعيد تشغيل الحاوية.


وحدات التخزين المؤقتة​

توجد وحدات التخزين المؤقتة فقط خلال مدة حياة الـ Pod. يتم حذفها عندما ينتهي الـ Pod.

emptyDir​

يتم إنشاء وحدة التخزين emptyDir عندما يبدأ الـ Pod ويتم حذفها عندما ينتهي الـ Pod.

apiVersion: v1
kind: Pod
metadata:
name: empty-dir-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /cache
- name: sidecar
image: busybox:1.35
volumeMounts:
- name: cache
mountPath: /shared
volumes:
- name: cache
emptyDir:
sizeLimit: 1Gi # اختياري: حد الحجم

الخصائص:

  • يتم إنشاؤها تلقائيًا عند بدء الـ Pod
  • مشتركة بين جميع الحاويات في الـ Pod
  • مخزنة على الـ node (القرص المحلي)
  • يتم حذفها عندما ينتهي الـ Pod

حالات الاستخدام:

  • ذاكرة مؤقتة مؤقتة
  • ملفات مؤقتة مشتركة بين الحاويات
  • بيانات العمل الوسيطة

tmpfs (RAM)​

يتم تخزين وحدة التخزين tmpfs في الذاكرة (RAM) بدلاً من القرص.

apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 512Mi # الحد في RAM

الخصائص:

  • مخزنة في RAM (سريعة جدًا)
  • يتم حذفها عند إعادة تشغيل الـ node
  • محدودة بالـ RAM المتاح
  • أسرع من emptyDir (القرص)

حالات الاستخدام:

  • ذاكرة مؤقتة عالية الأداء في الذاكرة
  • ملفات مؤقتة حساسة (تُحذف عند إعادة التشغيل)
  • بيانات لا يجب أن تستمر

تنبيه: استخدم بحذر لأنها تستهلك RAM.


مقارنة: emptyDir مقابل tmpfs​

الخاصيةemptyDirtmpfs
التخزينالقرص المحليRAM
الأداءمتوسطمرتفع جدًا
الاستمراريةيبقى عند إعادة تشغيل الحاويةيُحذف عند إعادة تشغيل الـ node
الحدمساحة القرصRAM المتاح
حالات الاستخدامذاكرة مؤقتة، ملفات مؤقتةذاكرة مؤقتة عالية الأداء، بيانات حساسة

وحدات التخزين الخاصة​

ConfigMap و Secret كوحدات تخزين​

يمكن تركيب ConfigMaps و Secrets كوحدات تخزين.

apiVersion: v1
kind: Pod
metadata:
name: config-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: app-secrets
defaultMode: 0400

النتيجة: تصبح كل مفتاح ملفًا في الدليل المركب.


وحدات التخزين الدائمة (نظرة عامة)​

سيتم تغطية وحدات التخزين الدائمة (PV/PVC) بالتفصيل في الفصل 6.2.

الفرق الرئيسي:


مثال كامل: ذاكرة مؤقتة مشتركة​

apiVersion: v1
kind: Pod
metadata:
name: cache-example
spec:
containers:
# الحاوية الرئيسية
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: tmp
mountPath: /tmp

# حاوية sidecar للذاكرة المؤقتة
- name: cache-warmup
image: busybox:1.35
command: ["/bin/sh", "-c", "while true; do echo 'Cache data' > /cache/data.txt; sleep 60; done"]
volumeMounts:
- name: cache
mountPath: /cache

volumes:
# ذاكرة مؤقتة مشتركة (القرص)
- name: cache
emptyDir:
sizeLimit: 500Mi

# ملفات مؤقتة (RAM)
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 100Mi

أفضل الممارسات​

1. اختيار النوع المناسب​

  • emptyDir: ذاكرة مؤقتة، ملفات مؤقتة، بيانات مشتركة بين الحاويات
  • tmpfs: ذاكرة مؤقتة عالية الأداء، بيانات حساسة مؤقتة
  • PV/PVC: بيانات مهمة يجب أن تستمر

2. حدود الحجم​

حدد دائمًا sizeLimit لتجنب:

  • استنفاد مساحة القرص (emptyDir)
  • استنفاد RAM (tmpfs)

3. التنظيف​

يتم تنظيف وحدات التخزين المؤقتة تلقائيًا، لكن:

  • تحقق من أن التطبيقات تنظف ملفاتها المؤقتة
  • راقب استخدام مساحة القرص/RAM

أوامر مفيدة​

التحقق من وحدات التخزين في Pod​

kubectl describe pod empty-dir-pod

عرض استخدام وحدات التخزين​

kubectl exec empty-dir-pod -c app -- df -h

اختبار وحدة تخزين​

# الكتابة في وحدة التخزين
kubectl exec empty-dir-pod -c app -- sh -c "echo 'test' > /cache/test.txt"

# القراءة من وحدة التخزين
kubectl exec empty-dir-pod -c app -- cat /cache/test.txt

ملخص​

في هذا الفصل، تعلمت:

وحدات التخزين المؤقتة: emptyDir (القرص) و tmpfs (RAM)
emptyDir: يتم إنشاؤها عند البدء، تُحذف في النهاية، مشتركة بين الحاويات
tmpfs: مخزنة في RAM، سريعة جدًا، تُحذف عند إعادة تشغيل الـ node
حالات الاستخدام: ذاكرة مؤقتة، ملفات مؤقتة، بيانات مشتركة
القيود: حجم محدود، مدة الحياة مرتبطة بالـ Pod
أفضل الممارسات: تحديد sizeLimit، الاختيار وفقًا للاحتياجات


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

الفصل 6.2: PersistentVolumes و PersistentVolumeClaims
المختبر 6.1: وحدات التخزين المؤقتة و emptyDir


تم إنشاء الفصل في: ديسمبر 2024