การปรับสเกลอัตโนมัติสามระดับใน Kubernetes: วิธีใช้งานอย่างมีประสิทธิภาพ

การปรับสเกลอัตโนมัติสามระดับใน Kubernetes: วิธีใช้งานอย่างมีประสิทธิภาพ
หากต้องการเชี่ยวชาญ Kubernetes อย่างเต็มรูปแบบ คุณจำเป็นต้องรู้วิธีต่างๆ ในการปรับขนาดทรัพยากรคลัสเตอร์: โดย ตามคำบอกเล่าของผู้พัฒนาระบบนี่เป็นหนึ่งในงานหลักของ Kubernetes เราได้ให้ภาพรวมระดับสูงของกลไกการปรับขนาดอัตโนมัติแนวนอนและแนวตั้งและการปรับขนาดคลัสเตอร์ ตลอดจนคำแนะนำเกี่ยวกับวิธีการใช้งานอย่างมีประสิทธิภาพ

บทความ Kubernetes Autoscaling 101: ตัวปรับขนาดอัตโนมัติแบบคลัสเตอร์ ตัวปรับขนาดอัตโนมัติแนวนอน และตัวปรับขนาดอัตโนมัติพ็อดแนวตั้ง แปลโดยทีมงานที่ใช้การปรับขนาดอัตโนมัติ Kubernetes aaS จาก Mail.ru.

เหตุใดการคิดถึงการปรับขนาดจึงเป็นเรื่องสำคัญ

Kubernetes - เครื่องมือสำหรับการจัดการทรัพยากรและการเรียบเรียง แน่นอนว่า เป็นเรื่องดีที่ได้ปรับแต่งฟีเจอร์เจ๋งๆ ของการปรับใช้ การตรวจสอบ และการจัดการพ็อด (พ็อดคือกลุ่มของคอนเทนเนอร์ที่เปิดใช้เพื่อตอบสนองคำขอ)

อย่างไรก็ตาม คุณควรคำนึงถึงคำถามต่อไปนี้ด้วย:

  1. จะปรับขนาดโมดูลและแอปพลิเคชันได้อย่างไร
  2. จะทำให้คอนเทนเนอร์ทำงานและมีประสิทธิภาพได้อย่างไร
  3. จะตอบสนองต่อการเปลี่ยนแปลงโค้ดและปริมาณงานอย่างต่อเนื่องจากผู้ใช้ได้อย่างไร

การกำหนดค่าคลัสเตอร์ Kubernetes เพื่อให้ทรัพยากรและประสิทธิภาพสมดุลอาจเป็นเรื่องที่ท้าทาย และต้องใช้ความรู้จากผู้เชี่ยวชาญเกี่ยวกับการทำงานภายในของ Kubernetes ปริมาณงานของแอปพลิเคชันหรือบริการของคุณอาจผันผวนตลอดทั้งวันหรือตลอดหนึ่งชั่วโมง ดังนั้น การปรับสมดุลจึงเป็นกระบวนการต่อเนื่องที่ดีที่สุด

ระดับการปรับขนาดอัตโนมัติของ Kubernetes

การปรับขนาดอัตโนมัติที่มีประสิทธิภาพต้องอาศัยการประสานงานระหว่างสองระดับ:

  1. ระดับพ็อด รวมถึงแนวนอน (Horizontal Pod Autoscaler, HPA) และตัวปรับขนาดอัตโนมัติแนวตั้ง (Vertical Pod Autoscaler, VPA) นี่เป็นการปรับขนาดทรัพยากรที่มีอยู่สำหรับคอนเทนเนอร์ของคุณ
  2. ระดับคลัสเตอร์ ซึ่งจัดการโดย Cluster Autoscaler (CA) ซึ่งจะเพิ่มหรือลดจำนวนโหนดภายในคลัสเตอร์

โมดูลตัวปรับขนาดอัตโนมัติแนวนอน (HPA)

ตามชื่อที่แนะนำ HPA จะปรับขนาดจำนวนพ็อดจำลอง Devop ส่วนใหญ่ใช้โหลด CPU และหน่วยความจำเป็นตัวกระตุ้นในการเปลี่ยนจำนวนเรพลิกา อย่างไรก็ตาม สามารถปรับขนาดระบบตามได้ เมตริกที่กำหนดเองของพวกเขา การรวมกัน หรือ ตัวชี้วัดภายนอก.

