المختبر 7.4 - الحاويات التمهيدية و Sidecars
أهداف المختبر
في نهاية هذا المختبر، ستكون قادرًا على:
- فهم مفهوم الحاوية التمهيدية.
- إنشاء Pods مع حاويات تمهيدية.
- استخدام الحاويات التمهيدية لتحضير البيئة.
- فهم نمط Sidecar.
- تنفيذ نمط Sidecar لتسجيل الأحداث.
المدة المقدرة
45-60 دقيقة
المتطلبات المسبقة
- تثبيت وتكوين kubectl.
- وجود عنقود Kubernetes محلي يعمل (minikube أو kind).
- معرفة بالحاويات التمهيدية و Sidecars (الفصل 7.4).
الجزء 1: فهم الحاويات التمهيدية
تعمل الحاويات التمهيدية قبل الحاويات الرئيسية في Pod. وهي مفيدة لـ:
- تهيئة البيانات أو التكوينات
- انتظار جاهزية التبعيات
- تحضير البيئة قبل بدء التطبيق
الخصائص:
- تعمل بشكل تسلسلي (واحدة تلو الأخرى)
- يجب أن تنجح جميعها قبل بدء الحاويات الرئيسية
- لديها وصول إلى نفس الأحجام مثل الحاويات الرئيسية
الجزء 2: إنشاء Pod مع حاوية تمهيدية
سنقوم بإنشاء Pod مع حاوية تمهيدية تحضر الملفات قبل بدء التطبيق.
الخطوة 2.1: إنشاء Pod مع حاوية تمهيدية
أنشئ ملف pod-init-container.yaml:
# pod-init-container.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-with-init
spec:
volumes:
- name: shared-data
emptyDir: {} # حجم مشترك بين الحاوية التمهيدية والحاوية الرئيسية
initContainers:
- name: init-setup
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
echo "حاوية تمهيدية: تحضير البيئة..."
echo "تم تهيئة التكوين" > /shared/config.txt
echo "تم تحضير البيانات" > /shared/data.txt
echo "انتهت الحاوية التمهيدية بنجاح"
volumeMounts:
- name: shared-data
mountPath: /shared
containers:
- name: app-container
image: nginx:1.20
command: ["/bin/sh", "-c"]
args:
- |
echo "التطبيق: قراءة الملفات المحضرة بواسطة الحاوية التمهيدية"
cat /shared/config.txt
cat /shared/data.txt
echo "تم بدء التطبيق"
nginx -g "daemon off;"
volumeMounts:
- name: shared-data
mountPath: /shared
ports:
- containerPort: 80
التفسير:
- تحضر الحاوية التمهيدية الملفات في الحجم المشترك.
- تقرأ الحاوية الرئيسية هذه الملفات بعد البدء.
طبق الـ Pod:
kubectl apply -f pod-init-container.yaml
الخطوة 2.2: التحقق من التنفيذ
تحقق من حالة الـ Pod:
kubectl get pods app-with-init
يجب أن ترى الـ Pod يمر بالمراحل:
Init:0/1(الحاوية التمهيدية قيد التشغيل)PodInitializingRunning(الحاوية الرئيسية بدأت)
تحقق من سجلات الحاوية التمهيدية:
kubectl logs app-with-init -c init-setup
تحقق من سجلات الحاوية الرئيسية:
kubectl logs app-with-init -c app-container
يجب أن ترى أن الحاوية الرئيسية قرأت الملفات التي أنشأتها الحاوية التمهيدية.
الجزء 3: حاوية تمهيدية مع انتظار التبعية
يمكن للحاويات التمهيدية انتظار توفر الخدمات الخارجية.
الخطوة 3.1: إنشاء Pod ينتظر خدمة
أنشئ ملف pod-init-wait.yaml:
# pod-init-wait.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-wait-service
spec:
initContainers:
- name: wait-for-service
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
echo "انتظار توفر الخدمة..."
until nslookup kubernetes.default.svc.cluster.local; do
echo "الخدمة غير متوفرة، انتظار..."
sleep 2
done
echo "الخدمة متوفرة!"
containers:
- name: app-container
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'تم بدء التطبيق بعد التحقق من الخدمة' && sleep 3600"]
طبق الـ Pod:
kubectl apply -f pod-init-wait.yaml
تحقق من سجلات الحاوية التمهيدية:
kubectl logs app-wait-service -c wait-for-service
الجزء 4: نمط Sidecar
الـ Sidecar هو حاوية مساعدة تعمل في نفس الـ Pod مع الحاوية الرئيسية لتوفير وظائف مكملة (التسجيل، المراقبة، البروكسي، إلخ).
الخطوة 4.1: إنشاء Pod مع نمط Sidecar للتسجيل
أنشئ ملف pod-sidecar-logging.yaml:
# pod-sidecar-logging.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-with-sidecar
spec:
volumes:
- name: shared-logs
emptyDir: {} # حجم مشترك للسجلات
containers:
- name: app-container
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
counter=0
while true; do
echo "[$(date)] Log entry $counter from application" >> /logs/app.log
counter=$((counter+1))
sleep 5
done
volumeMounts:
- name: shared-logs
mountPath: /logs
- name: log-collector
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
echo "Sidecar: جمع سجلات التطبيق..."
while true; do
if [ -f /logs/app.log ]; then
echo "=== سجلات جديدة ==="
tail -n 5 /logs/app.log
fi
sleep 10
done
volumeMounts:
- name: shared-logs
mountPath: /logs
readOnly: true # يقرأ الـ sidecar فقط السجلات
التفسير:
- تكتب الحاوية الرئيسية السجلات في حجم مشترك.
- يقرأ الـ sidecar هذه السجلات ويعالجها (هنا، يعرضها).
طبق الـ Pod:
kubectl apply -f pod-sidecar-logging.yaml
الخطوة 4.2: التحقق من نمط Sidecar
تحقق من أن الحاويتين تعملان:
kubectl get pods app-with-sidecar
تحقق من سجلات الحاوية الرئيسية:
kubectl logs app-with-sidecar -c app-container
تحقق من سجلات الـ sidecar:
kubectl logs app-with-sidecar -c log-collector
يجب أن ترى الـ sidecar يعرض السجلات المجمعة من الحاوية الرئيسية.
الجزء 5: Sidecar للمراقبة
لنقم بإنشاء مثال آخر مع sidecar للمراقبة.
الخطوة 5.1: إنشاء Pod مع Sidecar للمراقبة
أنشئ ملف pod-sidecar-monitoring.yaml:
# pod-sidecar-monitoring.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-monitored
spec:
containers:
- name: app-container
image: nginx:1.20
ports:
- containerPort: 80
- name: metrics-collector
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
echo "Sidecar: جمع المقاييس..."
while true; do
# محاكاة جمع المقاييس
echo "[$(date)] مقاييس مجمعة: CPU، Memory، Network"
sleep 15
done
طبق الـ Pod:
kubectl apply -f pod-sidecar-monitoring.yaml
تحقق من سجلات الـ sidecar:
kubectl logs app-monitored -c metrics-collector
الجزء 6: فوائد الأنماط
الحاويات التمهيدية:
- فصل الاهتمامات: التحضير مقابل التنفيذ
- ترتيب مضمون: تعمل قبل الحاويات الرئيسية
- إعادة الاستخدام: نفس الحاوية التمهيدية لعدة Pods
Sidecars:
- التماسك: الحاويات في نفس الـ Pod تشارك الشبكة والتخزين
- المرونة: إضافة وظائف دون تعديل التطبيق الرئيسي
- العزل: يمكن لكل حاوية أن يكون لها مواردها الخاصة
الجزء 7: التنظيف
احذف الـ Pods التي تم إنشاؤها:
kubectl delete pod app-with-init app-wait-service app-with-sidecar app-monitored
ملخص المختبر
في هذا المختبر، استكشفت الحاويات التمهيدية ونمط Sidecar. تعلمت كيفية استخدام الحاويات التمهيدية لتحضير البيئة قبل بدء التطبيقات، وتنفيذ sidecars للتسجيل والمراقبة، وفهم فوائد هذه الأنماط لهندسة التطبيقات.
الخطوات التالية
هذه الوحدة حول الأحمال المتقدمة الآن مكتملة. يمكنك الانتقال إلى الوحدة 8 حول Ingress و Load Balancing.
الوحدة 8: Ingress و Load Balancing
تم إنشاء المختبر في: ديسمبر 2024