Push-based vs Pull-based Deployment คืออะไร
ในโลกของ DevOps และ Container Orchestration การ Deploy Application ไปยัง Kubernetes Cluster มีสองแบบหลักที่ต้องเข้าใจความแตกต่างกัน คือ Push-based Deployment และ Pull-based Deployment แต่ละแบบมีข้อดีและข้อเสียที่ส่งผลต่อความปลอดภัย ประสิทธิภาพ และความน่าเชื่อถือของระบบ
Argo CD เป็น GitOps Tool ที่ได้รับความนิยมในปัจจุบัน และได้เลือกใช้ Pull-based Deployment Model เป็นวิธีการหลัก ซึ่งเป็นการตัดสินใจที่มีหลักการทางสถาปัตยกรรมอย่างชัดเจน บทความนี้จะอธิบายความแตกต่างและเหตุผลในการเลือกแบบ Pull-based
Push-based Deployment คืออะไร
นิยามและแนวคิด
Push-based Deployment เป็นรูปแบบการ Deploy ที่ระบบ CI/CD เป็นผู้ Push Code หรือ Docker Image ไปยัง Kubernetes Cluster โดยตรง เมื่อมีการเปลี่ยนแปลงใน Repository
วิธีการทำงาน:
- Developer Commit Code ไปยัง Git Repository
- CI/CD Pipeline (เช่น Jenkins, GitLab CI, GitHub Actions) ตรวจพบการเปลี่ยนแปลง
- Pipeline Build Docker Image และ Push ไปยัง Container Registry
- CI/CD Pipeline ส่ง Command ไปยัง Kubernetes API Server เพื่อสั่ง Deploy
- Kubernetes Cluster เปลี่ยนสถานะ Resource ตามคำสั่ง
ข้อดีของ Push-based Deployment
- การ Deploy ทันที: ไม่ต้องรอให้ Argo CD Poll Repository ผลลัพธ์คือ Deployment เกิดขึ้นทันทีเมื่อ CI/CD สั่งการ
- ความเรียบง่าย: สำหรับทีมที่คุ้นเคยกับ CI/CD แบบดั้งเดิม เข้าใจวิธีการทำงานได้ง่าย
- การควบคุมเต็มที่: CI/CD Pipeline มีการควบคุมโดยตรงต่อการ Deploy
ข้อเสียและปัญหาของ Push-based Deployment
- ความปลอดภัยน้อยกว่า: Cluster Credentials ต้องเก็บไว้ใน CI/CD System ซึ่งเป็นจุดอ่อนสำหรับการโจมตี
- ไม่มี Self-healing: ถ้ามีการเปลี่ยนการตั้งค่า Cluster โดยตรง (Manual Change) ระบบจะไม่รู้และไม่แก้ไข
- ไม่มี Single Source of Truth: Repository ไม่ได้สะท้อนสถานะจริงของ Cluster ทำให้ยากต่อการ Audit และ Troubleshooting
- Credential Management ยุ่งยาก: ต้องจัดการ Kubernetes API Access Token ในหลาย CI/CD System
- ปัญหาด้าน Network: Cluster ต้องเปิด API Server ให้ CI/CD เข้าถึงได้จากภายนอก
Pull-based Deployment (GitOps Model) คืออะไร
นิยามและแนวคิด
Pull-based Deployment หรือที่รู้จักกันในชื่อ GitOps Model เป็นรูปแบบการ Deploy ที่ตัว Agent ภายใน Cluster เป็นผู้ Pull Configuration จาก Git Repository อย่างต่อเนื่อง
วิธีการทำงาน:
- Developer Commit Configuration ไปยัง Git Repository
- Argo CD Controller ภายใน Kubernetes Poll Git Repository เป็นระยะ (Default: 3 นาที)
- Argo CD เปรียบเทียบสถานะใน Repository กับสถานะจริงใน Cluster
- ถ้าพบความแตกต่าง Argo CD จะ Update Cluster ให้ตรงกับ Repository
- ไม่มีการส่ง Credentials ออกไปยัง CI/CD System ภายนอก
ข้อดีของ Pull-based Deployment
- ความปลอดภัยสูงขึ้น: Cluster Credentials ยังคงอยู่ภายใน Cluster เท่านั้น ไม่ต้อง Expose ไปยัง CI/CD System ภายนอก
- Single Source of Truth: Git Repository เป็นแหล่งข้อมูลเดียวที่ถูกต้อง ทุกสิ่งที่ควรมีใน Cluster ต้องอยู่ใน Repository
- Self-healing: Argo CD ตรวจจับ Drift (ความแตกต่าง) ระหว่าง Repository กับ Cluster โดยอัตโนมัติ และแก้ไขให้สอดคล้องกัน
- Audit Trail: ทุก Change มี Git Commit History ทำให้สามารถติดตามการเปลี่ยนแปลงได้อย่างชัดเจน
- Permission Management ง่ายขึ้น: ไม่ต้องจัดการ Kubernetes API Credentials ในหลาย System
- Network Flexibility: Cluster ไม่ต้องเปิด API ให้ CI/CD เข้าถึง ทำให้ปลอดภัยมากขึ้น
- Rollback ง่าย: Rollback เป็นเพียงการ Revert Git Commit ทำได้อย่างรวดเร็วและปลอดภัย
ข้อเสียของ Pull-based Deployment
- Deployment ไม่ทันที: Argo CD ต้อง Poll Repository ทุก 3 นาที (ตั้งค่าได้) ทำให้ Deployment อาจล่าช้าเล็กน้อย
- ต้องตั้งค่า Webhook: เพื่อให้ Argo CD ตอบสนองทันทีเมื่อมี Commit ใหม่ ต้องตั้งค่า Webhook เพิ่มเติม
- ต้องติดตั้ง Tool เพิ่มเติม: ต้องติดตั้ง Argo CD ในระบบ Kubernetes
ตารางเปรียบเทียบ Push-based vs Pull-based Deployment
| เกณฑ์ประเมิน | Push-based | Pull-based (Argo CD) |
|---|---|---|
| ความปลอดภัย | ต่ำกว่า (Credentials อยู่ใน CI/CD) | สูงกว่า (Credentials อยู่ใน Cluster) |
| ความเร็ว Deploy | ทันที | ล่าช้า 3 นาที (ใช้ Webhook ได้ทันที) |
| Self-healing | ไม่มี | มี (ตรวจจับและแก้ไข Drift อัตโนมัติ) |
| Single Source of Truth | ไม่มี | มี (Git Repository) |
| Audit Trail | ยากต่อการติดตาม | ชัดเจน (Git History) |
| Rollback | ต้องสั่ง CI/CD ใหม่ | Revert Git Commit |
| Network Requirement | ต้องเปิด Cluster API | ไม่ต้องเปิด Cluster API |
| ความซับซ้อน | ต่ำ | ปานกลาง (ต้องติดตั้ง Argo CD) |
ทำไม Argo CD เลือก Pull-based Model
หลักการพื้นฐานของ GitOps
Argo CD ถูกออกแบบมาตั้งแต่แรกด้วยปรัชญา GitOps ซึ่งกำหนดว่า Git Repository ควรเป็น Single Source of Truth สำหรับสถานะของระบบทั้งหมด การเลือก Pull-based Model สะท้อนหลักการนี้โดยตรง
ข้อดีด้านการออกแบบระบบ
- Declarative Configuration: Configuration อยู่ในรูปแบบ YAML Manifest ที่อธิบายสถานะที่ต้องการ (Desired State) ได้ชัดเจน
- Immutability: Git Commit เป็น Immutable Record ไม่สามารถเปลี่ยนแปลงได้โดยไม่มี Trace
- Traceability: สามารถติดตามการเปลี่ยนแปลงทั้งหมดผ่าน Git Log
- Scalability: ในสถาปัตยกรรมที่มี Cluster หลายตัว การ Pull Configuration จาก Repository เดียวทำให้จัดการได้ง่าย
ความปลอดภัยเป็นสิ่งสำคัญที่สุด
ในยุคปัจจุบันที่ Security เป็นเรื่องสำคัญขององค์กร Pull-based Model ให้ความปลอดภัยที่ดีกว่าอย่างชัดเจน:
- Cluster Credentials ไม่ต้องเปิดเผยให้ CI/CD System หรือบุคคลภายนอก
- Cluster สามารถทำงานใน Network แบบปิด (Private Network) ได้
- ลด Attack Surface ด้วยการไม่ต้อง Expose API Credentials
Self-healing และ Drift Detection ของ Argo CD
Drift Detection คืออะไร
Drift Detection คือการตรวจหาความแตกต่าง (Drift) ระหว่างสถานะที่กำหนดใน Git Repository กับสถานะจริงใน Kubernetes Cluster
ตัวอย่างเหตุการณ์ที่ทำให้เกิด Drift:
- Admin ใช้ kubectl edit เปลี่ยน Configuration โดยตรง
- Manual Scaling จำนวน Pod Replica
- เปลี่ยน Environment Variable ผ่าน Dashboard Tool
- Image ในระบบถูกเปลี่ยนโดยไม่ได้บันทึกลง Git
Self-healing ทำงานอย่างไร
Argo CD ตรวจหา Drift และแก้ไขโดยอัตโนมัติตามขั้นตอนนี้:
- Argo CD Controller ทำการ Poll Git Repository ตามระยะเวลาที่กำหนด
- ดึง Configuration ล่าสุดจาก Repository
- เปรียบเทียบกับสถานะปัจจุบันใน Cluster
- ถ้าพบความแตกต่าง จะ Apply Configuration จาก Repository ให้ Cluster
- Cluster กลับมาสู่สถานะที่ต้องการ (Desired State)
กระบวนการนี้เรียกว่า Continuous Reconciliation ซึ่ง Argo CD ทำการประสานสถานะของระบบอย่างต่อเนื่อง
การใช้ Pull-based Deployment บน ผู้ให้บริการโฮสติ้ง Cloud VPS
สำหรับผู้ใช้งาน ผู้ให้บริการโฮสติ้ง Cloud VPS การใช้ Argo CD กับ Pull-based Model มีข้อดีที่ชัดเจน:
- ความปลอดภัยสูง: Kubernetes Cluster บน Cloud VPS ไม่ต้อง Expose API ให้ภายนอก
- ติดตั้งได้ง่าย: Argo CD สามารถติดตั้งได้ง่ายบน Kubernetes Cluster ที่รันบน Cloud VPS
- Resource Efficient: Argo CD ใช้ Resource น้อยเมื่อเทียบกับการรัน CI/CD Agent ทั้งตัว
- Compliance Ready: Git History ช่วยให้เป็นไปตามข้อกำหนด Compliance ได้
Best Practices สำหรับ Pull-based Deployment
- ตั้งค่า Sync Policy ให้เหมาะสม: ใช้ Manual Sync สำหรับ Production และ Auto Sync สำหรับ Development
- ใช้ Webhook: ตั้งค่า Webhook จาก Git Provider เพื่อลด Latency ในการ Deploy
- จัดระเบียบ Repository: ใช้ Kustomize หรือ Helm เพื่อจัดการ Multiple Environments
- ตั้งค่า RBAC: กำหนดสิทธิ์ของ Argo CD ให้เหมาะสมตามหลัก Least Privilege
- ตั้งค่า Monitoring: ใช้ Prometheus และ Grafana ตรวจสอบสถานะ Argo CD
สรุป
Push-based Deployment เป็นรูปแบบที่ CI/CD Push Code ไปยัง Cluster โดยตรง ขณะที่ Pull-based Deployment เป็นรูปแบบที่ Cluster Pull Configuration จาก Git Repository Argo CD เลือก Pull-based Model เพราะข้อดีด้านความปลอดภัย Self-healing Drift Detection และ Audit Trail ที่ชัดเจน
สำหรับผู้ใช้งาน ผู้ให้บริการโฮสติ้ง Cloud VPS การใช้ Argo CD ร่วมกับ Pull-based Model เป็นทางเลือกที่ตอบโจทย์ทั้งด้านประสิทธิภาพและความปลอดภัย เริ่มต้นใช้งาน Argo CD บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง ได้ที่ de.co.th/cloud-vps