แผนภาพการทำงานของ HPA ระดับสูง:

  1. HPA จะตรวจสอบค่าเมตริกที่ระบุระหว่างการติดตั้งอย่างต่อเนื่องตามช่วงเวลาเริ่มต้น 30 วินาที
  2. HPA พยายามที่จะเพิ่มจำนวนโมดูลหากถึงเกณฑ์ที่ระบุ
  3. HPA อัปเดตจำนวนเรพลิกาภายในตัวควบคุมการปรับใช้/การจำลองแบบ
  4. ตัวควบคุมการปรับใช้/การจำลองแบบจะปรับใช้โมดูลเพิ่มเติมที่จำเป็น

การปรับสเกลอัตโนมัติสามระดับใน Kubernetes: วิธีใช้งานอย่างมีประสิทธิภาพ
HPA เริ่มกระบวนการปรับใช้โมดูลเมื่อถึงเกณฑ์เมตริก

เมื่อใช้ HPA ให้พิจารณาสิ่งต่อไปนี้:

  • ช่วงเวลาการตรวจสอบ HPA เริ่มต้นคือ 30 วินาที มันถูกกำหนดโดยธง แนวนอนพ็อด autoscaler-sync ระยะเวลา ในตัวจัดการคอนโทรลเลอร์
  • ข้อผิดพลาดสัมพัทธ์เริ่มต้นคือ 10%
  • หลังจากเพิ่มจำนวนโมดูลครั้งล่าสุด HPA คาดว่าหน่วยวัดจะมีเสถียรภาพภายในสามนาที ช่วงเวลานี้ถูกกำหนดโดยแฟล็ก แนวนอนพ็อด autoscaler-upscale-delay.
  • หลังจากการลดจำนวนโมดูลครั้งสุดท้าย HPA จะรอเป็นเวลาห้านาทีเพื่อทำให้เสถียร ช่วงเวลานี้ถูกกำหนดโดยแฟล็ก แนวนอนพ็อด autoscaler-downscale-delay.
  • HPA ทำงานได้ดีที่สุดกับออบเจ็กต์การปรับใช้มากกว่าตัวควบคุมการจำลอง การปรับขนาดอัตโนมัติในแนวนอนเข้ากันไม่ได้กับการอัปเดตแบบต่อเนื่อง ซึ่งจะจัดการตัวควบคุมการจำลองโดยตรง ด้วยการปรับใช้ จำนวนเรพลิกาจะขึ้นอยู่กับออบเจ็กต์การปรับใช้โดยตรง

การปรับขนาดพ็อดอัตโนมัติในแนวตั้ง

การปรับขนาดอัตโนมัติในแนวตั้ง (VPA) จะจัดสรรเวลา CPU หรือหน่วยความจำให้กับพ็อดที่มีอยู่มากขึ้น (หรือน้อยกว่า) เหมาะสำหรับพ็อดเก็บสถานะหรือไร้สถานะ แต่มีจุดประสงค์เพื่อบริการเก็บสถานะเป็นหลัก อย่างไรก็ตาม คุณยังสามารถใช้ VPA สำหรับโมดูลไร้สัญชาติได้ หากคุณต้องการปรับจำนวนทรัพยากรที่จัดสรรในตอนแรกโดยอัตโนมัติ

VPA ยังตอบสนองต่อเหตุการณ์ OOM (หน่วยความจำไม่เพียงพอ) อีกด้วย การเปลี่ยนเวลา CPU และหน่วยความจำจำเป็นต้องรีสตาร์ทพ็อด เมื่อเริ่มต้นใหม่ VPA จะเคารพงบประมาณการจัดสรร (งบประมาณการกระจายฝัก PDB) เพื่อรับประกันจำนวนโมดูลขั้นต่ำที่ต้องการ

คุณสามารถกำหนดทรัพยากรขั้นต่ำและสูงสุดสำหรับแต่ละโมดูลได้ ดังนั้นคุณสามารถจำกัดจำนวนหน่วยความจำที่จัดสรรได้สูงสุดไว้ที่ 8 GB สิ่งนี้มีประโยชน์หากโหนดปัจจุบันไม่สามารถจัดสรรหน่วยความจำเกิน 8 GB ต่อคอนเทนเนอร์ได้อย่างแน่นอน ข้อมูลจำเพาะโดยละเอียดและกลไกการทำงานอธิบายไว้ใน วิกิ VPA อย่างเป็นทางการ.

