0Pricing
DevOps Bootcamp · บทเรียน

ลำดับความสำคัญและการแย่งทรัพยากรของ Pod

เรียนรู้ว่า PriorityClasses ใช้จัดลำดับความสำคัญของ Pod อย่างไร และตัวจัดตารางเวลาสามารถแย่ง Pod ที่มีลำดับความสำคัญต่ำกว่าเพื่อเปิดพื้นที่ให้เวิร์กโหลดสำคัญได้อย่างไร

ลำดับความสำคัญและการแย่งทรัพยากรของ Pod เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ลำดับความสำคัญและการแย่งทรัพยากรของ Pod”

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

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

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

บทเรียน “ลำดับความสำคัญและการแย่งทรัพยากรของ Pod” ใช้เวลานานแค่ไหน

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

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

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

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

  1. คำขอและขีดจำกัดทรัพยากร
  2. ตัวเลือกโหนดและความสอดคล้อง
  3. มลทินและการยอมรับมลทิน
  4. ลำดับความสำคัญและการแย่งทรัพยากรของ Pod
← กลับไปที่ DevOps Bootcamp