หากต้องการเชี่ยวชาญ Kubernetes อย่างเต็มรูปแบบ คุณจำเป็นต้องรู้วิธีต่างๆ ในการปรับขนาดทรัพยากรคลัสเตอร์: โดย
บทความ
เหตุใดการคิดถึงการปรับขนาดจึงเป็นเรื่องสำคัญ
อย่างไรก็ตาม คุณควรคำนึงถึงคำถามต่อไปนี้ด้วย:
- จะปรับขนาดโมดูลและแอปพลิเคชันได้อย่างไร
- จะทำให้คอนเทนเนอร์ทำงานและมีประสิทธิภาพได้อย่างไร
- จะตอบสนองต่อการเปลี่ยนแปลงโค้ดและปริมาณงานอย่างต่อเนื่องจากผู้ใช้ได้อย่างไร
การกำหนดค่าคลัสเตอร์ Kubernetes เพื่อให้ทรัพยากรและประสิทธิภาพสมดุลอาจเป็นเรื่องที่ท้าทาย และต้องใช้ความรู้จากผู้เชี่ยวชาญเกี่ยวกับการทำงานภายในของ Kubernetes ปริมาณงานของแอปพลิเคชันหรือบริการของคุณอาจผันผวนตลอดทั้งวันหรือตลอดหนึ่งชั่วโมง ดังนั้น การปรับสมดุลจึงเป็นกระบวนการต่อเนื่องที่ดีที่สุด
ระดับการปรับขนาดอัตโนมัติของ Kubernetes
การปรับขนาดอัตโนมัติที่มีประสิทธิภาพต้องอาศัยการประสานงานระหว่างสองระดับ:
- ระดับพ็อด รวมถึงแนวนอน (Horizontal Pod Autoscaler, HPA) และตัวปรับขนาดอัตโนมัติแนวตั้ง (Vertical Pod Autoscaler, VPA) นี่เป็นการปรับขนาดทรัพยากรที่มีอยู่สำหรับคอนเทนเนอร์ของคุณ
- ระดับคลัสเตอร์ ซึ่งจัดการโดย Cluster Autoscaler (CA) ซึ่งจะเพิ่มหรือลดจำนวนโหนดภายในคลัสเตอร์
โมดูลตัวปรับขนาดอัตโนมัติแนวนอน (HPA)
ตามชื่อที่แนะนำ HPA จะปรับขนาดจำนวนพ็อดจำลอง Devop ส่วนใหญ่ใช้โหลด CPU และหน่วยความจำเป็นตัวกระตุ้นในการเปลี่ยนจำนวนเรพลิกา อย่างไรก็ตาม สามารถปรับขนาดระบบตามได้
แผนภาพการทำงานของ HPA ระดับสูง:
- HPA จะตรวจสอบค่าเมตริกที่ระบุระหว่างการติดตั้งอย่างต่อเนื่องตามช่วงเวลาเริ่มต้น 30 วินาที
- HPA พยายามที่จะเพิ่มจำนวนโมดูลหากถึงเกณฑ์ที่ระบุ
- HPA อัปเดตจำนวนเรพลิกาภายในตัวควบคุมการปรับใช้/การจำลองแบบ
- ตัวควบคุมการปรับใช้/การจำลองแบบจะปรับใช้โมดูลเพิ่มเติมที่จำเป็น
HPA เริ่มกระบวนการปรับใช้โมดูลเมื่อถึงเกณฑ์เมตริก
เมื่อใช้ HPA ให้พิจารณาสิ่งต่อไปนี้:
- ช่วงเวลาการตรวจสอบ HPA เริ่มต้นคือ 30 วินาที มันถูกกำหนดโดยธง แนวนอนพ็อด autoscaler-sync ระยะเวลา ในตัวจัดการคอนโทรลเลอร์
- ข้อผิดพลาดสัมพัทธ์เริ่มต้นคือ 10%
- หลังจากเพิ่มจำนวนโมดูลครั้งล่าสุด HPA คาดว่าหน่วยวัดจะมีเสถียรภาพภายในสามนาที ช่วงเวลานี้ถูกกำหนดโดยแฟล็ก แนวนอนพ็อด autoscaler-upscale-delay.
- หลังจากการลดจำนวนโมดูลครั้งสุดท้าย HPA จะรอเป็นเวลาห้านาทีเพื่อทำให้เสถียร ช่วงเวลานี้ถูกกำหนดโดยแฟล็ก แนวนอนพ็อด autoscaler-downscale-delay.
- HPA ทำงานได้ดีที่สุดกับออบเจ็กต์การปรับใช้มากกว่าตัวควบคุมการจำลอง การปรับขนาดอัตโนมัติในแนวนอนเข้ากันไม่ได้กับการอัปเดตแบบต่อเนื่อง ซึ่งจะจัดการตัวควบคุมการจำลองโดยตรง ด้วยการปรับใช้ จำนวนเรพลิกาจะขึ้นอยู่กับออบเจ็กต์การปรับใช้โดยตรง
การปรับขนาดพ็อดอัตโนมัติในแนวตั้ง
การปรับขนาดอัตโนมัติในแนวตั้ง (VPA) จะจัดสรรเวลา CPU หรือหน่วยความจำให้กับพ็อดที่มีอยู่มากขึ้น (หรือน้อยกว่า) เหมาะสำหรับพ็อดเก็บสถานะหรือไร้สถานะ แต่มีจุดประสงค์เพื่อบริการเก็บสถานะเป็นหลัก อย่างไรก็ตาม คุณยังสามารถใช้ VPA สำหรับโมดูลไร้สัญชาติได้ หากคุณต้องการปรับจำนวนทรัพยากรที่จัดสรรในตอนแรกโดยอัตโนมัติ
VPA ยังตอบสนองต่อเหตุการณ์ OOM (หน่วยความจำไม่เพียงพอ) อีกด้วย การเปลี่ยนเวลา CPU และหน่วยความจำจำเป็นต้องรีสตาร์ทพ็อด เมื่อเริ่มต้นใหม่ VPA จะเคารพงบประมาณการจัดสรร (
คุณสามารถกำหนดทรัพยากรขั้นต่ำและสูงสุดสำหรับแต่ละโมดูลได้ ดังนั้นคุณสามารถจำกัดจำนวนหน่วยความจำที่จัดสรรได้สูงสุดไว้ที่ 8 GB สิ่งนี้มีประโยชน์หากโหนดปัจจุบันไม่สามารถจัดสรรหน่วยความจำเกิน 8 GB ต่อคอนเทนเนอร์ได้อย่างแน่นอน ข้อมูลจำเพาะโดยละเอียดและกลไกการทำงานอธิบายไว้ใน
นอกจากนี้ VPA ยังมีฟังก์ชันการแนะนำที่น่าสนใจ (ผู้แนะนำ VPA) ตรวจสอบการใช้ทรัพยากรและเหตุการณ์ OOM ของโมดูลทั้งหมดเพื่อแนะนำหน่วยความจำใหม่และค่าเวลา CPU ตามอัลกอริทึมอัจฉริยะตามตัวชี้วัดในอดีต นอกจากนี้ยังมี API ที่รับตัวจัดการพ็อดและส่งกลับค่าทรัพยากรที่แนะนำ
เป็นที่น่าสังเกตว่าผู้แนะนำ VPA ไม่ได้ติดตามทรัพยากร "ขีดจำกัด" ซึ่งอาจส่งผลให้โมดูลผูกขาดทรัพยากรภายในโหนด ควรตั้งค่าขีดจำกัดที่ระดับเนมสเปซเพื่อหลีกเลี่ยงการใช้หน่วยความจำขนาดใหญ่หรือ CPU
แผนการดำเนินงาน VPA ระดับสูง:
- VPA ตรวจสอบค่าเมตริกที่ระบุระหว่างการติดตั้งอย่างต่อเนื่องตามช่วงเวลาเริ่มต้น 10 วินาที
- หากถึงเกณฑ์ที่ระบุ VPA จะพยายามเปลี่ยนแปลงจำนวนทรัพยากรที่จัดสรร
- VPA อัปเดตจำนวนทรัพยากรภายในตัวควบคุมการปรับใช้/การจำลอง
- เมื่อรีสตาร์ทโมดูล ทรัพยากรใหม่ทั้งหมดจะถูกนำไปใช้กับอินสแตนซ์ที่สร้างขึ้น
VPA เพิ่มทรัพยากรตามจำนวนที่ต้องการ
โปรดคำนึงถึงประเด็นต่อไปนี้เมื่อใช้ VPA:
- การปรับขนาดจำเป็นต้องรีสตาร์ทพ็อด นี่เป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงการทำงานที่ไม่เสถียรหลังจากทำการเปลี่ยนแปลง เพื่อความน่าเชื่อถือ โมดูลจะถูกรีสตาร์ทและกระจายข้ามโหนดตามทรัพยากรที่ได้รับการจัดสรรใหม่
- VPA และ HPA ยังเข้ากันไม่ได้และไม่สามารถทำงานบนพ็อดเดียวกันได้ หากคุณใช้กลไกการปรับขนาดทั้งสองในคลัสเตอร์เดียวกัน ตรวจสอบให้แน่ใจว่าการตั้งค่าของคุณป้องกันไม่ให้เปิดใช้งานบนออบเจ็กต์เดียวกัน
- VPA ปรับแต่งคำขอคอนเทนเนอร์สำหรับทรัพยากรโดยอิงตามการใช้งานในอดีตและปัจจุบันเท่านั้น มันไม่ได้กำหนดขีดจำกัดการใช้ทรัพยากร อาจเกิดปัญหากับแอปพลิเคชันที่ทำงานไม่ถูกต้องและเริ่มเข้าครอบครองทรัพยากรมากขึ้นเรื่อยๆ ซึ่งจะทำให้ Kubernetes ปิดพ็อดนี้
- VPA ยังอยู่ในช่วงเริ่มต้นของการพัฒนา เตรียมพร้อมว่าระบบอาจมีการเปลี่ยนแปลงบางอย่างในอนาคตอันใกล้นี้ คุณสามารถอ่านเกี่ยวกับ
ข้อจำกัดที่ทราบ иแผนการพัฒนา . ดังนั้นจึงมีแผนที่จะใช้การดำเนินการร่วมกันของ VPA และ HPA เช่นเดียวกับการใช้งานโมดูลพร้อมกับนโยบายการปรับขนาดอัตโนมัติในแนวตั้งสำหรับทั้งสอง (ตัวอย่างเช่น ป้ายพิเศษ 'ต้องมี VPA')
การปรับขนาดคลัสเตอร์ Kubernetes อัตโนมัติ
Cluster Autoscaler (CA) จะเปลี่ยนจำนวนโหนดตามจำนวนพ็อดที่รอ ระบบจะตรวจสอบโมดูลที่ค้างอยู่เป็นระยะ และเพิ่มขนาดคลัสเตอร์หากจำเป็นต้องใช้ทรัพยากรเพิ่มเติม และหากคลัสเตอร์ไม่เกินขีดจำกัดที่กำหนดไว้ CA สื่อสารกับผู้ให้บริการระบบคลาวด์ ขอโหนดเพิ่มเติมจากผู้ให้บริการ หรือเผยแพร่โหนดที่ไม่ได้ใช้งาน CA เวอร์ชันแรกที่พร้อมใช้งานทั่วไปเปิดตัวใน Kubernetes 1.8
รูปแบบการดำเนินงาน SA ระดับสูง:
- CA ตรวจสอบโมดูลที่รอดำเนินการในช่วงเวลาเริ่มต้น 10 วินาที
- หากพ็อดอย่างน้อยหนึ่งรายการอยู่ในสถานะสแตนด์บายเนื่องจากคลัสเตอร์มีทรัพยากรไม่เพียงพอที่จะจัดสรร คลัสเตอร์จะพยายามจัดเตรียมโหนดเพิ่มเติมอย่างน้อยหนึ่งโหนด
- เมื่อผู้ให้บริการระบบคลาวด์จัดสรรโหนดที่ต้องการ ผู้ให้บริการจะเข้าร่วมคลัสเตอร์และพร้อมที่จะให้บริการพ็อด
- ตัวกำหนดเวลา Kubernetes กระจายพ็อดที่ค้างอยู่ไปยังโหนดใหม่ หากหลังจากนี้ บางโมดูลยังคงอยู่ในสถานะรอ กระบวนการจะถูกทำซ้ำและเพิ่มโหนดใหม่ลงในคลัสเตอร์
การจัดเตรียมโหนดคลัสเตอร์ในระบบคลาวด์โดยอัตโนมัติ
พิจารณาสิ่งต่อไปนี้เมื่อใช้ CA:
- CA ตรวจสอบให้แน่ใจว่าพ็อดทั้งหมดในคลัสเตอร์มีพื้นที่ให้ทำงาน โดยไม่คำนึงถึงภาระของ CPU นอกจากนี้ยังพยายามให้แน่ใจว่าไม่มีโหนดที่ไม่จำเป็นในคลัสเตอร์
- CA จะบันทึกความจำเป็นในการปรับขนาดหลังจากผ่านไปประมาณ 30 วินาที
- เมื่อไม่จำเป็นต้องใช้โหนดอีกต่อไป CA จะตั้งค่าเริ่มต้นให้รอ 10 นาทีก่อนที่จะขยายขนาดระบบ
- ระบบการปรับขนาดอัตโนมัติมีแนวคิดเกี่ยวกับตัวขยาย นี่เป็นกลยุทธ์ที่แตกต่างกันในการเลือกกลุ่มโหนดที่จะเพิ่มโหนดใหม่
- ใช้ตัวเลือกอย่างมีความรับผิดชอบ คลัสเตอร์-autoscaler.kubernetes.io/safe-to-evict (จริง). หากคุณติดตั้งพ็อดจำนวนมาก หรือหากหลายพ็อดกระจัดกระจายไปทั่วโหนดทั้งหมด คุณจะสูญเสียความสามารถในการขยายขนาดคลัสเตอร์ไปเป็นส่วนใหญ่
- ใช้
PodDisruptionBudgets เพื่อป้องกันไม่ให้พ็อดถูกลบ ซึ่งอาจทำให้บางส่วนของแอปพลิเคชันของคุณเสียหายโดยสิ้นเชิง
ตัวปรับขนาดอัตโนมัติของ Kubernetes โต้ตอบกันอย่างไร
เพื่อความสอดคล้องที่สมบูรณ์แบบ ควรใช้การปรับขนาดอัตโนมัติทั้งที่ระดับพ็อด (HPA/VPA) และระดับคลัสเตอร์ พวกเขามีปฏิสัมพันธ์กันค่อนข้างง่าย:
- HPA หรือ VPA อัปเดตแบบจำลองพ็อดหรือทรัพยากรที่จัดสรรให้กับพ็อดที่มีอยู่
- หากมีโหนดไม่เพียงพอสำหรับการปรับขนาดตามแผน CA จะสังเกตเห็นว่ามีพ็อดอยู่ในสถานะรอ
- CA จัดสรรโหนดใหม่
- โมดูลถูกกระจายไปยังโหนดใหม่
ระบบขยายขนาด Kubernetes ที่ทำงานร่วมกัน
ข้อผิดพลาดทั่วไปในการปรับขนาดอัตโนมัติของ Kubernetes
มีปัญหาทั่วไปหลายประการที่ Devops พบเจอเมื่อพยายามใช้การปรับขนาดอัตโนมัติ
HPA และ VPA ขึ้นอยู่กับตัววัดและข้อมูลประวัติบางส่วน หากมีการจัดสรรทรัพยากรไม่เพียงพอ โมดูลจะถูกย่อให้เล็กสุดและจะไม่สามารถสร้างหน่วยวัดได้ ในกรณีนี้ การปรับขนาดอัตโนมัติจะไม่เกิดขึ้น
การดำเนินการปรับขนาดนั้นขึ้นอยู่กับเวลา เราต้องการให้โมดูลและคลัสเตอร์ปรับขนาดได้อย่างรวดเร็ว ก่อนที่ผู้ใช้จะสังเกตเห็นปัญหาหรือความล้มเหลวใดๆ ดังนั้น จึงควรคำนึงถึงเวลาการปรับขนาดเฉลี่ยสำหรับพ็อดและคลัสเตอร์ด้วย
สถานการณ์ในอุดมคติ - 4 นาที:
- 30 วินาที. อัปเดตเมตริกเป้าหมาย: 30−60 วินาที
- 30 วินาที. HPA ตรวจสอบค่าเมตริก: 30 วินาที
- น้อยกว่า 2 วินาที พ็อดถูกสร้างขึ้นและเข้าสู่สถานะรอ: 1 วินาที
- น้อยกว่า 2 วินาที CA เห็นโมดูลที่รอและส่งการเรียกไปยังโหนดการจัดเตรียม: 1 วินาที
- 3 นาที ผู้ให้บริการคลาวด์จัดสรรโหนด K8 รอจนกว่าจะพร้อม: สูงสุด 10 นาที (ขึ้นอยู่กับปัจจัยหลายประการ)
สถานการณ์กรณีที่เลวร้ายที่สุด (สมจริงยิ่งขึ้น) - 12 นาที:
- 30 วินาที. อัปเดตตัวชี้วัดเป้าหมาย
- 30 วินาที. HPA ตรวจสอบค่าเมตริก
- น้อยกว่า 2 วินาที พ็อดจะถูกสร้างขึ้นและเข้าสู่สถานะสแตนด์บาย
- น้อยกว่า 2 วินาที CA มองเห็นโมดูลที่รอและทำการเรียกเพื่อจัดเตรียมโหนด
- 10 นาที. ผู้ให้บริการคลาวด์จัดสรรโหนด K8 รอจนกว่าพวกเขาจะพร้อม เวลาที่รอขึ้นอยู่กับปัจจัยหลายประการ เช่น ความล่าช้าของผู้จำหน่าย ความล่าช้าของระบบปฏิบัติการ และเครื่องมือสนับสนุน
อย่าสับสนกลไกการปรับขนาดของผู้ให้บริการระบบคลาวด์กับ CA ของเรา อย่างหลังทำงานภายในคลัสเตอร์ Kubernetes ในขณะที่เอ็นจิ้นผู้ให้บริการคลาวด์ทำงานบนพื้นฐานการกระจายโหนด มันไม่รู้ว่าเกิดอะไรขึ้นกับพ็อดหรือแอปพลิเคชันของคุณ ระบบเหล่านี้ทำงานแบบขนาน
วิธีจัดการการปรับขนาดใน Kubernetes
- Kubernetes เป็นเครื่องมือการจัดการและประสานทรัพยากร การดำเนินการจัดการพ็อดและทรัพยากรคลัสเตอร์ถือเป็นหลักชัยสำคัญในการเรียนรู้ Kubernetes
- ทำความเข้าใจตรรกะของความสามารถในการปรับขนาดพ็อดโดยคำนึงถึง HPA และ VPA
- ควรใช้ CA เฉพาะเมื่อคุณเข้าใจความต้องการของพ็อดและคอนเทนเนอร์เป็นอย่างดี
- หากต้องการกำหนดค่าคลัสเตอร์อย่างเหมาะสมที่สุด คุณต้องเข้าใจว่าระบบการปรับขนาดต่างๆ ทำงานร่วมกันอย่างไร
- เมื่อประมาณเวลาการปรับขนาด ให้คำนึงถึงสถานการณ์ที่เลวร้ายที่สุดและกรณีที่ดีที่สุดอยู่เสมอ
ที่มา: will.com