สวัสดีครับ
ผมได้พัฒนา Database-Driven Kubernetes Operator ขึ้นมา และอยากแนะนำให้กับผู้ที่อาจสนใจครับ
Lynq เป็นโอเปอเรเตอร์ที่นำข้อมูลซึ่งแอปพลิเคชันจัดการอยู่แล้วใน DB มาใช้โดยตรง เพื่อสร้าง/อัปเดต/จัดระเบียบทรัพยากร Kubernetes แบบอัตโนมัติ
(Lynq สามารถอ่านว่า "ลิงก์" แบบมาจาก Link และปัจจุบันก็ออกเสียงว่า "ลิงก์")
จุดเริ่มต้นในการพัฒนาค่อนข้างเรียบง่ายครับ
ในสถานการณ์ที่ข้อมูลอย่าง environment/tenant/node ทั้งหมดอยู่ใน DB
ทุกครั้งที่ข้อมูลเปลี่ยนไปแม้เพียงเล็กน้อย การต้องนำไปสะท้อนใหม่ทุกครั้งใช้เวลามากและยุ่งยากมาก
เลยเกิดความคิดแบบนี้ขึ้นมาครับ:
“สิ่งที่ต้องจัดการด้วย Git จริง ๆ อาจมีแค่เทมเพลตที่ทำซ้ำเพียงตัวเดียวก็พอ
ส่วนที่เหลือ เมื่อข้อมูลสำหรับ provisioning เปลี่ยนไป ก็ควรตามให้อัตโนมัติไม่ใช่หรือ?”
ผมลองค้นคว้าอยู่หลายทาง แต่ก็หาเครื่องมือที่น่าพอใจไม่ได้
แม้ว่าจะใช้ Helm และ Terraform มานานกว่า 5~6 ปีแล้ว แต่ก็ยังมีข้อจำกัดดังนี้:
- ไม่สามารถตอบสนองต่อการเปลี่ยนแปลงของ DB ได้ทันที
- ไม่มีโมเดล reconcile แบบต่อเนื่อง
- สุดท้ายก็ยังต้องดูแลสคริปต์และ pipeline หลายตัวด้วยตัวเอง
ดังนั้นจึงสร้าง Lynq ขึ้นมาเป็นโอเปอเรเตอร์ที่ตอบโจทย์ความต้องการเหล่านี้โดยตรง
อีกทั้ง Lynq ยังทุ่มเทอย่างมากกับการทำ visualization และ documentation เพื่อให้สามารถใช้งานใน production ได้โดยไม่เกิดความสับสน
ตัวอย่างเช่น สามารถดูภาพรวมแบบเข้าใจง่ายสำหรับเรื่องการสร้าง/ลบ/ความขัดแย้ง ได้จากหน้าด้านล่างนี้ (Interactive):
=> Policies Docs
=> Dependency Visualizer
น่าจะมีประโยชน์เป็นพิเศษในกรณีแบบนี้
- การสร้างคอนฟิกของลูกค้า/เทนเนนต์อัตโนมัติในสภาพแวดล้อม SaaS
- ระบบที่ต้องสร้าง environment สำหรับ staging/preview จำนวนมากและต้องจัดการวงจรชีวิตของมัน
- สถาปัตยกรรมที่ต้องให้ resource ซิงก์ได้รวดเร็วแม้ไม่มี GitOps
- ทีมที่ดูแลการตั้งค่าขนาดใหญ่โดยอิงกับ DB
- โครงสร้างที่ต้องรวมการจัดการคอนฟิกของหลายสาขา/หลาย node/หลาย site ด้วยเทมเพลต
หากมีไอเดียว่า “ถ้าเป็นวิธีนี้ก็น่าจะใช้กับแบบนี้ได้เหมือนกัน”
หรือมีสถานการณ์ปัญหาที่เคยเจอด้วยตัวเอง ก็ยินดีมากหากช่วยส่ง feedback มาได้อย่างสบาย ๆ
ขอบคุณครับ
หากทำตามเอกสาร Quick Start ก็สามารถลองรันในสภาพแวดล้อม local ได้อย่างง่ายดาย และติดตั้งด้วย Helm ได้เช่นกัน
นอกจากนี้ยังมี Prometheus Rule และ Grafana Dashboard JSON สำหรับการมอนิเตอร์ให้พร้อมใช้งานด้วย
- GitHub Repo: https://github.com/k8s-lynq/lynq
- Docs: https://lynq.sh/
2 ความคิดเห็น
ว้าว เอกสารทำมาได้ละเอียดและสวยมากเลยนะครับ
ขอบคุณครับ
เนื่องจากแทบไม่มีเครื่องมือที่คล้ายกันและยังค่อนข้างใหม่ ผมจึงให้ความสำคัญกับการช่วยให้เข้าใจได้ด้วยภาพเป็นอันดับแรก
หากอ่านเอกสารแล้วยังไม่เข้าใจหรือสับสนในแนวคิดตรงไหน รบกวนช่วยส่งฟีดแบ็กมาว่าควรปรับปรุงส่วนใดจะขอบคุณมากครับ!
ตอนนี้กำลังเพิ่มความสมบูรณ์ด้วยการทำไลฟ์เดโมและเขียนการทดสอบ E2E อยู่ ฝากติดตามด้วยนะครับ