นอกจากนี้ VPA ยังมีฟังก์ชันการแนะนำที่น่าสนใจ (ผู้แนะนำ VPA) ตรวจสอบการใช้ทรัพยากรและเหตุการณ์ OOM ของโมดูลทั้งหมดเพื่อแนะนำหน่วยความจำใหม่และค่าเวลา CPU ตามอัลกอริทึมอัจฉริยะตามตัวชี้วัดในอดีต นอกจากนี้ยังมี API ที่รับตัวจัดการพ็อดและส่งกลับค่าทรัพยากรที่แนะนำ

เป็นที่น่าสังเกตว่าผู้แนะนำ VPA ไม่ได้ติดตามทรัพยากร "ขีดจำกัด" ซึ่งอาจส่งผลให้โมดูลผูกขาดทรัพยากรภายในโหนด ควรตั้งค่าขีดจำกัดที่ระดับเนมสเปซเพื่อหลีกเลี่ยงการใช้หน่วยความจำขนาดใหญ่หรือ CPU

แผนการดำเนินงาน VPA ระดับสูง:

  1. VPA ตรวจสอบค่าเมตริกที่ระบุระหว่างการติดตั้งอย่างต่อเนื่องตามช่วงเวลาเริ่มต้น 10 วินาที
  2. หากถึงเกณฑ์ที่ระบุ VPA จะพยายามเปลี่ยนแปลงจำนวนทรัพยากรที่จัดสรร
  3. VPA อัปเดตจำนวนทรัพยากรภายในตัวควบคุมการปรับใช้/การจำลอง
  4. เมื่อรีสตาร์ทโมดูล ทรัพยากรใหม่ทั้งหมดจะถูกนำไปใช้กับอินสแตนซ์ที่สร้างขึ้น

การปรับสเกลอัตโนมัติสามระดับใน Kubernetes: วิธีใช้งานอย่างมีประสิทธิภาพ
VPA เพิ่มทรัพยากรตามจำนวนที่ต้องการ

โปรดคำนึงถึงประเด็นต่อไปนี้เมื่อใช้ VPA:

  • การปรับขนาดจำเป็นต้องรีสตาร์ทพ็อด นี่เป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงการทำงานที่ไม่เสถียรหลังจากทำการเปลี่ยนแปลง เพื่อความน่าเชื่อถือ โมดูลจะถูกรีสตาร์ทและกระจายข้ามโหนดตามทรัพยากรที่ได้รับการจัดสรรใหม่
  • VPA และ HPA ยังเข้ากันไม่ได้และไม่สามารถทำงานบนพ็อดเดียวกันได้ หากคุณใช้กลไกการปรับขนาดทั้งสองในคลัสเตอร์เดียวกัน ตรวจสอบให้แน่ใจว่าการตั้งค่าของคุณป้องกันไม่ให้เปิดใช้งานบนออบเจ็กต์เดียวกัน
  • VPA ปรับแต่งคำขอคอนเทนเนอร์สำหรับทรัพยากรโดยอิงตามการใช้งานในอดีตและปัจจุบันเท่านั้น มันไม่ได้กำหนดขีดจำกัดการใช้ทรัพยากร อาจเกิดปัญหากับแอปพลิเคชันที่ทำงานไม่ถูกต้องและเริ่มเข้าครอบครองทรัพยากรมากขึ้นเรื่อยๆ ซึ่งจะทำให้ Kubernetes ปิดพ็อดนี้
  • VPA ยังอยู่ในช่วงเริ่มต้นของการพัฒนา เตรียมพร้อมว่าระบบอาจมีการเปลี่ยนแปลงบางอย่างในอนาคตอันใกล้นี้ คุณสามารถอ่านเกี่ยวกับ ข้อจำกัดที่ทราบ и แผนการพัฒนา. ดังนั้นจึงมีแผนที่จะใช้การดำเนินการร่วมกันของ VPA และ HPA เช่นเดียวกับการใช้งานโมดูลพร้อมกับนโยบายการปรับขนาดอัตโนมัติในแนวตั้งสำหรับทั้งสอง (ตัวอย่างเช่น ป้ายพิเศษ 'ต้องมี VPA')

การปรับขนาดคลัสเตอร์ Kubernetes อัตโนมัติ

