GitOps ด้วย ArgoCD
ใช้ Git เป็นแหล่งความจริงเดียว คลัสเตอร์ sync ตามอัตโนมัติ
พื้นฐานที่ควรรู้: ในอดีต เวลาจะนำแอปพลิเคชันขึ้นระบบ (Deploy) โปรแกรมเมอร์หรือสคริปต์อัตโนมัติจะต้องโยนโค้ดเข้าไปในเซิร์ฟเวอร์ แต่ GitOps เปลี่ยนแนวคิดใหม่ เป็นการให้เซิร์ฟเวอร์ไปดึง (Pull) ข้อมูลล่าสุดจาก Git มาใช้เอง วิธีนี้ปลอดภัยกว่าและรู้เสมอว่าเวอร์ชันปัจจุบันตรงกับโค้ดชุดไหน
GitOps เหมือนให้ Git เป็น "รีโมตต้นฉบับ" ของคลัสเตอร์ — อยากเปลี่ยนอะไรก็แก้ที่ Git แล้วมีตัวช่วย (ArgoCD) คอยเทียบว่าคลัสเตอร์ตรงกับ Git ไหม ถ้าไม่ตรงก็ดึงให้ตรง — เหมือน reconciliation loop แต่ระดับ "ทั้งระบบ"
แนวคิด GitOps: เก็บ manifest/Helm/Kustomize ทั้งหมดใน Git เป็น single source of truth · เครื่องมืออย่าง ArgoCD (หรือ Flux) เฝ้า repo แล้ว sync คลัสเตอร์ให้ตรงกับ Git อัตโนมัติ
Git เป็น source of truth · ArgoCD sync เข้าคลัสเตอร์
แก้ที่ Git เท่านั้น · drift ในคลัสเตอร์ถูกดึงกลับให้ตรง Git
- ตรวจสอบย้อนหลังได้ — ทุกการเปลี่ยนคือ commit มีคนอนุมัติผ่าน pull request
- ย้อนกลับง่าย —
git revertแล้วคลัสเตอร์กลับสภาพเดิม - กัน drift — ถ้ามีใครไปแก้คลัสเตอร์ตรง ๆ ArgoCD เห็นว่า "ไม่ตรง Git" แล้วดึงกลับ
- ไม่ต้องแจก credential คลัสเตอร์ ให้ CI — ArgoCD ดึงจาก Git เข้าไปเอง (ปลอดภัยกว่า push)
สรุป Key Takeaways
- GitOps = Git เป็น source of truth เดียว, ArgoCD/Flux sync คลัสเตอร์ให้ตรงอัตโนมัติ
- ได้ audit trail, rollback ด้วย git revert, กัน config drift
- ปลอดภัยกว่าเพราะ pull-based (ไม่ต้องแจก credential ให้ CI)
คำถามที่พบบ่อย
GitOps ต่างจาก CI/CD ที่ kubectl apply ใน pipeline ยังไง
ทิศทางกลับกัน: pipeline แบบเดิม "push" config เข้า cluster (pipeline ต้องถือสิทธิ์เข้า cluster) ส่วน GitOps มี agent ใน cluster (ArgoCD/Flux) คอย "pull" จาก git แล้ว sync ให้ตรง — ได้ audit จาก git history, rollback = git revert, และตรวจ drift อัตโนมัติเมื่อมีคนไปแก้มือ
ArgoCD ตรวจเจอ drift แล้วทำอะไร
แล้วแต่ตั้ง — โหมด manual จะแค่โชว์ OutOfSync ให้กดยืนยัน ส่วน auto-sync + selfHeal จะเขียนทับกลับให้ตรง git ทันที — production ที่วินัยดีเปิด selfHeal เพื่อการันตีว่า git คือความจริงเดียว ใครแก้มือก็ถูกดึงกลับ

