DaemonSets للمهام الخاصة بالعقد
استخدم DaemonSets لتشغيل نسخة من وحدة على جميع العقد أو العقد المحددة في عنقودك لتنفيذ عمليات على مستوى العنقود
DaemonSets للمهام الخاصة بالعقد درس مجاني في Kubernetes Basics على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kubernetes Basics، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kubernetes Basics 4 دروس في المجموع.
ما هي DaemonSets؟
تخيلوا أنكم بحاجة إلى تشغيل أداة أو خدمة معينة على كل خادم في عنقودكم. ومن أمثلتها وكيل تسجيل يجمع السجلات من كل جهاز.
هنا يأتي دور DaemonSets! فعلى عكس Deployments، التي تهدف إلى إبقاء عدد معين من Pods قيد التشغيل في مكان ما في العنقود، تضمن DaemonSet تشغيل نسخة من Pod على جميع العقد (أو العقد المحددة).
الاستخدامات الشائعة لـ DaemonSets
تُعد DaemonSets مثالية للمهام التي يجب تشغيلها على مستوى العقدة. إليكم بعض الأمثلة الشائعة:
- وكلاء التسجيل: أدوات مثل Fluentd أو Logstash لجمع السجلات من كل عقدة.
- وكلاء المراقبة: Prometheus Node Exporter لجمع المقاييس من كل خادم.
- خدمات التخزين: خدمات مثل GlusterFS أو Ceph التي توفر تخزينًا موزعًا على كل عقدة.
- وكلاء الشبكة: يعمل Kube-proxy الخاص بـ Kubernetes كـ DaemonSet لإدارة قواعد الشبكة.
بيان DaemonSet الأساسي
يشبه تعريف DaemonSet تعريف Deployment إلى حد كبير. ويتمثل الفرق الأساسي في kind: DaemonSet. لنلقِ نظرة على بنية أساسية:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemonset-app
template:
metadata:
labels:
app: my-daemonset-app
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo 'Hello from DaemonSet on node $(NODE_NAME)'; sleep 3600"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameالأجزاء الأساسية من YAML
لنقسّم الأقسام المهمة في بيان DaemonSet الخاص بنا:
kind: DaemonSet: يخبر هذا Kubernetes بأننا نريد إدارة Pods الخاصة بعقد معينة.spec.selector: ضروري! فهو يحدد كيفية عثور DaemonSet على Pods الخاصة به وإدارتها باستخدام التسميات.spec.template: هذا هو تعريف Pod نفسه. وهو مطابق تقريبًا لقالب Pod الذي قد تجدونه في Deployment. ويصف الحاويات ووحدات التخزين والإعدادات الأخرى لـ Pod التي ستعمل على كل عقدة.
النشر على جميع العقد
إليكم DaemonSet بسيطًا يشغّل حاوية busybox على كل عقدة مؤهلة. وستطبع رسالة توضح العقدة التي تعمل عليها.
يُعد هذا نمطًا شائعًا للوكلاء على مستوى العنقود.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-hello-daemon
spec:
selector:
matchLabels:
app: node-hello
template:
metadata:
labels:
app: node-hello
spec:
containers:
- name: hello-container
image: busybox
command: ["sh", "-c", "while true; do echo 'Hello from node: $(NODE_NAME)'; sleep 5; done"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameتشغيل DaemonSet الخاص بكم
لإنشاء DaemonSet في عنقود Kubernetes الخاص بكم، استخدموا الأمر المألوف kubectl apply مع ملف YAML الذي رأيتموه للتو:
kubectl apply -f node-hello-daemonset.yaml
بعد ذلك، سيضمن Kubernetes جدولة Pod على كل عقدة تطابق معايير DaemonSet.
التحقق من سلامة DaemonSet
بعد التطبيق، يمكنكم التحقق من حالة DaemonSet والـ Pods التي أنشأها:
- لعرض DaemonSet:
kubectl get ds - لعرض Pods الفردية التي تعمل على كل عقدة:
kubectl get pods -l app=node-hello -o wide
يساعدكم الخيار -o wide على معرفة العقدة التي جرى جدولة كل Pod عليها.
DaemonSets على عقد محددة
ماذا لو أردتم تشغيل DaemonSet على مجموعة فرعية من عقدكم فقط؟ مثلًا، على العقد التي تحتوي على وحدة معالجة رسومات (GPU)، أو العقد المخصصة للتخزين.
يمكنكم تحقيق ذلك باستخدام nodeSelector. يتيح لكم هذا الحقل في spec الخاصة بـ Pod (داخل قالب DaemonSet) تحديد تسميات العقد التي يجب أن تحملها العقدة حتى تتم جدولة Pod عليها.
استخدام محددات العقد في YAML
لنعدّل DaemonSet السابق بحيث يعمل فقط على العقد التي تحمل التسمية disktype: ssd. سيتعين عليكم أولًا وضع تسمية على العقد، مثلًا باستخدام kubectl label node <node-name> disktype=ssd.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ssd-monitor-daemon
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector:
disktype: ssd # Only runs on nodes with this label
containers:
- name: monitor-container
image: busybox
command: ["sh", "-c", "while true; do echo 'Monitoring SSD on node: $(NODE_NAME)'; sleep 10; done"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameإمكانات DaemonSet
لقد تعلمتم كيفية عمل DaemonSets. لِنختبر مدى استيعابكم!
DaemonSets: أهم النقاط
أحسنتم! لقد تعلمتم بنجاح عن DaemonSets في Kubernetes.
- تضمن DaemonSets تشغيل Pod على كل عقدة مؤهلة.
- وهي مهمة لعمليات مستوى العقدة مثل وكلاء التسجيل والمراقبة والتخزين.
- يمكنكم استخدام
nodeSelectorلاستهداف عقد محددة. - تُعرّف DaemonSets باستخدام
kind: DaemonSetوتستخدم قالب Pod، على غرار Deployments.
بعد ذلك، ستستكشفون StatefulSets لإدارة التطبيقات ذات الحالة!
الأسئلة الشائعة
هل درس «DaemonSets للمهام الخاصة بالعقد» مجاني؟
نعم — نص درس «DaemonSets للمهام الخاصة بالعقد» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kubernetes Basics، انتقل إلى CoddyKit PRO. تتضمن دورة Kubernetes Basics 4 دروس في المجموع.
ماذا ستتعلم في «DaemonSets للمهام الخاصة بالعقد»؟
استخدم DaemonSets لتشغيل نسخة من وحدة على جميع العقد أو العقد المحددة في عنقودك لتنفيذ عمليات على مستوى العنقود تتمرن على Kubernetes Basics مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kubernetes Basics؟
لا تُشترط خبرة سابقة. Kubernetes Basics على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «DaemonSets للمهام الخاصة بالعقد»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kubernetes Basics هذا؟
نعم. كل درس في Kubernetes Basics يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- StatefulSets للتطبيقات ذات الحالة
- DaemonSets للمهام الخاصة بالعقد
- فهم Kubernetes Operators
- تعريفات الموارد المخصّصة (CRDs)