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

المختبر 6.1 - الأحجام المؤقتة وemptyDir

الأهداف​

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

  • إنشاء واستخدام أحجام emptyDir
  • استخدام أحجام tmpfs (RAM)
  • مشاركة الأحجام بين الحاويات في Pod
  • فهم دورة حياة الأحجام المؤقتة
  • مقارنة emptyDir وtmpfs

المتطلبات الأساسية​

  • عنقود Kubernetes وظيفية
  • تكوين kubectl
  • فهم Pods والأحجام

التمرين 1: حجم emptyDir الأساسي​

إنشاء Pod مع emptyDir​

قم بإنشاء pod-emptydir.yaml:

apiVersion: v1
kind: Pod
metadata:
name: emptydir-pod
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "echo 'Hello' > /cache/data.txt && cat /cache/data.txt && sleep 3600"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir: {}

النشر والتحقق​

kubectl apply -f pod-emptydir.yaml
kubectl logs emptydir-pod
kubectl exec emptydir-pod -- ls -la /cache

التمرين 2: emptyDir مع حد الحجم​

إنشاء Pod مع حد الحجم​

قم بإنشاء pod-emptydir-limit.yaml:

apiVersion: v1
kind: Pod
metadata:
name: emptydir-limit-pod
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "dd if=/dev/zero of=/cache/bigfile bs=1M count=100 && sleep 3600"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir:
sizeLimit: 50Mi

النشر والملاحظة​

kubectl apply -f pod-emptydir-limit.yaml
kubectl get pod emptydir-limit-pod
# يجب أن يفشل الـPod لأن 100Mi > 50Mi

التمرين 3: حجم مشترك بين الحاويات​

إنشاء Pod متعدد الحاويات​

قم بإنشاء pod-shared-volume.yaml:

apiVersion: v1
kind: Pod
metadata:
name: shared-volume-pod
spec:
containers:
- name: writer
image: busybox:1.35
command: ["sh", "-c", "echo 'Data from writer' > /shared/data.txt && sleep 3600"]
volumeMounts:
- name: shared
mountPath: /shared
- name: reader
image: busybox:1.35
command: ["sh", "-c", "sleep 5 && cat /shared/data.txt && sleep 3600"]
volumeMounts:
- name: shared
mountPath: /shared
volumes:
- name: shared
emptyDir: {}

النشر والتحقق​

kubectl apply -f pod-shared-volume.yaml
kubectl logs shared-volume-pod -c writer
kubectl logs shared-volume-pod -c reader

التمرين 4: حجم tmpfs (RAM)​

إنشاء Pod مع tmpfs​

قم بإنشاء pod-tmpfs.yaml:

apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "echo 'Fast storage' > /tmp/data.txt && cat /tmp/data.txt && sleep 3600"]
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 100Mi

النشر والتحقق​

kubectl apply -f pod-tmpfs.yaml
kubectl logs tmpfs-pod
kubectl exec tmpfs-pod -- df -h /tmp

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

إنشاء اثنين من Pods للمقارنة​

قم بإنشاء pod-comparison.yaml:

apiVersion: v1
kind: Pod
metadata:
name: emptydir-bench
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "time dd if=/dev/zero of=/cache/test bs=1M count=10 && sleep 3600"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir: {}
---
apiVersion: v1
kind: Pod
metadata:
name: tmpfs-bench
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "time dd if=/dev/zero of=/tmp/test bs=1M count=10 && sleep 3600"]
volumeMounts:
- name: tmpfs-vol
mountPath: /tmp
volumes:
- name: tmpfs-vol
emptyDir:
medium: Memory

مقارنة الأداء​

kubectl apply -f pod-comparison.yaml
kubectl logs emptydir-bench
kubectl logs tmpfs-bench
# قارن أوقات الكتابة

التمرين 6: حالة استخدام حقيقية - التخزين المؤقت​

إنشاء Pod مع التخزين المؤقت​

قم بإنشاء pod-cache.yaml:

apiVersion: v1
kind: Pod
metadata:
name: cache-pod
spec:
containers:
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: cache-warmup
image: busybox:1.35
command: ["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

النشر والتحقق​

kubectl apply -f pod-cache.yaml
kubectl exec cache-pod -c web-server -- ls -la /var/cache/nginx
kubectl exec cache-pod -c cache-warmup -- cat /cache/data.txt

التنظيف​

kubectl delete pod emptydir-pod emptydir-limit-pod shared-volume-pod tmpfs-pod emptydir-bench tmpfs-bench cache-pod

أسئلة للتفكير​

  1. ما هو الفرق الرئيسي بين emptyDir وtmpfs؟
  2. متى ستستخدم tmpfs بدلاً من emptyDir؟
  3. لماذا تحدد sizeLimit للأحجام emptyDir؟
  4. ماذا يحدث للبيانات في حجم emptyDir عندما يتم حذف الـPod؟

تحدي إضافي​

قم بإنشاء Pod مع ثلاث حاويات تشارك حجم emptyDir:

  • حاوية تكتب البيانات
  • حاوية تقرأ وتعالج البيانات
  • حاوية تراقب حجم الحجم

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