Cluster Autoscaler (CA) จะเปลี่ยนจำนวนโหนดตามจำนวนพ็อดที่รอ ระบบจะตรวจสอบโมดูลที่ค้างอยู่เป็นระยะ และเพิ่มขนาดคลัสเตอร์หากจำเป็นต้องใช้ทรัพยากรเพิ่มเติม และหากคลัสเตอร์ไม่เกินขีดจำกัดที่กำหนดไว้ CA สื่อสารกับผู้ให้บริการระบบคลาวด์ ขอโหนดเพิ่มเติมจากผู้ให้บริการ หรือเผยแพร่โหนดที่ไม่ได้ใช้งาน CA เวอร์ชันแรกที่พร้อมใช้งานทั่วไปเปิดตัวใน Kubernetes 1.8

รูปแบบการดำเนินงาน SA ระดับสูง:

  1. CA ตรวจสอบโมดูลที่รอดำเนินการในช่วงเวลาเริ่มต้น 10 วินาที
  2. หากพ็อดอย่างน้อยหนึ่งรายการอยู่ในสถานะสแตนด์บายเนื่องจากคลัสเตอร์มีทรัพยากรไม่เพียงพอที่จะจัดสรร คลัสเตอร์จะพยายามจัดเตรียมโหนดเพิ่มเติมอย่างน้อยหนึ่งโหนด
  3. เมื่อผู้ให้บริการระบบคลาวด์จัดสรรโหนดที่ต้องการ ผู้ให้บริการจะเข้าร่วมคลัสเตอร์และพร้อมที่จะให้บริการพ็อด
  4. ตัวกำหนดเวลา Kubernetes กระจายพ็อดที่ค้างอยู่ไปยังโหนดใหม่ หากหลังจากนี้ บางโมดูลยังคงอยู่ในสถานะรอ กระบวนการจะถูกทำซ้ำและเพิ่มโหนดใหม่ลงในคลัสเตอร์

การปรับสเกลอัตโนมัติสามระดับใน Kubernetes: วิธีใช้งานอย่างมีประสิทธิภาพ
การจัดเตรียมโหนดคลัสเตอร์ในระบบคลาวด์โดยอัตโนมัติ

พิจารณาสิ่งต่อไปนี้เมื่อใช้ CA:

  • CA ตรวจสอบให้แน่ใจว่าพ็อดทั้งหมดในคลัสเตอร์มีพื้นที่ให้ทำงาน โดยไม่คำนึงถึงภาระของ CPU นอกจากนี้ยังพยายามให้แน่ใจว่าไม่มีโหนดที่ไม่จำเป็นในคลัสเตอร์
  • CA จะบันทึกความจำเป็นในการปรับขนาดหลังจากผ่านไปประมาณ 30 วินาที
  • เมื่อไม่จำเป็นต้องใช้โหนดอีกต่อไป CA จะตั้งค่าเริ่มต้นให้รอ 10 นาทีก่อนที่จะขยายขนาดระบบ
  • ระบบการปรับขนาดอัตโนมัติมีแนวคิดเกี่ยวกับตัวขยาย นี่เป็นกลยุทธ์ที่แตกต่างกันในการเลือกกลุ่มโหนดที่จะเพิ่มโหนดใหม่
  • ใช้ตัวเลือกอย่างมีความรับผิดชอบ คลัสเตอร์-autoscaler.kubernetes.io/safe-to-evict (จริง). หากคุณติดตั้งพ็อดจำนวนมาก หรือหากหลายพ็อดกระจัดกระจายไปทั่วโหนดทั้งหมด คุณจะสูญเสียความสามารถในการขยายขนาดคลัสเตอร์ไปเป็นส่วนใหญ่
  • ใช้ PodDisruptionBudgetsเพื่อป้องกันไม่ให้พ็อดถูกลบ ซึ่งอาจทำให้บางส่วนของแอปพลิเคชันของคุณเสียหายโดยสิ้นเชิง

ตัวปรับขนาดอัตโนมัติของ Kubernetes โต้ตอบกันอย่างไร

เพื่อความสอดคล้องที่สมบูรณ์แบบ ควรใช้การปรับขนาดอัตโนมัติทั้งที่ระดับพ็อด (HPA/VPA) และระดับคลัสเตอร์ พวกเขามีปฏิสัมพันธ์กันค่อนข้างง่าย:

  1. HPA หรือ VPA อัปเดตแบบจำลองพ็อดหรือทรัพยากรที่จัดสรรให้กับพ็อดที่มีอยู่
  2. หากมีโหนดไม่เพียงพอสำหรับการปรับขนาดตามแผน CA จะสังเกตเห็นว่ามีพ็อดอยู่ในสถานะรอ
  3. CA จัดสรรโหนดใหม่
  4. โมดูลถูกกระจายไปยังโหนดใหม่

