المختبر 7.2 - DaemonSet للمراقبة
أهداف المختبر
في نهاية هذا المختبر، ستكون قادرًا على:
- فهم مفهوم DaemonSet.
- إنشاء DaemonSet لنشر وكيل مراقبة.
- التحقق من أن DaemonSet يعمل على جميع العقد.
- فهم حالات استخدام DaemonSets.
- إدارة DaemonSets (التحديث، الحذف).
المدة المقدرة
45-60 دقيقة
المتطلبات الأساسية
- تثبيت وتكوين kubectl.
- عنقود Kubernetes محلية تعمل (minikube أو kind).
- معرفة بـ DaemonSets (الفصل 7.2).
الجزء 1: فهم DaemonSets
يضمن DaemonSet تشغيل نسخة من Pod على كل عقدة (أو على مجموعة فرعية من العقد). إنه مثالي لـ:
- وكلاء المراقبة (مثل: node-exporter)
- وكلاء تسجيل الأحداث (مثل: Fluentd، Fluent Bit)
- وكلاء الأمان
- مجمعي المقاييس
الخطوة 1.1: التحقق من العقد
تحقق من العقد في مجموعتك:
kubectl get nodes
بالنسبة لمجموعة محلية (minikube/kind)، سيكون لديك عادة عقدة واحدة.
الجزء 2: إنشاء DaemonSet بسيط
سنقوم بإنشاء DaemonSet يحاكي وكيل مراقبة بسيط.
الخطوة 2.1: إنشاء DaemonSet
قم بإنشاء ملف daemonset-monitoring.yaml:
# daemonset-monitoring.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-monitor
labels:
app: node-monitor
spec:
selector:
matchLabels:
app: node-monitor
template:
metadata:
labels:
app: node-monitor
spec:
containers:
- name: monitor-agent
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date): Node $(hostname) - CPU: $(cat /proc/loadavg | awk '{print $1}') - Memory: $(free -m | grep Mem | awk '{print $3}')MB used"
sleep 30
done
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
volumeMounts:
- name: proc
mountPath: /proc
readOnly: true
- name: sys
mountPath: /sys
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
التفسير:
- يقوم DaemonSet بإنشاء Pod على كل عقدة.
- يقوم الحاوية بتركيب
/procو/sysمن العقدة للوصول إلى مقاييس النظام. - تعرض الحاوية بشكل دوري معلومات عن العقدة.
قم بتطبيق DaemonSet:
kubectl apply -f daemonset-monitoring.yaml
الجزء 3: التحقق من DaemonSet
الخطوة 3.1: التحقق من الـ Pods التي تم إنشاؤها
تحقق من أن الـ Pods تم إنشاؤها:
kubectl get pods -l app=node-monitor
يجب أن ترى Pod لكل عقدة. بالنسبة لمجموعة تحتوي على عقدة واحدة، سترى Pod واحدة.
تحقق من العقد التي تعمل عليها الـ Pods:
kubectl get pods -l app=node-monitor -o wide
الخطوة 3.2: التحقق من حالة DaemonSet
تحقق من حالة DaemonSet:
kubectl get daemonset node-monitor
# أو
kubectl get ds node-monitor
يجب أن ترى:
DESIRED: عدد العقد التي يجب أن يعمل عليها الـ PodCURRENT: عدد الـ Pods التي تم إنشاؤها حاليًاREADY: عدد الـ Pods الجاهزةUP-TO-DATE: عدد الـ Pods المحدثة مع القالبAVAILABLE: عدد الـ Pods المتاحة
الخطوة 3.3: التحقق من السجلات
تحقق من سجلات Pod لرؤية المقاييس التي تم جمعها:
kubectl logs -l app=node-monitor --tail=10
يجب أن ترى رسائل دورية تحتوي على معلومات العقدة.
الجزء 4: اختبار إضافة عقدة (محاكاة)
إذا كان لديك عدة عقد، فإن DaemonSet سيقوم تلقائيًا بإنشاء Pod على كل عقدة جديدة. بالنسبة لمجموعة محلية، سنقوم بمحاكاة ذلك عن طريق التحقق من السلوك.
الخطوة 4.1: التحقق من السلوك
يقوم DaemonSet بمراقبة العقد تلقائيًا. إذا تمت إضافة عقدة جديدة إلى المجموعة، سيتم إنشاء Pod تلقائيًا على هذه العقدة.
تحقق من وصف DaemonSet لرؤية التفاصيل:
kubectl describe daemonset node-monitor
الجزء 5: تحديث DaemonSet
الخطوة 5.1: تحديث الصورة
قم بتعديل DaemonSet لتغيير تردد الجمع:
# daemonset-monitoring-updated.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-monitor
labels:
app: node-monitor
spec:
selector:
matchLabels:
app: node-monitor
template:
metadata:
labels:
app: node-monitor
spec:
containers:
- name: monitor-agent
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date): [UPDATED] Node $(hostname) - Monitoring actif"
sleep 10 # تم تغييره من 30 إلى 10 ثواني
done
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
قم بتطبيق التحديث:
kubectl apply -f daemonset-monitoring-updated.yaml
الخطوة 5.2: مراقبة التحديث
يتم تحديث Pods الخاصة بـ DaemonSet بطريقة rolling (واحدة تلو الأخرى):
kubectl get pods -l app=node-monitor -w
سترى الـ Pods القديمة يتم حذفها والجديدة يتم إنشاؤها.
تحقق من السجلات الجديدة:
kubectl logs -l app=node-monitor --tail=5
يجب أن ترى الرسائل مع "[UPDATED]" وتردد أعلى.
الجزء 6: Node Selectors و Taints
الخطوة 6.1: استخدام Node Selector (اختياري)
يمكنك تحديد العقد التي يعمل عليها DaemonSet باستخدام nodeSelector:
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: linux # يعمل فقط على العقد Linux
containers:
# ...
الخطوة 6.2: تحمل Taints (اختياري)
إذا كانت بعض العقد تحتوي على taints، يمكنك إضافة tolerations إلى DaemonSet:
spec:
template:
spec:
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
containers:
# ...
الجزء 7: التنظيف
قم بحذف DaemonSet:
kubectl delete daemonset node-monitor
# أو
kubectl delete -f daemonset-monitoring.yaml
سيتم حذف جميع الـ Pods التي تم إنشاؤها بواسطة DaemonSet تلقائيًا.
ملخص المختبر
في هذا المختبر، استكشفت DaemonSets للمراقبة. تعلمت كيفية إنشاء DaemonSet يعمل على جميع العقد، التحقق من سلوكه، تحديثه، وفهم حالات الاستخدام النموذجية (المراقبة، التسجيل، الأمان).
الخطوات التالية
المختبر التالي سيعرض لك كيفية استخدام Jobs و CronJobs لتنفيذ المهام الفورية والمجدولة.
المختبر 7.3: Jobs و CronJobs
تم إنشاء المختبر في: ديسمبر 2024