กลยุทธ์จัดการ Multi-Cluster ด้วย Argo CD แบบ Centralized และ Hub-Spoke
ในยุคของระบบกระจายอำนาจและการปรับขนาดแอปพลิเคชันบนระบบคลาวด์ การจัดการหลายคลัสเตอร์ (Multi-Cluster Management) ได้กลายมาเป็นความท้าทายที่สำคัญสำหรับองค์กร บทความนี้จะนำเสนอวิธีการจัดการหลายคลัสเตอร์อย่างมีประสิทธิภาพโดยใช้ Argo CD
ข้อมูลพื้นฐานเกี่ยวกับการจัดการ Multi-Cluster
- ความพร้อมใช้งานสูง (High Availability) – การกระจายแอปพลิเคชันลดความเสี่ยงจากการหยุดทำงาน
- การลดเวลาแฝง (Latency Reduction) – การวางแอปพลิเคชันใกล้กับผู้ใช้งาน
- ความยืดหยุ่น (Flexibility) – สามารถเลือกทรัพยากรที่เหมาะสมสำหรับแต่ละภูมิภาค
- ความเป็นอิสระจากผู้จัดหา (Vendor Independence) – ไม่ขึ้นอยู่กับผู้ให้บริการเดียว
- การปรับขนาด (Scalability) – สามารถขยายขนาดของแอปพลิเคชัน
รูปแบบที่ 1: Centralized Model (แบบศูนย์กลาง)
นิยามและหลักการ
ในรูปแบบ Centralized Model จะมี Argo CD เพียงแห่งเดียวที่ใช้การจัดการหลายคลัสเตอร์พร้อมกัน คลัสเตอร์ Kubernetes ทั้งหมดจะได้รับการจัดการจากจุดควบคุมเดียว
+------------------+
| Argo CD Server |
| (Management) |
+--------+---------+
|
+--------------+--------------+
| | |
+--------+-----+ +-----+------+ +-----+------+
| Cluster Dev | | Cluster | | Cluster |
| | | Staging | | Production |
+--------------+ +------------+ +------------+
ตัวอย่างการตั้งค่า Centralized Model
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-dev
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/app-config.git
targetRevision: develop
path: overlays/dev
destination:
server: https://dev-cluster-api:6443
namespace: app-dev
syncPolicy:
automated:
prune: true
selfHeal: true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-production
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/app-config.git
targetRevision: main
path: overlays/production
destination:
server: https://prod-cluster-api:6443
namespace: app-production
syncPolicy:
automated:
prune: true
selfHeal: true
ข้อดีของ Centralized Model
- การจัดการง่าย เนื่องจากมีจุดควบคุมเพียงจุดเดียว
- ลดค่าใช้จ่ายในการดูแลรักษา
- มุมมองภาพรวมของทุกคลัสเตอร์ในที่เดียว
ข้อจำกัดของ Centralized Model
- จุดเดียวที่มีความเสี่ยง (Single Point of Failure)
- มีข้อจำกัดด้าน Scalability เมื่อมีคลัสเตอร์จำนวนมาก
- เวลาแฝงในการจัดการคลัสเตอร์ที่อยู่ห่างไกล
รูปแบบที่ 2: Hub-Spoke Model
นิยามและหลักการ
ในรูปแบบ Hub-Spoke Model จะมี Argo CD หลัก (Hub) ที่ทำหน้าที่เป็นศูนย์กลาง และมี Argo CD ย่อย (Spoke) ที่ทำงานในแต่ละคลัสเตอร์
+------------------+
| Argo CD Hub |
| (Management) |
+--------+---------+
|
+--------------+--------------+
| | |
+--------+-----+ +-----+------+ +-----+------+
| Argo CD | | Argo CD | | Argo CD |
| Spoke (Dev) | | Spoke(Stg) | | Spoke(Prod)|
+------+-------+ +-----+------+ +-----+------+
| | |
+------+-------+ +-----+------+ +-----+------+
| K8s Cluster | | K8s Cluster| | K8s Cluster|
| Dev | | Staging | | Production |
+--------------+ +------------+ +------------+
ตัวอย่างการตั้งค่า Hub-Spoke Model
# Hub Argo CD - จัดการ Spoke Argo CD instances
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: spoke-argocd-production
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/argocd-config.git
targetRevision: main
path: argocd-instances/production
helm:
values: |
server:
extraArgs:
- --insecure
configs:
repositories:
- url: https://github.com/your-org/app-config.git
destination:
server: https://prod-cluster-api:6443
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
ข้อดีของ Hub-Spoke Model
- ไม่มีจุดเดียวที่มีความเสี่ยง
- แต่ละคลัสเตอร์มีอิสระในการจัดการตัวเอง
- Scalability สูงกว่า Centralized Model
- รองรับการทำงานแบบ Offline
การเปรียบเทียบ Centralized vs Hub-Spoke
Centralized Model เหมาะสำหรับองค์กรขนาดเล็กถึงกลาง ที่มีคลัสเตอร์น้อยกว่า 10 แห่ง และต้องการความง่ายในการจัดการ
Hub-Spoke Model เหมาะสำหรับองค์กรขนาดใหญ่ ที่มีคลัสเตอร์มากกว่า 10 แห่ง และต้องการ High Availability และ Scalability สูง
ApplicationSet สำหรับ Multi-Cluster
Cluster Generator
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: multi-cluster-app
namespace: argocd
spec:
generators:
- clusters:
selector:
matchLabels:
env: production
region: asia
template:
metadata:
name: 'myapp-{{name}}'
spec:
project: default
source:
repoURL: https://github.com/your-org/app-config.git
targetRevision: main
path: overlays/production
destination:
server: '{{server}}'
namespace: myapp
syncPolicy:
automated:
prune: true
selfHeal: true
Git Generator
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: git-generator-app
namespace: argocd
spec:
generators:
- git:
repoURL: https://github.com/your-org/cluster-config.git
revision: main
directories:
- path: clusters/*
template:
metadata:
name: 'cluster-{{path.basename}}'
spec:
project: default
source:
repoURL: https://github.com/your-org/cluster-config.git
targetRevision: main
path: '{{path}}'
destination:
server: https://kubernetes.default.svc
namespace: default
ความปลอดภัยและ RBAC
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: production-apps
namespace: argocd
spec:
sourceRepos:
- 'https://github.com/your-org/app-config.git'
destinations:
- namespace: '*'
server: 'https://prod-cluster-api:6443'
clusterResourceWhitelist:
- group: '*'
kind: '*'
roles:
- name: production-admin
policies:
- p, proj:production-apps:production-admin, applications, *, production-apps/*, allow
groups:
- production-team
Disaster Recovery
# สำรองข้อมูล Argo CD
kubectl get applications -n argocd -o yaml > argocd-apps-backup.yaml
kubectl get appprojects -n argocd -o yaml > argocd-projects-backup.yaml
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster -o yaml > argocd-clusters-backup.yaml
การใช้ ผู้ให้บริการโฮสติ้ง Cloud VPS
ผู้ให้บริการโฮสติ้ง Cloud VPS (https://de.co.th/cloud-vps) เป็นตัวเลือกที่เหมาะสมสำหรับการรัน Multi-Cluster Kubernetes ด้วย Argo CD เนื่องจาก:
- ประสิทธิภาพสูง: ทรัพยากร CPU และ Memory ที่เพียงพอ
- ความเสถียร: Uptime สูง และการสนับสนุนจากทีมเทคนิค
- ความยืดหยุ่น: สามารถปรับขนาดทรัพยากรตามความต้องการ
- ความปลอดภัย: Firewall, VPC, และระบบรักษาความปลอดภัย
Best Practices
- แยก Repository สำหรับ Application Code และ Configuration
- ใช้ Kustomize หรือ Helm สำหรับการจัดการ Configuration ข้ามคลัสเตอร์
- ติดตั้ง Prometheus และ Grafana สำหรับ Monitoring
- ทดสอบ Disaster Recovery Plan เป็นระยะ
สรุป
การเลือกระหว่าง Centralized Model และ Hub-Spoke Model ขึ้นอยู่กับขนาดขององค์กร จำนวนคลัสเตอร์ และข้อกำหนดด้านความพร้อมใช้งาน ทั้งสองรูปแบบมีข้อดีและข้อเสียที่แตกต่างกัน และ Argo CD สามารถรองรับทั้งสองรูปแบบได้อย่างมีประสิทธิภาพ
สำหรับ Infrastructure ที่เหมาะสม ผู้ให้บริการโฮสติ้ง Cloud VPS (https://de.co.th/cloud-vps) มอบทรัพยากรและการสนับสนุนที่จำเป็นสำหรับการจัดการ Multi-Cluster Kubernetes อย่างมืออาชีพ

