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

ตัวเลือกโหนดและความสอดคล้อง

ควบคุมตำแหน่งที่จัดตารางให้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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