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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- StatefulSets สำหรับแอปแบบมีสถานะ
- DaemonSets สำหรับงานเฉพาะโหนด
- ทำความเข้าใจ Kubernetes Operators
- คำจำกัดความทรัพยากรแบบกำหนดเอง (CRDs)