IT General
น้องๆ เคยเจอปัญหา deploy โค้ดแล้วพังไหม? หรือแก้ config ใน production แล้วลืมแก้ใน source code หรือเปล่า? GitOps นี่แหละคือทางออก! สมัยผมทำร้านเน็ตฯ เมื่อก่อน deploy ทีต้อง ssh เข้าไปแก้ไฟล์เอง เสี่ยงมาก! GitOps มันเหมือนมี auto-pilot คอยจัดการทุกอย่างให้เราปลอดภัยและเป็นระบบมากขึ้นเยอะเลย
GitOps คือการใช้ Git เป็น "single source of truth" สำหรับ infrastructure และ application state ทั้งหมด พูดง่ายๆ คือ ทุกอย่างที่เกี่ยวกับระบบเรา (โค้ด, config, infrastructure) ถูกเก็บไว้ใน Git repository แล้วใช้เครื่องมืออัตโนมัติจัดการให้ระบบเราเป็นไปตามที่ Git บอก
Argo CD และ Flux คือเครื่องมือยอดนิยมที่ช่วยให้เราทำ GitOps ได้ง่ายขึ้น คิดซะว่า Argo CD กับ Flux เป็น "คนงาน" ที่คอยฟังคำสั่งจาก Git แล้วจัดการทุกอย่างให้เป็นไปตามนั้น
Git คือหัวใจหลักของ GitOps ถ้าไม่เข้าใจ Git นี่จบเห่เลยนะน้อง! ต้องคล่องเรื่อง branch, commit, pull request, merge อะไรพวกนี้ สมัยก่อนตอนเริ่มทำเว็บ SiamCafe ผมใช้ CVS… โคตรทรมาน! พอมาเจอ Git ชีวิตดีขึ้นเยอะ
ลองดูคำสั่ง Git ง่ายๆ:
git clone
git checkout -b feature/new-feature
# แก้ไขไฟล์
git add .
git commit -m "Add new feature"
git push origin feature/new-feature
GitOps มักจะใช้กับ Kubernetes เพราะมัน scale ได้ดีและจัดการ application ได้ซับซ้อน แต่จริงๆ ก็ใช้กับอย่างอื่นได้นะ แค่ K8s มันฮิตสุด
ต้องเข้าใจ concepts พื้นฐานของ K8s เช่น Pod, Deployment, Service, Namespace, ConfigMap, Secret อะไรพวกนี้ ไม่งั้นจะงงว่า GitOps มันจัดการอะไรกันแน่
ตัวอย่าง K8s deployment YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
YAML คือภาษาที่ใช้ define configuration ใน K8s และ GitOps หลายๆ ตัว มันอ่านง่ายกว่า XML เยอะ แต่ก็ต้องระวังเรื่อง indentation นะ พลาดไปทีนี่ error เลย
YAML เป็น human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted. YAML targets many of the same communications applications as Extensible Markup Language (XML) but has a minimal syntax which intentionally differs from SGML.
เริ่มจากเลือกเครื่องมือ GitOps ก่อนเลยว่าจะใช้ Argo CD หรือ Flux ทั้งคู่มีข้อดีข้อเสียต่างกัน แต่หลักการทำงานคล้ายๆ กันคือ คอย sync state ของ K8s cluster ให้ตรงกับสิ่งที่อยู่ใน Git repository
จากนั้นก็สร้าง Git repository ที่เก็บ configuration ของ application และ infrastructure แบ่งเป็น folder ให้ชัดเจน เช่น /infrastructure, /applications, /environments
สุดท้ายก็ configure เครื่องมือ GitOps ให้เชื่อมต่อกับ Git repository ของเรา แล้วมันจะเริ่ม sync ทุกอย่างให้อัตโนมัติ
flux bootstrap github ได้เลยลองดูตัวอย่าง Kustomization resource:
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: my-app
namespace: flux-system
spec:
interval: 5m
path: ./deployments/my-app
prune: true
sourceRef:
kind: GitRepository
name: my-git-repo
ดูวิดีโอเพิ่มเติมเกี่ยวกับGitops Argocd Flux Guide:
Argo CD กับ Flux ต่างก็เป็นเครื่องมือ GitOps ที่ดีทั้งคู่ Argo CD จะเน้น UI ที่ใช้งานง่าย ส่วน Flux จะเน้น CLI และ Git native workflow เลือกอันที่เหมาะกับทีมเราครับ
สมัยผมเริ่มทำ SiamCafe ก็ต้องเลือกเครื่องมือเยอะแยะ สุดท้ายก็ต้องลองเองถึงจะรู้ว่าอะไรเหมาะกับเรา
| คุณสมบัติ | Argo CD | Flux |
|---|---|---|
| UI | มี UI ที่ใช้งานง่าย | เน้น CLI |
| Git Native | Support หลาย Git provider | Git native workflow |
| Multi-tenancy | ดีกว่า | รองรับ |
| Rollback | ง่าย | ต้องใช้ Git revert |
| Community | ใหญ่ | กำลังเติบโต |
ถ้าอยากอ่านเรื่องราว IT สนุกๆ เพิ่มเติม แวะไปที่ SiamCafe Blog ได้เลย
นอกจาก Argo CD และ Flux ก็ยังมีเครื่องมืออื่นๆ ที่ช่วยทำ GitOps ได้ เช่น Jenkins X, GitLab CI แต่สองตัวนี้จะเน้น CI/CD มากกว่า GitOps เป็นแค่ส่วนหนึ่งของ workflow
Jenkins X ซับซ้อนกว่า GitLab CI ใช้งานง่ายกว่า แต่ถ้าอยากได้ GitOps แบบ pureๆ Argo CD กับ Flux เวิร์คกว่าเยอะ
สุดท้ายนี้ อย่าลืมลองผิดลองถูก ไม่มีอะไรได้มาง่ายๆ เหมือนตอนผมทำร้านเน็ตฯ สมัยก่อน ต้องเจอปัญหาทุกรูปแบบ แต่ก็ทำให้เราเก่งขึ้นเยอะเลย
อ่านบทความอื่นๆ ที่น่าสนใจได้ที่ SiamCafe Blog ครับ!
เอาล่ะน้องๆ หลังจากที่เราปูพื้นเรื่อง GitOps, Argo CD, และ Flux กันไปแล้ว คราวนี้มาถึงของจริงกันบ้าง นั่นคือ เคล็ดลับที่พี่บอมสั่งสมมาจากการใช้งานจริงในสนามรบ IT กว่า 28 ปี สมัยผมทำร้านเน็ต SiamCafe นี่แหละ เจอปัญหามาเยอะ เจ็บมาเยอะ เลยอยากมาแชร์ให้พวกเราได้เอาไปใช้กันแบบไม่ต้องเสียเวลาลองผิดลองถูกเอง
1. Structure โฟลเดอร์ให้ดี มีชัยไปกว่าครึ่ง: สมัยก่อนตอนทำร้านเกมส์ นี่แหละครับ ผมเจอปัญหาเยอะมากเพราะไม่ได้จัดระเบียบไฟล์ให้ดี พอร้านใหญ่ขึ้น ลูกค้าเยอะขึ้น config มั่วไปหมด GitOps ก็เหมือนกันนะน้อง ถ้าเราไม่จัดโครงสร้างโฟลเดอร์ให้ดีๆ ใน Git repository ของเรา จะกลายเป็นนรกดีๆ นี่เอง
ลองดูตัวอย่างโครงสร้างที่พี่ใช้บ่อยๆ:
├── clusters
│ ├── production
│ │ └── manifests
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── staging
│ └── manifests
│ ├── deployment.yaml
│ └── service.yaml
├── applications
│ └── my-app
│ └── kustomization.yaml
└── base
└── my-app
├── deployment.yaml
└── service.yaml
จะเห็นว่าเราแยก `clusters` (environments), `applications` (แต่ละแอปพลิเคชัน), และ `base` (manifests พื้นฐาน) ชัดเจน เวลาแก้ config หรือ deploy อะไร จะได้หาเจอง่ายๆ
2. ใช้ Kustomize หรือ Helm: อย่าพยายามเขียน Kubernetes manifests เองทั้งหมดตั้งแต่ต้น มันเสียเวลา! ใช้เครื่องมืออย่าง Kustomize หรือ Helm ช่วยในการจัดการ config จะดีกว่า Kustomize เหมาะกับการ customize manifests ที่มีอยู่แล้ว ส่วน Helm เหมาะกับการ package แอปพลิเคชันที่ซับซ้อน
3. Git Branching Strategy สำคัญมาก: สมัยก่อนตอนทำเว็บ SiamCafe ผมเคยพลาดเรื่องนี้มาแล้ว คือแก้ code ใน branch หลักโดยตรง พอ deploy ขึ้น production ปุ๊บ พัง! Git branching strategy ที่ดีจะช่วยป้องกันปัญหานี้ได้ ลองใช้ Gitflow หรือ GitHub Flow ดู แล้วแต่ความเหมาะสมของทีม
4. Monitoring & Alerting: GitOps ไม่ใช่แค่การ deploy code นะน้อง มันคือการ maintain state ด้วย เพราะฉะนั้นเราต้องมีระบบ monitoring และ alerting ที่ดี คอยเช็คว่าทุกอย่างยังทำงานปกติไหม ถ้ามีอะไรผิดปกติ จะได้รู้ตัวทัน
อันนี้ตอบยากเหมือนถามว่า "กินข้าวมันไก่ร้านไหนอร่อยกว่ากัน" มันแล้วแต่ความชอบและ use case ของแต่ละคน Argo CD เหมาะกับคนที่ต้องการ UI ที่สวยงาม และ features ที่ครบครัน ส่วน Flux เหมาะกับคนที่ชอบความเรียบง่าย และเน้น Git-centric workflow
ไม่เสมอไป GitOps เหมาะกับโปรเจ็กต์ที่ต้องการความ repeatable, auditable, และ automated ในการ deploy แต่ถ้าโปรเจ็กต์เล็กๆ หรือไม่มีทีมที่เชี่ยวชาญด้าน Kubernetes การใช้ GitOps อาจจะ overkill
สำคัญมากๆ! เพราะทุกอย่างมันอยู่ใน Git หมดเลย ถ้าใครเข้าถึง Git repository ของเราได้ ก็เหมือนกับได้กุญแจบ้านเราไป ดังนั้นต้องดูแลเรื่อง access control, secrets management, และ auditing ให้ดี
นอกจาก Argo CD และ Flux แล้ว ยังมีเครื่องมืออื่นๆ อีกมากมาย เช่น Jenkins X, Tekton, และ Spinnaker ลองศึกษาดู แล้วเลือกใช้ให้เหมาะสมกับทีม
GitOps เป็น paradigm ที่น่าสนใจ และมีประโยชน์มากในการจัดการ infrastructure และ application deployments แต่ก็ต้องศึกษาและทำความเข้าใจให้ดีก่อนนำไปใช้จริง อย่าลืมว่าไม่มี silver bullet อะไรที่แก้ปัญหาได้ทุกอย่าง เลือกใช้เครื่องมือและ practices ที่เหมาะสมกับทีม และโปรเจ็กต์ของเรา
ถ้าใครอยากรู้เรื่อง cloud เพิ่มเติม ลองไปดูที่ iCafeForex ได้นะครับ
และอย่าลืมแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ด้วยนะ มีอะไรดีๆ อีกเยอะเลย