הגדרת DaemonSets של Kubernetes עבור סוכני מערכת

כאשר סוכני מערכת לא מצליחים להתחיל על צמתים חדשים, ניטור מאבד נתונים ופתרון תקלות נמשך זמן רב. אנו מגדירים DaemonSets עבור Node Exporter, Fluent Bit ו-Falco כך שכל מארח מכוסה ללא התערבות ידנית. הצוות שלנו מספק פתרון מלא—מההתקנה ועד לתמיכה שוטפת—המבטיח פעילות יציבה שגדלה עם הקלאסטר שלך.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

במדריך DaemonSet זה ל-Kubernetes עבור סוכני מערכת, אנו מכסים דוגמאות של Node Exporter DaemonSet, Fluent Bit DaemonSet ו-Falco DaemonSet, יחד עם תצורת DaemonSet, tolerations ל-DaemonSet, priorityClassName system-node-critical, updateStrategy ל-DaemonSet, ומדריך שלב-אחר-שלב ל-DaemonSet להקמת סוכן DaemonSet.

תארו לעצמכם: אתם מוסיפים צומת חדש לאשכול, מגדירים autoscaling, אבל Node Exporter לא מתחיל על אותו צומת. המדדים מהצומת הזה חסרים, שאילתות ל-Prometheus כוללות פערי נתונים. הסיבה — DaemonSet ללא tolerations לא ירוץ על צמתים עם ה-taint של control-plane. אובדן הנראות מעלה את ה-MTTR ב-30-50% ויוצר כתמים עיוורים בניטור. לפי הנתונים שלנו, מעל 80% מתקריות הניטור שפתרנו נבעו מחוסר tolerations ב-DaemonSet.

DaemonSet מבטיח ש-pod אחד בדיוק ירוץ על כל צומת באשכול. אנו משתמשים במשאב זה כדי לפרוס סוכני ניטור, אספני לוגים, תוספי CNI ואבטחת runtime — כל מה שחייב לרוץ על כל מארח ללא יוצא מן הכלל. ללא DaemonSet, אתם מסתכנים באובדן נראות על צומת חדש או במהלך תקלה. הפחתת MTTR ב-40-60% וחיסכון בעלויות תפעול הם התוצאה של תצורה נכונה.

למה DaemonSet הוא הבחירה הנכונה היחידה עבור סוכני מערכת

כל סוכן שחייב לאסוף נתונים מכל צומת צריך לרוץ דרך DaemonSet. ניסיון להשתמש ב-ReplicaSet או Deployment מוביל לפערי כיסוי. לדוגמה, במהלך scaling אוטומטי או החלפת צומת, pod חדש עלול שלא להתחיל אם ה-controller לא מסונכרן עם מחזור החיים של הצומת. DaemonSet עדיף על Deployment מבחינת כיסוי: 100% מהצמתים לעומת התפלגות הסתברותית, וזה קריטי לניטור.

