Deploy Application ด้วย Argo CD + Kustomize บน Cloud VPS
บทนำ
การ Deploy Application บนโครงสร้าง Kubernetes ในปัจจุบันต้องการเครื่องมือที่ทรงพลังและยืดหยุ่น โดย Argo CD และ Kustomize เป็นชุดเครื่องมือที่ได้รับความนิยมอย่างมากในการจัดการ Infrastructure as Code (IaC) และ Continuous Deployment (CD) บนแพลตฟอร์ม Kubernetes
บทความนี้จะอธิบายวิธีการใช้ Argo CD และ Kustomize เพื่อ Deploy Application บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง อย่างเป็นระบบและมีประสิทธิภาพสูง
Kustomize คืออะไร
Kustomize เป็นเครื่องมือที่ช่วยให้การจัดการไฟล์ YAML Kubernetes มีความยืดหยุ่นมากขึ้น โดยไม่จำเป็นต้องใช้ Template Engine เช่น Helm หรือ Jinja2
Kustomize ช่วยให้คุณสามารถ:
- สร้าง Base Configuration ที่ใช้ร่วมกันในหลายเวอร์ชัน
- สร้าง Overlays สำหรับแต่ละสภาพแวดล้อม (Development, Staging, Production)
- ใช้ Patches เพื่อแก้ไขค่าเฉพาะในแต่ละสภาพแวดล้อม
- จัดการ ConfigMap และ Secret อย่างมีประสิทธิภาพ
Argo CD และการทำงานกับ Kustomize
Argo CD เป็นเครื่องมือ GitOps สำหรับการจัดการ Continuous Deployment บน Kubernetes โดยทำการโคลน Repository จาก Git และทำการ Sync Configuration โดยอัตโนมัติ
เมื่อ Argo CD ทำงานร่วมกับ Kustomize จะเกิดประโยชน์ดังนี้:
- Argo CD อ่านไฟล์ kustomization.yaml จาก Repository
- Kustomize ทำการสร้าง Manifest YAML ฉบับสุดท้าย
- Argo CD ทำการ Deploy Manifest ไปยัง Kubernetes Cluster บน Cloud VPS
- โครงสร้าง Git จะกลายเป็น Single Source of Truth สำหรับการจัดการ Configuration
โครงสร้างไดเรกทอรี่และ Base/Overlays Pattern
การใช้ Kustomize อย่างมีประสิทธิภาพจำเป็นต้องมีโครงสร้างไดเรกทอรี่ที่เป็นระเบียบ:
my-app-repo/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ ├── service.yaml
│ └── configmap.yaml
├── overlays/
│ ├── dev/
│ │ ├── kustomization.yaml
│ │ └── patches/
│ ├── staging/
│ │ ├── kustomization.yaml
│ │ └── patches/
│ └── prod/
│ ├── kustomization.yaml
│ └── patches/
└── README.md
Base Directory: เก็บ Manifest YAML พื้นฐานที่ใช้ร่วมกัน
Overlays Directory: เก็บ Configuration เฉพาะของแต่ละสภาพแวดล้อม
ตัวอย่าง Base Configuration
ไฟล์ base/kustomization.yaml ที่กำหนด Resource พื้นฐาน:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: default
resources:
- deployment.yaml
- service.yaml
- configmap.yaml
commonLabels:
app: my-application
managed-by: kustomize
ไฟล์ base/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app:latest
ports:
- containerPort: 8080
env:
- name: APP_ENV
valueFrom:
configMapKeyRef:
name: app-config
key: environment
ไฟล์ base/service.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: my-app
ตัวอย่าง Overlays สำหรับสภาพแวดล้อมต่างๆ
ไฟล์ overlays/prod/kustomization.yaml สำหรับ Production Environment:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: production
bases:
- ../../base
commonLabels:
environment: production
replicas:
- name: my-app
count: 5
configMapGenerator:
- name: app-config
behavior: merge
literals:
- environment="production"
- log-level="warn"
images:
- name: my-app
newName: my-app
newTag: v1.0.0
ไฟล์ overlays/dev/kustomization.yaml สำหรับ Development Environment:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: development
bases:
- ../../base
commonLabels:
environment: development
replicas:
- name: my-app
count: 1
images:
- name: my-app
newName: my-app
newTag: latest
การตั้งค่า Argo CD สำหรับใช้งาน Kustomize
สร้างไฟล์ argocd-application.yaml เพื่อบอก Argo CD ว่าจะใช้ Kustomize:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/my-app-repo.git
targetRevision: main
path: overlays/prod
kustomize:
version: v5.0.0
commonLabels:
app: my-app
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
revisionHistoryLimit: 10
ขั้นตอนการ Deploy Application บน Cloud VPS
- เตรียมโครงสร้าง Repository: สร้าง Git Repository ตามโครงสร้างที่กำหนดในส่วนข้างต้น
- ติดตั้ง Argo CD: ติดตั้ง Argo CD บน Kubernetes Cluster บน ผู้ให้บริการโฮสติ้ง Cloud VPS
- เชื่อมต่อ Repository: เชื่อมต่อ Git Repository กับ Argo CD
- สร้าง Application Resource: สร้าง Application Resource ตามตัวอย่างข้างต้น
- ทดสอบ Sync: ทดสอบการ Sync ระหว่าง Git และ Kubernetes Cluster
- Monitor Deployment: ตรวจสอบสถานะของ Deployment ผ่าน Argo CD Dashboard
ข้อควรระวังและ Best Practices
- รักษา Secret แยกต่างหากและอย่าเก็บไว้ใน Repository
- ใช้ Tag Version ที่ชัดเจนแทน Latest Tag ใน Production
- ทดสอบ Configuration บน Environment ต่างๆ ก่อนนำไปใช้ใน Production
- ตั้งค่า Argo CD ให้ทำการ Sync โดยอัตโนมัติเฉพาะใน Development เท่านั้น
- เก็บ Patch Files และ Overlay Configuration อย่างเป็นระบบ
ผู้ให้บริการโฮสติ้ง Cloud VPS สำหรับการ Deploy
ผู้ให้บริการโฮสติ้ง Cloud VPS (https://de.co.th/cloud-vps) เป็นโซลูชันที่เหมาะสำหรับการจัดการ Kubernetes Cluster ขนาดใหญ่ โดยมีความปลอดภัย ความเสถียร และประสิทธิภาพสูง
ด้วยการใช้ Argo CD + Kustomize บน Cloud VPS จะช่วยให้:
- ลดเวลาในการ Deploy Application
- ปรับปรุงความเสถียรของระบบ
- ลดข้อผิดพลาดในการจัดการ Configuration
- เพิ่มความปลอดภัยของข้อมูลและระบบ
สรุป
การใช้ Argo CD และ Kustomize ร่วมกันเป็นวิธีที่ทรงพลังและมีประสิทธิภาพในการ Deploy Application บน Kubernetes Cluster โดยเฉพาะบน ผู้ให้บริการโฮสติ้ง Cloud VPS
ด้วยการปฏิบัติตามหลักการ GitOps และการใช้ Kustomize เพื่อจัดการ Configuration อย่างเป็นระบบ จะช่วยให้การจัดการ Infrastructure และ Application มีประสิทธิภาพและความปลอดภัยสูงสุด

