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

المختبر 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: عدد العقد التي يجب أن يعمل عليها الـ Pod
  • CURRENT: عدد الـ 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