ลำดับความสำคัญและการแย่งทรัพยากรของ Pod
เรียนรู้ว่า PriorityClasses ใช้จัดลำดับความสำคัญของ Pod อย่างไร และตัวจัดตารางเวลาสามารถแย่ง Pod ที่มีลำดับความสำคัญต่ำกว่าเพื่อเปิดพื้นที่ให้เวิร์กโหลดสำคัญได้อย่างไร
ลำดับความสำคัญและการแย่งทรัพยากรของ Pod เป็นบทเรียน Kubernetes Basics ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kubernetes Basics และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน
พ็อดไม่ได้มีความสำคัญเท่ากันทั้งหมด
เมื่อคลัสเตอร์มีทรัพยากรเต็ม เวิร์กโหลดบางอย่างย่อมมีความสำคัญมากกว่าอย่างอื่น ลำดับความสำคัญของพ็อดช่วยให้คุณบอก Kubernetes ได้ว่าพ็อดใดควรได้เปรียบในการแย่งชิงทรัพยากร
PriorityClass คืออะไร
PriorityClass คือออบเจ็กต์ระดับทั้งคลัสเตอร์ที่จับคู่ชื่อกับค่าจำนวนเต็ม ตัวเลขที่สูงกว่าหมายถึงลำดับความสำคัญที่สูงกว่า
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: 'For critical production workloads'การกำหนดลำดับความสำคัญให้พ็อด
พ็อดจะเลือกใช้คลาสผ่าน priorityClassName ตัวจัดตารางเวลาจะอ่านค่าตัวเลขจากคลาสที่อ้างอิง
apiVersion: v1
kind: Pod
metadata:
name: critical-app
spec:
priorityClassName: high-priority
containers:
- name: app
image: myapp:1.0ลำดับความสำคัญส่งผลต่อการจัดตารางเวลาอย่างไร
เมื่อมีพ็อดหลายรายการรอดำเนินการ ตัวจัดตารางเวลาจะพยายามจัดวางพ็อดที่มีลำดับความสำคัญสูงกว่าก่อน ลำดับความสำคัญมีผลต่อลำดับที่พ็อดจะได้รับการจัดตารางเวลา
การแย่งชิงทรัพยากรล่วงหน้าคืออะไร
หากไม่สามารถจัดตารางเวลาพ็อดที่มีลำดับความสำคัญสูงได้เนื่องจากคลัสเตอร์เต็ม ตัวจัดตารางเวลาอาจแย่งชิงทรัพยากรล่วงหน้า (ขับออก) พ็อดที่มีลำดับความสำคัญต่ำกว่าเพื่อเพิ่มพื้นที่ว่าง
พ็อดที่ถูกขับออกจะกลับไปอยู่ในสถานะรอดำเนินการ และอาจได้รับการจัดตารางเวลาใหม่ที่อื่น
การแย่งชิงทรัพยากรล่วงหน้าในการทำงาน
ลองจินตนาการว่าโหนดหนึ่งเต็มไปด้วยพ็อดที่มีลำดับความสำคัญ 100 แล้วมีพ็อดที่มีลำดับความสำคัญ 1000000 เข้ามา ตัวจัดตารางเวลาสามารถนำพ็อดที่มีลำดับความสำคัญต่ำออกมากพอ เพื่อให้พ็อดสำคัญเข้ามาได้
kubectl get events --field-selector reason=Preempted
# Pod default/batch-job was preempted by critical-appการปิดใช้การแย่งชิงทรัพยากรล่วงหน้า
PriorityClass สามารถเลือกไม่แย่งชิงทรัพยากรจากรายการอื่นได้ด้วย preemptionPolicy: Never พ็อดประเภทนี้ยังคงได้รับการจัดตารางเวลาตามลำดับความสำคัญ แต่จะไม่ขับพ็อดใดออก
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-no-preempt
value: 1000000
preemptionPolicy: Neverค่าเริ่มต้นส่วนกลาง
การตั้งค่า globalDefault: true ให้กับ PriorityClass จะนำค่าของคลาสนั้นไปใช้กับพ็อดใดก็ตามที่ไม่ได้ระบุค่าเอง มีเพียงคลาสเดียวเท่านั้นที่เป็นค่าเริ่มต้นส่วนกลางได้
คลาสระบบในตัว
Kubernetes มาพร้อมกับคลาสที่สงวนไว้ เช่น system-cluster-critical และ system-node-critical สำหรับองค์ประกอบที่จำเป็น อย่านำคลาสเหล่านี้กลับมาใช้กับแอปของคุณ
kubectl get priorityclass
# system-node-critical 2000001000
# system-cluster-critical 2000000000แนวทางปฏิบัติที่ดี
- กำหนดระดับที่ชัดเจนจำนวนไม่มาก (เช่น สำคัญ ปกติ งานชุด)
- ใช้การแย่งชิงทรัพยากรล่วงหน้าเฉพาะกับเวิร์กโหลดที่สำคัญอย่างแท้จริง
- ใช้ร่วมกับคำขอทรัพยากร เพื่อให้การตัดสินใจจัดตารางเวลาถูกต้อง
- หลีกเลี่ยงการกำหนดให้ทุกอย่างมีลำดับความสำคัญสูง เพราะจะทำให้จุดประสงค์ของกลไกนี้หมดไป
ลำดับความสำคัญเทียบกับคุณภาพการให้บริการ
ลำดับความสำคัญควบคุมการจัดตารางเวลาและการแย่งชิงทรัพยากรล่วงหน้า ส่วนคลาสคุณภาพการให้บริการ (จากคำขอและขีดจำกัด) ควบคุมการขับออกเมื่อโหนดมีแรงกดดันด้านทรัพยากร ทั้งสองเกี่ยวข้องกัน แต่เป็นกลไกที่แยกจากกัน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเรื่องการแย่งชิงทรัพยากรล่วงหน้า
สรุปทบทวน
คุณได้เรียนรู้ว่า PriorityClass จัดอันดับพ็อดด้วยค่าจำนวนเต็ม ซึ่งมีผลต่อลำดับการจัดตารางเวลา การแย่งชิงทรัพยากรล่วงหน้าช่วยให้พ็อดที่สำคัญขับพ็อดที่มีลำดับความสำคัญต่ำกว่าออกได้เมื่อคลัสเตอร์เต็ม ใช้ระดับที่ชัดเจนจำนวนไม่มาก และใช้ลำดับความสำคัญร่วมกับคำขอทรัพยากรที่ถูกต้อง
คำถามที่พบบ่อย
บทเรียน “ลำดับความสำคัญและการแย่งทรัพยากรของ Pod” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ลำดับความสำคัญและการแย่งทรัพยากรของ Pod” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kubernetes Basics ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kubernetes Basics มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ลำดับความสำคัญและการแย่งทรัพยากรของ Pod”
เรียนรู้ว่า PriorityClasses ใช้จัดลำดับความสำคัญของ Pod อย่างไร และตัวจัดตารางเวลาสามารถแย่ง Pod ที่มีลำดับความสำคัญต่ำกว่าเพื่อเปิดพื้นที่ให้เวิร์กโหลดสำคัญได้อย่างไร คุณปฏิบัติ Kubernetes Basics ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kubernetes Basics หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kubernetes Basics บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ลำดับความสำคัญและการแย่งทรัพยากรของ Pod” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kubernetes Basics นี้ได้ไหม
ได้ บทเรียน Kubernetes Basics ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คำขอและขีดจำกัดทรัพยากร
- ตัวเลือกโหนดและความสอดคล้อง
- มลทินและการยอมรับมลทิน
- ลำดับความสำคัญและการแย่งทรัพยากรของ Pod