Node Exporter (Prometheus) — DaemonSet קלאסי. אוסף מדדי CPU, זיכרון, דיסק ורשת מכל צומת. pod אחד לכל צומת, hostNetwork: true לגישה לממשקי הרשת של המארח, hostPID: true לסטטיסטיקות תהליכים. Fluent Bit לאיסוף לוגים קורא /var/log/containers/*.log דרך נפח hostPath. ללא DaemonSet, לוגים מצומת חדש פשוט לא יגיעו לאחסון המרכזי. Falco — סוכן אבטחת runtime, מזהה execve בלתי צפויים, שינויים ב-/etc/passwd, חיבורי רשת חשודים. צומת ללא Falco הוא כתם עיוור.

איך להבטיח שהסוכן ירוץ על כל צומת

פרמטרים מרכזיים של ה-manifest:

---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9100"
    spec:
      tolerations:
        - key: node-role.kubernetes.io/control-plane
          operator: Exists
          effect: NoSchedule
        - key: node.kubernetes.io/not-ready
          operator: Exists
          effect: NoSchedule
      hostNetwork: true
      hostPID: true
      containers:
        - name: node-exporter
          image: prom/node-exporter:v1.7.0
          args:
            - '--path.rootfs=/host'
          securityContext:
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            runAsUser: 65534
          volumeMounts:
            - name: host-root
              mountPath: /host
              readOnly: true
              mountPropagation: HostToContainer
      volumes:
        - name: host-root
          hostPath:
            path: /
      priorityClassName: system-node-critical

נקודות קריטיות:

  • tolerations — בלעדיהם, ה-DaemonSet לא ירוץ על control-plane (taint apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: monitoring spec: selector: matchLabels: app: node-exporter template: metadata: labels: app: node-exporter annotations: prometheus.io/scrape: "true" prometheus.io/port: "9100" spec: tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule - key: node.kubernetes.io/not-ready operator: Exists effect: NoSchedule hostNetwork: true hostPID: true containers: - name: node-exporter image: prom/node-exporter:v1.7.0 args: - '--path.rootfs=/host' securityContext: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 65534 volumeMounts: - name: host-root mountPath: /host readOnly: true mountPropagation: HostToContainer volumes: - name: host-root hostPath: path: / priorityClassName: system-node-critical ) ועל צמתים בעייתיים (NoSchedule). עבור סוכני ניטור, בדיוק רשימה זו נדרשת.
  • priorityClassName: system-node-critical — הסוכן לא יפונה על ידי pods רגילים במהלך עומס יתר.
  • mountPropagation: HostToContainer — אספן הלוגים יראה קבצי לוג חדשים של קונטיינרים שנוצרו לאחר שהפוד התחיל.

מתי להשתמש ב-OnDelete במקום RollingUpdate

אסטרטגיה התנהגות מתי להשתמש
RollingUpdate מעדכן pods ברצף, ברירת מחדל NotReady סוכנים סטנדרטיים שבהם השבתה קצרה של צומת בודד מקובלת
OnDelete pod חדש מתחיל רק לאחר מחיקה ידנית של הישן סוכנים קריטיים (eBPF, Falco) שבהם נדרשת שליטה מלאה בגרסה

עבור אשכול של 200 צמתים, RollingUpdate עשוי לקחת שעות אם בדיקות הבריאות איטיות. במקרים כאלה, השתמשו ב-maxUnavailable: 1 כדי להאיץ.

איך להגביל DaemonSet לצמתים ספציפיים

לא כל סוכן נדרש על כל הצמתים. לדוגמה, מדדי GPU רק על צמתים עם מאיצים:

nodeSelector: accelerator: nvidia-tesla-k80 

או דרך maxUnavailable: 10% ללוגיקה מורכבת: אזור, סוג instance, תווית מ-provisioner אוטומטי.

תצורת DaemonSet: מדריך שלב-אחר-שלב

  1. קבעו אילו צמתים צריכים להריץ את הסוכן: כל הצמתים או רק אלה עם תוויות ספציפיות.
  2. צרו את manifest של ה-DaemonSet: ציינו tolerations עבור control-plane וצמתים לא מוכנים, וכן priorityClassName.
  3. הגדירו updateStrategy: RollingUpdate עבור סוכנים רגילים, OnDelete עבור קריטיים.
  4. הוסיפו משאבים: requests ו-limits עבור CPU וזיכרון בהתבסס על עומס בדיקות.
  5. בדקו על אשכול staging: ודאו ש-pods מתחילים על כל צומת יעד.
  6. פרסו לייצור באמצעות GitOps (ArgoCD או Flux).

משאבים אופייניים לסוכנים:

סוכן בקשת CPU בקשת זיכרון מגבלת CPU מגבלת זיכרון
Node Exporter 100m 200Mi 500m 500Mi
Fluent Bit 200m 300Mi 1 1Gi
Falco 500m 1Gi 2 2Gi

מקרה בוחן: ביטול כתמים עיוורים בניטור

באשכול ייצור של אחד מלקוחותינו (150 צמתים), גילינו של-DaemonSet של Node Exporter חסרו tolerations עבור control-plane וצמתים לא מוכנים. זה גרם לפער של 30% במדדים במהלך תחזוקת צמתים ותקלות. לאחר שהוספנו tolerations נכונים ו-priorityClassName: system-node-critical, השגנו כיסוי של 100% מהצמתים והפחתנו את ה-MTTR משעות לדקות. השינוי חסך ללקוח כ-$10,000 בחודש בעלויות תפעול על ידי מניעת אובדן כיסוי ניטור והפחתת זמן תגובה לתקריות.

מה כלול בהקמת DaemonSet סוהר

אנו מספקים:

  • ביקורת על מצב האשכול הנוכחי וזיהוי סוכנים שרצים בצורה לא נכונה (ללא tolerations, עם עדיפות נמוכה).
  • פיתוח manifests של DaemonSet עבור המחסנית שלכם: Node Exporter, Fluent Bit, Falco, תוספי CNI, סוכני eBPF מותאמים אישית.
  • תצורה של nodeSelector: accelerator: nvidia-tesla-k80 ו-nodeAffinity תוך התחשבות ב-SLA של השירותים שלכם.
  • אינטגרציה עם מחסנית הניטור הקיימת (Prometheus, Thanos, Grafana).
  • תיעוד ו-runbook להחלפה מהירה של סוכנים ללא אובדן נתונים.
  • הדרכת צוות: איך לעדכן DaemonSet, איך לאבחן בעיות.

למה להפקיד את ההקמה בידי אנשי מקצוע?

אנחנו צוות של מהנדסי DevOps עם ניסיון של 10+ שנים באשכולות ייצור (AWS EKS, GCP GKE, Yandex Cloud, bare-metal). השלמנו מעל 100 פרויקטים בהגירה, אופטימיזציה ותמיכה ב-Kubernetes. DaemonSet הוא פרט בסיסי אך קריטי שאנו מגדירים תוך התחשבות בתשתית, בתקציב ובלוח הזמנים שלכם. צרו קשר להערכה ראשונית של הפרויקט שלכם — קבלו ייעוץ על אופטימיזציה של DaemonSet.

לוח זמנים ותמחור

פריסה של סוכן סטנדרטי (Node Exporter, Fluent Bit) עם tolerations ומשאבים נכונים: כמה שעות, החל מ-$1,500. תצורה של מספר סוכנים עם nodeSelector שונים, עדיפויות ואינטגרציה: יום אחד, החל מ-$2,500. הזמינו תצורה — נציע את הפתרון האופטימלי עבור האשכול שלכם.

משאבים נוספים