ตัวเลือกโหนดและความสอดคล้อง
ควบคุมตำแหน่งที่จัดตารางให้ Pod ทำงานโดยใช้ตัวเลือกโหนด และกฎความสอดคล้องของโหนดกับ Pod ที่สื่อความหมายได้มากขึ้น
ตัวเลือกโหนดและความสอดคล้อง เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
ควบคุมตำแหน่งที่พ็อดทำงาน
โดยค่าเริ่มต้น Kubernetes จะจัดตารางเวลาพ็อดลงบนโหนดใดก็ได้ที่พร้อมใช้งาน แต่ถ้าคุณต้องการควบคุมมากขึ้นจะทำอย่างไร
บางครั้งคุณจำเป็นต้องให้พ็อดทำงานบนโหนดที่ระบุ โหนดเหล่านั้นอาจมีฮาร์ดแวร์พิเศษ ใบอนุญาตใช้งาน หรืออยู่ในโซนที่พร้อมใช้งานเฉพาะ
บทเรียนนี้จะอธิบายวิธีชี้นำตัวจัดตารางเวลาของ Kubernetes โดยใช้ตัวเลือกโหนดและความใกล้ชิดกับโหนด
เหตุใดจึงต้องชี้นำตัวจัดตารางเวลา
ลองนึกภาพว่าคุณมีพ็อดฐานข้อมูลที่ต้องทำงานบนโหนดซึ่งมี SSD ประสิทธิภาพสูง หรือมีแอปพลิเคชันที่ใช้ GPU อย่างหนักและต้องการฮาร์ดแวร์เฉพาะ
คุณอาจต้องการให้พ็อดบางประเภทอยู่ห่างจากกันเพื่อความทนทานต่อข้อผิดพลาด หรือรับรองว่าพ็อดจะทำงานบนโหนดที่ใช้ระบบปฏิบัติการเฉพาะ
Kubernetes มีเครื่องมือสำหรับระบุความต้องการด้านการจัดตารางเวลาเหล่านี้
โหนดมีป้ายกำกับ
ก่อนที่เราจะบอกพ็อดว่าจะไปที่ใด โหนดต้องมีข้อมูลระบุตัวตนก่อน Kubernetes ใช้ป้ายกำกับเพื่อระบุโหนดตามคุณลักษณะของโหนด
- ป้ายกำกับเป็นคู่คีย์-ค่า เช่น
disk=ssdหรือgpu=true - คุณสามารถเพิ่มป้ายกำกับที่กำหนดเองให้โหนดได้โดยใช้
kubectl label nodes <node-name> <key>=<value> - ป้ายกำกับเหล่านี้ใช้กำหนดเป้าหมายโหนดที่ต้องการให้พ็อดไปทำงาน
ตัวเลือกโหนด: การจับคู่แบบง่าย
วิธีที่ง่ายที่สุดในการจำกัดพ็อดให้อยู่บนกลุ่มโหนดที่ระบุคือการใช้ nodeSelector
นี่คือฟิลด์ในข้อกำหนดของพ็อดที่รับแผนที่ของคู่คีย์-ค่า พ็อดจะถูกจัดตารางเวลาบนโหนดที่มีป้ายกำกับเหล่านั้นครบทั้งหมดเท่านั้น
คล้ายกับการบอกว่า “ฉันต้องการโหนดที่ตรงตามนี้ทุกประการ”
ตัวเลือกโหนดในการทำงาน
สมมติว่าเรามีโหนดที่มีป้ายกำกับ disk=ssd ต่อไปนี้เป็นวิธีทำให้พ็อดทำงานเฉพาะบนโหนดเหล่านั้น:
apiVersion: v1
kind: Pod
metadata:
name: ssd-app
spec:
containers:
- name: my-container
image: nginx
nodeSelector:
disk: ssdความใกล้ชิดกับโหนด: การจับคู่ขั้นสูง
แม้ nodeSelector จะใช้งานตรงไปตรงมา แต่ก็มีเงื่อนไขที่เข้มงวดมาก หากคุณต้องการโหนดที่ “ต้องการเป็นพิเศษ” หรือกฎการจับคู่ที่ซับซ้อนขึ้นจะทำอย่างไร
ความใกล้ชิดกับโหนดมีความยืดหยุ่นมากกว่า ช่วยให้คุณระบุข้อกำหนดแบบ “ผ่อนปรน” หรือ “เข้มงวด” สำหรับการให้พ็อดไปทำงานบนโหนดที่มีป้ายกำกับเฉพาะ
ฟีเจอร์นี้ใช้ไวยากรณ์ที่ทรงพลังกว่า พร้อมตัวดำเนินการ เช่น In, NotIn, Exists, DoesNotExist, Gt, Lt
ความใกล้ชิดแบบจำเป็นและแบบต้องการ
ความใกล้ชิดกับโหนดมีสองประเภทหลัก:
requiredDuringSchedulingIgnoredDuringExecution: พ็อดต้องถูกจัดตารางเวลาบนโหนดที่ตรงตามกฎ หากไม่มีโหนดดังกล่าว พ็อดจะไม่ถูกจัดตารางเวลาpreferredDuringSchedulingIgnoredDuringExecution: ตัวจัดตารางเวลาจะพยายามหาโหนดที่ตรงตามกฎ แต่หากไม่มีโหนดที่พร้อมใช้งาน ก็ยังจัดตารางเวลาพ็อดบนโหนดอื่นได้ วิธีนี้เป็นแนวทางแบบ “พยายามให้ดีที่สุด”
ความใกล้ชิดกับโหนดแบบจำเป็น
ต่อไปนี้คือพ็อดที่ต้องการโหนดซึ่งมีป้ายกำกับ env=production หากไม่มีโหนดดังกล่าว พ็อดจะยังคงรอการจัดตารางเวลา
apiVersion: v1
kind: Pod
metadata:
name: prod-app
spec:
containers:
- name: my-container
image: httpd
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- productionความใกล้ชิดกับพ็อด: พ็อดอื่นก็มีความสำคัญ
ถ้าคุณต้องการจัดตารางเวลาพ็อดตามตำแหน่งที่พ็อดอื่นกำลังทำงานอยู่จะทำอย่างไร
- ความใกล้ชิดกับพ็อด: ดึงพ็อดไปยังโหนดที่มีพ็อดอื่นซึ่งมีป้ายกำกับเฉพาะกำลังทำงานอยู่แล้ว เหมาะสำหรับวางบริการที่สื่อสารกันบ่อยไว้ในตำแหน่งเดียวกัน
- การหลีกเลี่ยงความใกล้ชิดกับพ็อด: ผลักพ็อดออกจากโหนดที่มีพ็อดอื่นซึ่งมีป้ายกำกับเฉพาะกำลังทำงานอยู่ เหมาะสำหรับกระจายสำเนาไปยังโหนดต่าง ๆ เพื่อให้พร้อมใช้งานสูง
การหลีกเลี่ยงความใกล้ชิดกับพ็อดในทางปฏิบัติ
ไฟล์กำหนดค่านี้รับรองว่าจะไม่มีพ็อดสองพ็อดที่มีป้ายกำกับ app=my-web ถูกจัดตารางเวลาบนโหนดเดียวกัน วิธีนี้ช่วยเพิ่มความทนทานต่อข้อผิดพลาด
topologyKey ระบุขอบเขตที่ใช้กับการหลีกเลี่ยงความใกล้ชิด เช่น โหนดหรือโซน
apiVersion: v1
kind: Pod
metadata:
name: web-app-pod
labels:
app: my-web
spec:
containers:
- name: web-container
image: busybox
command: ["sh", "-c", "echo 'Hello from web-app'; sleep 3600"]
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: my-web
topologyKey: "kubernetes.io/hostname"ทดสอบความรู้
คุณต้องการรับรองว่าพ็อดฐานข้อมูลสำคัญของคุณต้องไม่ถูกจัดตารางเวลาบนโหนดที่มีป้ายกำกับ zone=dev คุณจะใช้กฎการจัดตารางเวลาประเภทใดสำหรับการยกเว้นอย่างเข้มงวดตามป้ายกำกับของโหนด
สรุป: การควบคุมการจัดตารางเวลา
ทำได้ดีมาก คุณได้เรียนรู้วิธีที่ทรงพลังในการควบคุมตำแหน่งที่พ็อดทำงาน:
- ป้ายกำกับโหนด: คู่คีย์-ค่าที่ระบุคุณลักษณะของโหนด
- ตัวเลือกโหนด: การจับคู่แบบง่ายและเข้มงวด เพื่อจัดตารางเวลาพ็อดบนโหนดที่มีป้ายกำกับเฉพาะ
- ความใกล้ชิดกับโหนด: กฎที่ยืดหยุ่นกว่า (แบบจำเป็นหรือแบบต้องการ) สำหรับเลือกโหนด โดยใช้ตัวดำเนินการ
- ความใกล้ชิดหรือการหลีกเลี่ยงความใกล้ชิดกับพ็อด: การวางพ็อดไว้ด้วยกันหรือแยกออกจากกันตามตำแหน่งของพ็อดอื่น
เครื่องมือเหล่านี้มีความสำคัญต่อการเพิ่มประสิทธิภาพการใช้ทรัพยากร การรับรองความทนทานต่อข้อผิดพลาด และการตอบสนองความต้องการเฉพาะของแอปพลิเคชัน
คำถามที่พบบ่อย
บทเรียน “ตัวเลือกโหนดและความสอดคล้อง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวเลือกโหนดและความสอดคล้อง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวเลือกโหนดและความสอดคล้อง”
ควบคุมตำแหน่งที่จัดตารางให้ Pod ทำงานโดยใช้ตัวเลือกโหนด และกฎความสอดคล้องของโหนดกับ Pod ที่สื่อความหมายได้มากขึ้น คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวเลือกโหนดและความสอดคล้อง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คำขอและขีดจำกัดทรัพยากร
- ตัวเลือกโหนดและความสอดคล้อง
- มลทินและการยอมรับมลทิน
- ลำดับความสำคัญและการแย่งทรัพยากรของ Pod