المختبر 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
أسئلة للتفكير
- ما هو الفرق الرئيسي بين emptyDir وtmpfs؟
- متى ستستخدم tmpfs بدلاً من emptyDir؟
- لماذا تحدد sizeLimit للأحجام emptyDir؟
- ماذا يحدث للبيانات في حجم emptyDir عندما يتم حذف الـPod؟
تحدي إضافي
قم بإنشاء Pod مع ثلاث حاويات تشارك حجم emptyDir:
- حاوية تكتب البيانات
- حاوية تقرأ وتعالج البيانات
- حاوية تراقب حجم الحجم
تم إنشاء المختبر في: ديسمبر 2024