0Pricing
Kubernetes Basics · บทเรียน

DaemonSets สำหรับงานเฉพาะโหนด

ใช้ DaemonSets เพื่อเรียกใช้สำเนาของ Pod บนโหนดทั้งหมดหรือโหนดที่เลือกในคลัสเตอร์สำหรับการดำเนินงานระดับคลัสเตอร์

DaemonSets สำหรับงานเฉพาะโหนด เป็นบทเรียน Kubernetes Basics ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kubernetes Basics และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน

DaemonSets คืออะไร

ลองนึกภาพว่าคุณต้องการให้เครื่องมือหรือบริการหนึ่งทำงานบนเซิร์ฟเวอร์ ทุกเครื่อง ในคลัสเตอร์ เช่น ตัวแทนการบันทึกข้อมูลที่รวบรวมบันทึกจากแต่ละเครื่อง

นี่คือหน้าที่ของ DaemonSets! ต่างจาก Deployments ที่มุ่งรักษาจำนวนพ็อดที่กำหนดไว้ให้ทำงานอยู่ ที่ใดที่หนึ่ง ในคลัสเตอร์ DaemonSet จะรับรองว่ามีพ็อดหนึ่งชุดทำงานบนโหนด ทั้งหมด หรือโหนดที่เลือกไว้

การใช้งาน DaemonSet ที่พบบ่อย

DaemonSets เหมาะอย่างยิ่งสำหรับงานที่ต้องทำงานในระดับโหนด ตัวอย่างที่พบบ่อยมีดังนี้:

  • ตัวแทนการบันทึกข้อมูล: เครื่องมืออย่าง Fluentd หรือ Logstash สำหรับรวบรวมบันทึกจากแต่ละโหนด
  • ตัวแทนตรวจสอบ: Prometheus Node Exporter สำหรับรวบรวมตัวชี้วัดจากเซิร์ฟเวอร์ทุกเครื่อง
  • ดีมอนพื้นที่จัดเก็บ: บริการอย่าง GlusterFS หรือ Ceph ที่จัดเตรียมพื้นที่จัดเก็บแบบกระจายบนแต่ละโหนด
  • พร็อกซีเครือข่าย: Kube-proxy ของ Kubernetes เองทำงานในรูปแบบ DaemonSet เพื่อจัดการกฎเครือข่าย

Manifest พื้นฐานของ 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

มาดูรายละเอียดส่วนสำคัญของ manifest ของ DaemonSet กัน:

  • kind: DaemonSet: ระบุให้ Kubernetes ทราบว่าเราต้องการจัดการพ็อดเฉพาะโหนด
  • spec.selector: สำคัญอย่างยิ่ง! ส่วนนี้กำหนดวิธีที่ DaemonSet ใช้ค้นหาและจัดการพ็อดผ่านป้ายกำกับ
  • spec.template: นี่คือคำจำกัดความของพ็อดเอง ซึ่งเกือบเหมือนกับแม่แบบพ็อดใน Deployment โดยอธิบายคอนเทนเนอร์ โวลุม และการตั้งค่าอื่น ๆ สำหรับพ็อดที่จะทำงานบนแต่ละโหนด

การนำไปใช้งานบนโหนดทั้งหมด

นี่คือตัวอย่าง 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 จะรับรองว่ามีพ็อดถูกจัดตารางเวลาไว้บนทุกโหนดที่ตรงตามเกณฑ์ของ DaemonSet

ตรวจสอบความพร้อมของ DaemonSet

หลังจากนำไปใช้แล้ว คุณสามารถตรวจสอบสถานะของ DaemonSet และพ็อดที่ DaemonSet สร้างขึ้นได้:

  • หากต้องการดู DaemonSet: kubectl get ds
  • หากต้องการดูพ็อดแต่ละตัวที่ทำงานบนแต่ละโหนด: kubectl get pods -l app=node-hello -o wide

ตัวเลือก -o wide ช่วยให้คุณเห็นว่าพ็อดแต่ละตัวถูกจัดตารางเวลาไว้บนโหนดใด

DaemonSets บนโหนดที่เลือก

หากคุณต้องการให้ DaemonSet ทำงานบนโหนดเพียงบางส่วนเท่านั้นจะทำอย่างไร เช่น เฉพาะโหนดที่มี GPU หรือโหนดที่จัดไว้สำหรับพื้นที่จัดเก็บ

คุณทำได้โดยใช้ nodeSelector ฟิลด์นี้ใน spec ของพ็อด ซึ่งอยู่ภายในแม่แบบของ DaemonSet ช่วยให้คุณระบุป้ายกำกับโหนดที่โหนดนั้นต้องมี เพื่อให้พ็อดถูกจัดตารางเวลาไว้ที่โหนดดังกล่าว

การใช้ตัวเลือกโหนดใน 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: ประเด็นสำคัญ

ทำได้ดีมาก! คุณได้เรียนรู้เกี่ยวกับ Kubernetes DaemonSets สำเร็จแล้ว

  • DaemonSets รับรองว่าพ็อดจะทำงานบนโหนดที่มีคุณสมบัติเหมาะสมทุกโหนด
  • มีความสำคัญต่อ การดำเนินงานระดับโหนด เช่น ตัวแทนการบันทึกข้อมูล การตรวจสอบ และพื้นที่จัดเก็บ
  • คุณสามารถใช้ nodeSelector เพื่อเลือกโหนดที่ต้องการโดยเฉพาะ
  • DaemonSets กำหนดด้วย kind: DaemonSet และใช้แม่แบบพ็อด เช่นเดียวกับ Deployments

ถัดไป คุณจะได้เรียนรู้ StatefulSets สำหรับจัดการแอปพลิเคชันที่มีสถานะ!

คำถามที่พบบ่อย

บทเรียน “DaemonSets สำหรับงานเฉพาะโหนด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “DaemonSets สำหรับงานเฉพาะโหนด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kubernetes Basics ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “DaemonSets สำหรับงานเฉพาะโหนด”

ใช้ DaemonSets เพื่อเรียกใช้สำเนาของ Pod บนโหนดทั้งหมดหรือโหนดที่เลือกในคลัสเตอร์สำหรับการดำเนินงานระดับคลัสเตอร์ คุณปฏิบัติ Kubernetes Basics ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kubernetes Basics หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kubernetes Basics บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “DaemonSets สำหรับงานเฉพาะโหนด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kubernetes Basics นี้ได้ไหม

ได้ บทเรียน Kubernetes Basics ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. StatefulSets สำหรับแอปแบบมีสถานะ
  2. DaemonSets สำหรับงานเฉพาะโหนด
  3. ทำความเข้าใจ Kubernetes Operators
  4. คำจำกัดความทรัพยากรแบบกำหนดเอง (CRDs)
← กลับไปที่ Kubernetes Basics