Kubenetes ได้กลายเป็นพื้นฐานของแอปพลิเคชันสมัยใหม่ไปแล้ว แต่ในการปฏิบัติจริงนั้นค่าใช้จ่ายในการดูแลและบริหารจัดการเป็นเรื่องที่ประมาทไม่ได้เลย ซึ่งอาจก่อให้เกิดต้นทุนกับองค์กรอย่างมีนัยสำคัญ โดยผู้ใช้จากต้องทราบว่า Kubernetes เกี่ยวพันกับปัจจัยหลายตัวทางด้านทรัพยากรเช่น Compute, Storage, Networking และอื่นๆ รวมถึงต้นทุนในการปฏิบัติการ ด้วยเหตุนี้เององค์กรจึงต้องมีหลักปฏิบัติที่ดี โดยมี 6 ข้อที่ท่านสามารถนำไปปฎิบัติได้ดังนี้
ก่อนที่จะเริ่มกับแนวทางปฏิบัติ 6 ข้อ ผู้อ่านต้องเข้าใจถึงความยุ่งยากที่เกิดขึ้นกับ Kubernetes ที่แอปตัวหนึ่งอาจประกอบด้วยหลาย Pod, การทำ Ingress, Persistent Volume รวมถึงเนื้อหาเบื้องหลังอย่าง namespace และการที่กระจายตัวไปได้หลาย Cloud, Data Center และ Cluster อย่างไรก็ดีแม้องค์กรอาจมีเครื่องมือจัดการต้นทุน แต่คำถามคือเครื่องมือเหล่านี้ได้ถูกออกแบบมาให้มองไปถึงตัวแปรที่กล่าวมาของ Kubernetes หรือไม่ ด้วยเหตุนี้เองจึงนำไปสู่แนวทางปฎิบัติ 6 ข้อดังต่อไปนี้
1.) เลือก Cloud Instance ให้เหมาะสม
การรู้จักความต้องการของแอปพลิเคชันจะช่วยลดค่าใช้จ่ายขององค์กรได้อย่างมหาศาล เพราะสามารถเลือกเปิดใช้ทรัพยากรได้อย่างเหมาะสมเช่น
- อัตราการใช้ CPU หรือ Memory ขั้นต่ำและความน่าจะเป็นที่เกิดขึ้นสูงสุด
- เลือก instance บน Public Cloud ได้ถูกต้องเนื่องจากบริการเหล่านี้มักถูกออกแบบมาให้ทำงานได้หลากหลาย เช่น ในบางงานอาจเหมาะกับ Spot Instance หรืองานที่เริ่มต้นขั้นต่ำก่อนแล้วค่อยวางแผน Burst เพิ่มเติมยามจำเป็น
- มีเครื่องมือในท้องตลาดที่สามารถช่วยทำการเพิ่ม-ลด ขนาด Pod ได้อย่างอัตโนมัติ
2.) ใช้ประโยชน์จากความสามารถ Multi-tenancy
Kubernetes Cluster สามารถถูกใช้งานได้ 2 รูปแบบคือแชร์(Shared) หรือจองใช้งาน(Dedicated) ซึ่งหากท่านเข้าใจความต้องการของแอปอย่างถ่องแท้ก็อาจลดค่าใช้จ่ายด้วยโมเดลการใช้งานร่วมกันผ่านกลไกของ namespace ในบางกรณีท่านต้องจองใช้งานเพียงผู้เดียวเช่น แอปสำคัญที่ต้องการ low-latency หรือมีความต้องการพิเศษอย่าง Plug-in และ GPU Worker อย่างไรก็ตามความสามารถในการแบ่งปันใช้งาน Cluster ทำให้ท่านสามารถลดค่าใช้จ่ายได้แต่ก็ต้องมีการวางแผนเรื่อง Governance และ Security ด้วย
- กำหนดโควต้าให้แอปในระดับ namespace
- ทำ Network Policy เพื่อแบ่งแยกแต่ละ namespace
- ใช้เครื่องมือช่วยสำหรับ Security Policy และ Governance ได้เช่น Open Policy Agent
- มีกลไกการป้องกันการเข้าถึงผ่าน SSO หรือ RBAC
- มี Cluster สำหรับการบริหารจัดการที่ใช้ร่วมกัน
3.) ทำให้ผู้มีส่วนร่วมเห็นภาพต้นทุน
เมื่อมีข้อมูลการใช้งานแล้วท่านจะสามารถแปรเปลี่ยนเป็น Dashboard หรือเครื่องมือติดตามการใช้งานที่ผู้เกี่ยวข้องทุกฝ่ายสามารถเข้าใจภาพเดียวกันได้ เพื่อสร้างความรับผิดชอบต่อการใช้จ่ายเช่น ทีม infrastructure, ทีมนักพัฒนา, เจ้าของแอปพลิเคชัน และหน่วยธุรกิจต่างๆ ทั้งนี้ท่านยังจะสามารถทำ Threshold ของงบประมาณเพื่อแจ้งเตือนได้อีกด้วย ให้ผู้ใช้ตัดสินใจว่าจะลดค่าใช้จ่ายหรือทำอย่างไรต่อไป หากต้นทุนถึงเกณฑ์ที่เฝ้าระวัง
4.) สร้าง Policy สำหรับปรับแต่งการใช้งาน
มีงานหลายรูปแบบที่สามารถถูกปรับลดหรือตัดออกไปได้ เช่น ทรัพยากรที่ไม่ได้ใช้งานสามารถปิดได้ หรือระบบทดสอบของลูกค้าที่สามารถตั้งปิดได้ช่วงวันหยุด เช่น บริการของ AWS EKS มีฟังก์ชันที่ช่วยปิด Worker Node ลงได้ขณะไม่ได้ใช้งาน โดย Policy เหล่านี้มีวิธีการที่ท่านสามารถสร้างความเป็นอัตโนมัติขึ้นได้ นอกจากนี้การทำ Tag จะช่วยให้องค์กรทราบได้ว่าทรัพยากรใดมีอายุการใช้งานถึงเมื่อไหร่ หรือยกเว้นการใช้งาน Cloud Region และ instance บางประเภทออกไปได้ตามความเหมาะสม
5.) อย่ามองข้ามต้นทุนแฝง
มีต้นทุนหลายเรื่องในการดูแลจัดการ Kubernetes ที่คนมักมองข้าม ยิ่งหากท่านเป็นผู้จัดการ Kubernetes ขนาดใหญ่สิ่งเหล่านี้ต้องวางแผนให้ดี โดยมีค่าใช้จ่ายเช่น
- การจัดตั้ง Kubernetes สำหรับการทำงานจริง(Production) และวัตถุประสงค์อื่นนอกเหนือจากการทำงาน (non-production)
- การเพิ่ม add-ons ให้ Cluster
- การทำ Security Policy ระดับ Cluster
- การจัดตั้งระบบ Logging และ Monitoring
- การทำ RBAC ให้ผู้ใช้งาน
- การ Deploy แอปพลิเคชัน
- การอัปเกรตเวอร์ชันใหม่ให้ Kubernetes และ add-ons
- การสืบหาต้นตนปัญหาเพื่อเข้าไปแก้ไข
ยังมีงานอีกมากมายที่เกิดขึ้นในมือของทีม SRE, Platform Operation ที่ต้องทำด้วยมือ ดังนั้นการเพิ่มกลไกความเป็นอัตโนมัติจะช่วยลดค่าใช้จ่ายและสร้างประสบการณ์ที่ดีต่อการทำงานได้ นอกจากนี้ในท้องตลาดยังมีเครื่องมือมากมายที่ช่วยให้ท่านเอาชนะความท้าทายนี้ได้ เพราะการทำเองนั้นเพิ่มต้นทุนอย่างมหาศาล
6.) ใช้เครื่องมือจัดการค่าใช้จ่ายที่ออกแบบมาเพื่อ Kubernetes อย่างแท้จริง
เครื่องมือที่ถูกออกแบบมาสำหรับ Kubernetes มักมีฟังก์ชันเหล่านี้
- แสดงภาพรวมต้นทุนของ Kubernetes ได้หลากมุมมองทั้ง Cluster, Application, Environment, ทีม และ Business Unit
- เห็นการทำงานลึกถึงระดับ Namespace, Pod และอื่นๆ
- แปลงผลเป็นค่าใช้จ่ายเชิงตัวเลยที่สะท้อนการทำงานของทุกฝ่ายได้
- มีการจัดเก็บข้อมูลการใช้งานในตัวแปรต่างๆที่ทำนายการใช้จ่ายในอนาคต
- มีฟังก์ชัน RBAC ให้แต่ละทีมเพื่อเข้าดูค่าใช้จ่ายที่เกี่ยวข้องของตนเองได้