เมื่อบังเอิญกลายเป็นคนที่รวมโลกของ GitOps เข้าด้วยกัน

Chanwit Kaewkasi
2 min readMar 8, 2022

ต้องบอกว่านี่เป็นเรื่องบังเอิญจริง ๆ และไม่คิดว่าจะทำได้ การรวม GitOps 2 ระบบเข้าด้วยกันเป็นข้อเสนอระหว่าง AWS, Intuit และ Weaveworks มานานแล้ว แต่แผนก็ต้องพับไปเมื่อประมาณ 2 ปีก่อน เพราะอะไรนั้นคงไม่ได้เล่า

เทคโนโลยีของ Flux และ ArgoCD มีความแตกต่างกันในเชิงรายละเอียด แต่ใน Use Case หลักใหญ่ ๆ ก็จะมี 2 ประเด็นคือ 1. ใช้ Reconcile Kustomization และ YAML Resources และ 2. ใช้ Reconcile Helm Charts

Flux ออกแบบมาเป็น GitOps Engine แบบเน้นใช้ CLI ใช้ RBAC ของ Kubernetes ทั้งหมด ส่วน ArgoCD มาทางฝั่งผู้ใช้เลยเน้นทาง UI และการจัดการ Permission RBAC ซ้อนอยู่บน RBAC ของ Kubernetes อีกที

ด้วย Design Principle ที่ไม่เหมือนกัน ก็กลายเป็นว่า GitOps ของทั้ง 2 ค่ายนี้จะมีการขับเคี่ยวกันเป็นระยะ ๆ

สองปีที่แล้วผมอยู่ในช่วงความพยายามที่จะรวม GitOps ทั้งสองระบบเข้าด้วนกันพอดี แต่ก็เพราะมีหน้าที่รับผิดชอบ Project อื่นอยู่เลยไม่ได้ดู

จากนั้นก็เกิด Flux v2 ขึ้น วงการ Cloud Native เลยมี GitOps ระดับพรีเมียมใช้กันอยู่ในตอนนี้ แต่ก็จะเป็นเฉพาะกลุ่ม Engineer สายโหด

ฝั่ง Dev และกลุ่ม Engineer สายรับผิดชอบงาน ก็มักจะชอบ ArgoCD มากกว่าเพราะมองว่า Flux สร้างความปวดหัวที่ไม่จำเป็น ไม่มี UI มองอะไรไม่ค่อยเห็น

แต่ปัญหาก็ยังมีใน ArgoCD เพราะออกแบบมาไม่สุด เอาที่ชัด ๆ ก่อน

เริ่มตั้งแต่ปัญหาทาง Security ที่ค่อยๆ คลี่คลายไปในทางที่ดี

ปัญหาการ Upgrade หลังติดตั้งที่ดูแล้วจะทำให้ Cluster พังก่อนจะ Upgrade ได้

และปัญหาการ Install และ Upgrade Helm เพราะ ArgoCD เลือกที่จะใช้ helm template ส่งเข้า kubectl apply แทนที่จะใช้ Helm SDK ควบคุมการติดตั้ง

สองปัญหาหลังนี้แก้ได้ด้วย Flux แต่

แต่ว่าที่ผ่านมาเราลง ArgoCD พร้อมกับ Flux ใน Cluster เดียวกันไม่ได้ มันแย่งกัน Reconcile Resource แล้วก็แน่นอนว่าผลลัพธ์คือเละ

มาถึงจุดนึง ประมาณปีก่อน ผมเลยลองที่จะแกะ ArgoCD ดู ปรากฏว่าธาตุไฟเข้าแทรกไปหลายเดือน เลยทิ้งไว้ก่อน

ช่วงที่ผ่านมาไปเปิด Code ของ ArgoCD ดูอีกรอบ รอบนี้ดันเข้าใจ อาจจะเพราะว่าเขียน Kubernetes Controller มาหลาย ๆ รอบ พื้นฐานเลยแน่นขึ้น

สิ่งที่ทำออกมาก็คือผมรวม ArgoCD กับ Flux เข้าด้วยกันให้ทำงานร่วมกันได้ แบบไม่ตีกัน ทำให้ ArgoCD แสดงผล Workload ของ Flux ได้ — จะสังเกตเห็น Flux Icon เต็มไปหมด และขวามือสุดเห็น Terraform Resources จาก TF-Controller มั้ยครับ

และก็จะสามารถใช้ Flux แก้ปัญหาการ Upgrade แล้วพังของ ArgoCD ได้ถ้าเลือกให้ Flux เป็น Reconciler นั่นคือ เราสามารถ Upgrade ตัว ArgoCD ได้เพราะ Flux จะช่วยพยุง Cluster ให้ตอน ArgoCD ไม่มีอยู่ แล้วพอตัว ArgoCD กลับมาก็ใช้ UI ดู Workload ต่อ

และอีกปัญหาที่เพิ่งแก้ได้ก็คือ Helm ผมสร้าง mode ใหม่ให้ ArgoCD (flux://helm) เพื่อเพิ่มทางเลือกให้ติดตั้ง Helm Chart ได้แบบใช้ Flux ช่วย ตอน Upgrade จะได้ไม่มีปัญหา

ระบบที่สร้างขึ้นเพื่อใช้เชื่อมโลก 2 โลกของ GitOps เข้าด้วยกันนี้ ผมตั้งชื่อมันว่า

The Flux Subsystem for Argo

จบด้วยคำอวย (รึเปล่านะ) จากคนสร้าง ArgoCD ก็แล้วกัน

https://twitter.com/JesseSuen/status/1499531286557249548

--

--

Chanwit Kaewkasi

Creator Weave TF-controller, Kubernetes & GitOps for Terraform, SNR SE @weaveworks, Go nut since r57 (pre v1)