ในยุคของ DevOps และ Kubernetes ปัจจุบัน การจัดการการ Deploy แอปพลิเคชันด้วยเครื่องมืออัตโนมัติเป็นความจำเป็น Argo CD เป็นเครื่องมือ GitOps ที่ได้รับความนิยมมากสำหรับการ Deploy แอปพลิเคชันบน Kubernetes อย่างไรก็ตาม เมื่อต้องเรียกใช้ Argo CD ในสภาพแวดล้อม Production ที่มีความต้องการ High Availability (HA) เราจำเป็นต้องตั้งค่าให้มีการ Redundancy และ Failover อัตโนมัติ บทความนี้จะอธิบายขั้นตอนละเอียดในการตั้งค่า Argo CD ให้มีสถาปัตยกรรมแบบ High Availability บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง
เหตุใดจึงจำเป็นต้อง High Availability สำหรับ Argo CD ใน Production
Argo CD เป็นองค์ประกอบสำคัญในไปป์ไลน์การ Deploy ของบริษัท เมื่อ Argo CD ไม่พร้อมให้บริการ ระบบการ Deployment อัตโนมัติจะหยุดชะงัก ส่งผลให้ไม่สามารถ Deploy แอปพลิเคชันใหม่ หรืออัปเดตเวอร์ชันได้ นี่เป็นความเสี่ยงที่สูงสำหรับธุรกิจใดๆ ที่พึ่งพา Continuous Deployment
การตั้งค่า Argo CD แบบ High Availability จะช่วย:
- ลดเวลาหยุดชะงัก (Downtime) ของระบบ Deploy
- รับประกันความพร้อมใช้งานสูง (High Availability) ด้วยการ Redundancy ของ Component
- เพิ่มประสิทธิภาพในการจัดการ Repository และการประมวลผล Sync
- ปรับขนาด (Scale) Argo CD เพื่อรองรับจำนวน Repository และ Application ที่เพิ่มขึ้น
- ลดความเสี่ยงในการสูญหายข้อมูล ด้วยการใช้ External Database
สถาปัตยกรรม Argo CD High Availability
Argo CD HA ประกอบด้วย Component หลักดังนี้:
- API Server – บริการ REST API ที่จัดการคำขอจาก Client (พร้อมให้บริการผ่าน Multiple Replicas)
- Application Controller – ตรวจสอบสถานะของ Application และทำการ Sync (Multiple Replicas)
- Repo Server – ดึงข้อมูล Configuration จาก Git Repository (Multiple Replicas)
- Server (UI) – อินเทอร์เฟซผู้ใช้สำหรับการจัดการ Argo CD (Multiple Replicas)
- Redis – ระบบ Caching และ Session Management (HA Mode)
- PostgreSQL – ฐานข้อมูลสำหรับเก็บ State และ Configuration
ข้อกำหนดเบื้องต้น (Prerequisites)
Kubernetes Cluster แบบ Multi-Node
ในการตั้งค่า Argo CD HA คุณจำเป็นต้องมี Kubernetes Cluster ที่มีอย่างน้อย 3 Nodes ขึ้นไป (สำหรับ High Availability) บริการ Cloud VPS ของ ผู้ให้บริการโฮสติ้ง (https://de.co.th/cloud-vps) มีแพ็กเกจ Kubernetes ที่พร้อมสำหรับการตั้งค่าแบบนี้ โดยรองรับการจัดการ Multi-Node Cluster ได้อย่างสมบูรณ์
ตรวจสอบ Kubernetes Cluster ด้วยคำสั่ง:
kubectl get nodes
kubectl cluster-info
kubectl api-versions
Helm (เวอร์ชัน 3.x ขึ้นไป)
Helm เป็นเครื่องมือจัดการ Kubernetes Package ที่ทำให้การติดตั้ง Argo CD ง่ายขึ้น ติดตั้ง Helm ด้วยคำสั่ง:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
External Database (PostgreSQL)
เพื่อให้ Argo CD HA มีประสิทธิภาพสูงสุด ควรใช้ PostgreSQL ภายนอก (External Database) แทนการใช้ SQLite ที่เป็น Default
การติดตั้ง Argo CD HA
ขั้นตอนที่ 1: สร้าง Namespace
kubectl create namespace argocd
ขั้นตอนที่ 2: เพิ่ม Argo CD Helm Repository
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
ขั้นตอนที่ 3: สร้าง Values File สำหรับ HA Configuration
สร้างไฟล์ argocd-ha-values.yaml เพื่อกำหนดค่าสำหรับ High Availability:
global:
domain: argocd.example.com
server:
replicas: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
repoServer:
replicas: 3
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 1000m
memory: 1024Mi
applicationController:
replicas: 3
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 1000m
memory: 2Gi
redis:
enabled: true
replicas: 3
postgresql:
enabled: true
auth:
username: argocd
password: your-secure-password
database: argocd
configs:
secret:
argocdServerAdminPassword: your-bcrypt-hashed-password
ขั้นตอนที่ 4: ติดตั้ง Argo CD ด้วย Helm
helm install argocd argo/argo-cd \
--namespace argocd \
--values argocd-ha-values.yaml \
--version 6.0.0
ตรวจสอบการติดตั้งด้วยคำสั่ง:
kubectl get pods -n argocd
kubectl get services -n argocd
การตั้งค่า Redis High Availability
Redis เป็นส่วนสำคัญของ Argo CD HA สำหรับ Session และ Caching Management
ตรวจสอบ Redis Status
kubectl get pods -n argocd -l app.kubernetes.io/name=redis
กำหนดค่า Redis Sentinel (เพิ่มเติม)
สำหรับการ Failover อัตโนมัติของ Redis ให้ใช้ Redis Sentinel โดยแก้ไข Values ดังนี้:
redis:
sentinel:
enabled: true
quorum: 2
replicas: 3
การปรับขนาด Application Controller
Application Controller เป็นส่วนประมวลผลหลักของ Argo CD เมื่อต้องการให้การ Sync เร็วขึ้น ให้เพิ่มจำนวน Replicas:
kubectl scale deployment argocd-application-controller \
--replicas=3 -n argocd
ตรวจสอบการปรับขนาด:
kubectl get deployment argocd-application-controller -n argocd -o wide
การตั้งค่า Repo Server Replicas
Repo Server จัดการการดึงข้อมูลจาก Git Repository การเพิ่ม Replicas จะช่วยให้สามารถจัดการ Repository จำนวนมากได้:
kubectl scale deployment argocd-repo-server \
--replicas=3 -n argocd
การตั้งค่า Server (UI) Replicas
Server ให้บริการ Web UI และ gRPC API กำหนดค่าให้มี Multiple Replicas:
kubectl scale deployment argocd-server \
--replicas=3 -n argocd
การใช้ External PostgreSQL Database
เหตุใดต้อง External Database
Default Argo CD ใช้ SQLite ซึ่งเหมาะสำหรับการใช้งานขนาดเล็ก สำหรับ Production HA ควรใช้ PostgreSQL ที่จัดการแยกต่างหาก
กำหนดค่า PostgreSQL
configs:
secret:
# PostgreSQL Connection String
argocd-secret: |
server.db.host: postgres.example.com
server.db.port: 5432
server.db.database: argocd
server.db.username: argocd
server.db.password: your-secure-password
สร้าง Database และ User
CREATE DATABASE argocd;
CREATE USER argocd WITH PASSWORD 'your-secure-password';
GRANT ALL PRIVILEGES ON DATABASE argocd TO argocd;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO argocd;
การตั้งค่า Load Balancer สำหรับ Argo CD Server
ใน Production ให้ใช้ Load Balancer เพื่อกระจายการร้องขอไปยัง API Server Replicas
สร้าง Service แบบ LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: argocd-server-lb
namespace: argocd
spec:
type: LoadBalancer
selector:
app.kubernetes.io/name: argocd-server
ports:
- port: 443
targetPort: 8080
protocol: TCP
sessionAffinity: ClientIP
การเพิ่ม Dex สำหรับ OIDC Authentication
ในสภาพแวดล้อม Production ควรตั้งค่า OIDC Authentication แทนการใช้ Username/Password อย่างเดียว
dex:
enabled: true
config:
connectors:
- type: oidc
id: my-corp-oidc
name: My Corporation
config:
clientID: your-client-id
clientSecret: your-client-secret
redirectURI: https://argocd.example.com/api/dex/callback
issuer: https://your-oidc-provider.com
การ Monitoring และ Observability
เปิดใช้งาน Prometheus Metrics
kubectl port-forward svc/argocd-metrics -n argocd 8082:8082
ตรวจสอบ Health Status
kubectl exec -it deployment/argocd-server -n argocd -- \
argocd admin dashboard
ตั้งค่า Monitoring Dashboard
สามารถสร้าง Grafana Dashboard เพื่อ Monitor Argo CD Metrics ได้ โดยเชื่อมต่อกับ Prometheus
Best Practices สำหรับ Argo CD HA
1. ใช้ Resources Requests และ Limits อย่างเหมาะสม
กำหนด CPU และ Memory Requests/Limits ให้เหมาะสมเพื่อลดความเสี่ยงของ Node Eviction
2. ใช้ Pod Disruption Budget (PDB)
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: argocd-server-pdb
namespace: argocd
spec:
minAvailable: 2
selector:
matchLabels:
app.kubernetes.io/name: argocd-server
3. ตั้งค่า Health Check และ Probes
ตรวจสอบให้มี Liveness Probe และ Readiness Probe เพื่อ Kubernetes สามารถตรวจสอบสถานะได้
4. ใช้ Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-network-policy
namespace: argocd
spec:
podSelector:
matchLabels:
app.kubernetes.io/part-of: argocd
policyTypes:
- Ingress
- Egress
5. Backup และ Disaster Recovery
ตั้งค่า Backup สำหรับ PostgreSQL Database และ Git Repository Keys
kubectl exec -it pod/postgres -n argocd -- \
pg_dump -U argocd argocd > argocd-backup.sql
6. อัปเดตและ Upgrade Strategy
เมื่อต้อง Upgrade Argo CD ให้ใช้ Rolling Update Strategy:
kubectl set image deployment/argocd-server \
argocd-server=argoproj/argocd:v2.8.0 \
-n argocd
การ Troubleshooting Argo CD HA
ตรวจสอบ Pod Status
kubectl get pods -n argocd -o wide
kubectl describe pod <pod-name> -n argocd
ดูลอก (Logs)
kubectl logs -f deployment/argocd-server -n argocd
kubectl logs -f deployment/argocd-application-controller -n argocd
ตรวจสอบ Resource Usage
kubectl top nodes
kubectl top pods -n argocd
ตรวจสอบ Database Connectivity
kubectl exec -it pod/postgres -n argocd -- psql -U argocd -d argocd -c "SELECT version();"
สรุป
การตั้งค่า Argo CD แบบ High Availability สำหรับ Production เป็นขั้นตอนสำคัญสำหรับองค์กรที่พึ่งพา Continuous Deployment โดยการทำให้ Argo CD HA จะรับประกัน:
- ความพร้อมใช้งานสูง (High Availability) ด้วย Multiple Replicas
- ประสิทธิภาพที่ดีด้วย Load Balancer และ Scaling
- ความปลอดภัยของข้อมูล ด้วย External Database และ Backup
- ความสะดวกในการ Monitoring และ Troubleshooting
การใช้ Cloud VPS ของ ผู้ให้บริการโฮสติ้ง (https://de.co.th/cloud-vps) ให้ความยืดหยุ่นและการจัดการ Kubernetes Infrastructure ที่มีประสิทธิภาพ ช่วยให้คุณเน้นการทำ Configuration และ Deployment Strategy สำหรับ Argo CD HA ได้อย่างเต็มที่

