จัดการ Kubernetes Resources ด้วย kro (Kube Resource Orchestrator)

mongkol_tho

Mongkol Thongkraikaew

Posted on November 16, 2024

จัดการ Kubernetes Resources ด้วย kro (Kube Resource Orchestrator)

kro (Kube Resource Orchestrator) เป็น​ Open source จาก awslabs ที่มาช่วยให้การจัดการ Kubernetes Resources ทำได้สะดวกมากขึ้น

💡อธิบายให้เข้าใจง่ายๆเลยนะครับ :

  • เมื่อเราจะ Provision หรือรัน Application ใดๆ ใน Kubernetes แน่นอนว่าเราจำเป็นต้องสร้าง Resource ต่างๆ เช่น Deployment, ServiceAccount, Service, Ingress, PV, PVC ใช่ไหมครับ ซึ่ง Resource เหล่านี้อาจจะต้องสร้างซ้ำๆ ในทุก Application ที่รันบนคลัสเตอร์ และสำหรับมือใหม่อาจจะมีความสับสนว่าเราควรสร้าง Resource อะไรก่อนดี ความยุ่งยากนี้แหละครับที่ kro จะเข้ามาช่วยเรา

  • ResourceGroup (RG) เป็น key ของ kro ครับ จริงๆแล้วมันคือ Custom Resource Definitions (CRDs) สำหรับกำหนดกลุ่มของ Resource ที่เราต้องการ เช่น หากเราต้องการให้ Application ที่จะรันบนคลัสเตอร์มี Deployment, ServiceAccount, Service และ Ingress รูปแบบไหน เราก็สามารถกำหนดลงไปใน RG ได้เลย

  • หลังจากที่เราสร้าง RG เสร็จแล้ว เราจะได้ API และ Kind API ใหม่ของเราเอง ในตัวอย่างนี้เราจะได้ Kind ที่ชื่อว่า “ApplicationStack”

  • สำหรับการใช้งานนั้น End User หรือ Developer (Dev Team A, Team B) ก็เพียงแค่เรียกใช้งาน “ApplicationStack” ที่ได้ถูกกำหนดไว้แล้ว โดยไม่จำเป็นต้องรู้รายละเอียดทั้งหมดของ Kubernetes Resources หลังจาก Developer ได้สร้าง ApplicationStack ของตัวเอง, kro ก็จะทำการสร้าง Deployment, ServiceAccount, Service และ Ingress ให้ตามที่ได้กำหนดไว้ใน RG

Image description

💡ฟีเจอร์และประโยชน์ของ kro:

  • ลดความซับซ้อนในการจัดการ Kubernetes Resources
  • สนับสนุนการทำงานตาม Platform Engineering Practice, ทำให้ทีม Platform สามารถควบคุม standard, compliant, security best practices ได้ง่ายขึ้น
  • สามารถตรวจสอบสถานะของ Resources ทั้งหมดได้ผ่าน ResourceGroup ได้
  • รองรับ Resources ที่เป็น Native ของ Kubernetes และ Custom Resource Definitions (CRDs) ที่ติดตั้งอยู่บนคลัสเตอร์
  • และอื่นๆ

จากการทดสอบที่ผมได้ลองเล่นดู เราสามารถนำ kro ไปต่อยอดได้หลายอย่างครับ เช่น:
Ex.1: ทำให้การทำงานของ Platform Engineering ง่ายขึ้น โดยที่หน้าที่ของทีม Platform คือการกำหนดมาตรฐานของ ResourceGroup ออกมา และให้ผู้ใช้สามารถ Self-Service ในการ Provision สิ่งที่ต้องการได้ด้วยตัวเอง นอกจากนี้ทีม Platform อาจจะเสริมด้วยการ control permission โดยจะอนุญาตให้ user interact กับ ResourceGroup ได้เท่านั้น จะไม่อนุญาตให้ user สร้าง Deployment หรือ Ingress ได้ตรงๆ เป็นต้น
🔗Link

Ex.2: ช่วยในการ Provision Kubernetes Resources พร้อมกับ Cloud Resources ได้ง่ายขึ้น ในตัวอย่างนี้ Pod หรือ Application จำเป็นต้องใช้งาน RDS และต้องนำ IP ของ RDS ไปใช้งานใน Application ด้วย เราสามารถทำสิ่งเหล่านี้ได้เพียงไฟล์ YAML ไฟล์เดียว

🔗Link

Ex.3: ทีม SRE อาจสร้าง ResourceGroup สำหรับ Observability Tools เช่น Logging Stack, Monitoring Stack, และ Tracing Stack หากต้องการสร้าง Stack ใหม่ ก็ไม่จำเป็นต้องประกอบร่าง Kubernetes Resources ใหม่ทั้งหมด

Ps. This project is in active development and not yet intended for production use
Official Doc
GitHub

💖 💪 🙅 🚩
mongkol_tho
Mongkol Thongkraikaew

Posted on November 16, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related