การปรับสเกลอัตโนมัติสามระดับใน Kubernetes: วิธีใช้งานอย่างมีประสิทธิภาพ
ระบบขยายขนาด Kubernetes ที่ทำงานร่วมกัน

ข้อผิดพลาดทั่วไปในการปรับขนาดอัตโนมัติของ Kubernetes

มีปัญหาทั่วไปหลายประการที่ Devops พบเจอเมื่อพยายามใช้การปรับขนาดอัตโนมัติ

HPA และ VPA ขึ้นอยู่กับตัววัดและข้อมูลประวัติบางส่วน หากมีการจัดสรรทรัพยากรไม่เพียงพอ โมดูลจะถูกย่อให้เล็กสุดและจะไม่สามารถสร้างหน่วยวัดได้ ในกรณีนี้ การปรับขนาดอัตโนมัติจะไม่เกิดขึ้น

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

สถานการณ์ในอุดมคติ - 4 นาที:

  1. 30 วินาที. อัปเดตเมตริกเป้าหมาย: 30−60 วินาที
  2. 30 วินาที. HPA ตรวจสอบค่าเมตริก: 30 วินาที
  3. น้อยกว่า 2 วินาที พ็อดถูกสร้างขึ้นและเข้าสู่สถานะรอ: 1 วินาที
  4. น้อยกว่า 2 วินาที CA เห็นโมดูลที่รอและส่งการเรียกไปยังโหนดการจัดเตรียม: 1 วินาที
  5. 3 นาที ผู้ให้บริการคลาวด์จัดสรรโหนด K8 รอจนกว่าจะพร้อม: สูงสุด 10 นาที (ขึ้นอยู่กับปัจจัยหลายประการ)

สถานการณ์กรณีที่เลวร้ายที่สุด (สมจริงยิ่งขึ้น) - 12 นาที:

  1. 30 วินาที. อัปเดตตัวชี้วัดเป้าหมาย
  2. 30 วินาที. HPA ตรวจสอบค่าเมตริก
  3. น้อยกว่า 2 วินาที พ็อดจะถูกสร้างขึ้นและเข้าสู่สถานะสแตนด์บาย
  4. น้อยกว่า 2 วินาที CA มองเห็นโมดูลที่รอและทำการเรียกเพื่อจัดเตรียมโหนด
  5. 10 นาที. ผู้ให้บริการคลาวด์จัดสรรโหนด K8 รอจนกว่าพวกเขาจะพร้อม เวลาที่รอขึ้นอยู่กับปัจจัยหลายประการ เช่น ความล่าช้าของผู้จำหน่าย ความล่าช้าของระบบปฏิบัติการ และเครื่องมือสนับสนุน

อย่าสับสนกลไกการปรับขนาดของผู้ให้บริการระบบคลาวด์กับ CA ของเรา อย่างหลังทำงานภายในคลัสเตอร์ Kubernetes ในขณะที่เอ็นจิ้นผู้ให้บริการคลาวด์ทำงานบนพื้นฐานการกระจายโหนด มันไม่รู้ว่าเกิดอะไรขึ้นกับพ็อดหรือแอปพลิเคชันของคุณ ระบบเหล่านี้ทำงานแบบขนาน

วิธีจัดการการปรับขนาดใน Kubernetes

  1. Kubernetes เป็นเครื่องมือการจัดการและประสานทรัพยากร การดำเนินการจัดการพ็อดและทรัพยากรคลัสเตอร์ถือเป็นหลักชัยสำคัญในการเรียนรู้ Kubernetes
  2. ทำความเข้าใจตรรกะของความสามารถในการปรับขนาดพ็อดโดยคำนึงถึง HPA และ VPA
  3. ควรใช้ CA เฉพาะเมื่อคุณเข้าใจความต้องการของพ็อดและคอนเทนเนอร์เป็นอย่างดี
  4. หากต้องการกำหนดค่าคลัสเตอร์อย่างเหมาะสมที่สุด คุณต้องเข้าใจว่าระบบการปรับขนาดต่างๆ ทำงานร่วมกันอย่างไร
  5. เมื่อประมาณเวลาการปรับขนาด ให้คำนึงถึงสถานการณ์ที่เลวร้ายที่สุดและกรณีที่ดีที่สุดอยู่เสมอ

ที่มา: will.com

เพิ่มความคิดเห็น