Argo CD Application คืออะไร?
Argo CD Application เป็นทรัพยากร Kubernetes Custom Resource Definition (CRD) ที่ใช้ในการบอก Argo CD ว่าควรจะนำใช้งาน (deploy) source code หรือ manifests จากที่ใด (source) ไปยังไหน (destination) บน Kubernetes cluster
Application resource ทำหน้าที่เป็นสะพานเชื่อมระหว่าง Git repository (ที่เก็บ Kubernetes manifests) และ Kubernetes cluster เมื่อมีการเปลี่ยนแปลงในโค้ดบน Git repository Argo CD จะตรวจสอบและอัปเดต cluster โดยอัตโนมัติ
ประโยชน์ของการใช้ Argo CD Application
- จัดการ declarative configuration ผ่าน Git
- ติดตามการเปลี่ยนแปลง (audit trail) ของ deployments
- ปรับปรุง reliability ด้วยการซิงโครไนซ์อัตโนมัติ
- ควบคุมการ rollback และ update ด้วย GitOps workflow
Application Manifest YAML – โครงสร้างพื้นฐาน
Argo CD Application ถูกกำหนดโดยใช้ YAML manifest ที่มีโครงสร้างดังต่อไปนี้:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-first-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/yourusername/your-repo
targetRevision: HEAD
path: manifests/
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
revisionHistoryLimit: 10
องค์ประกอบหลักของ Application Spec
Source (แหล่งที่มา): ระบุ Git repository URL ที่เก็บ Kubernetes manifests และ branch หรือ tag ที่ต้องการใช้
source:
repoURL: https://github.com/your-org/configs
targetRevision: main
path: apps/production/
helm:
releaseName: myapp
values: |
replicas: 3
image:
tag: v1.2.0
Destination (ปลายทาง): ระบุ Kubernetes cluster และ namespace ที่ต้องการนำใช้งาน Application
destination:
server: https://kubernetes.default.svc
namespace: production
name: in-cluster
Sync Policy (นโยบายการซิงโครไนซ์): ควบคุมวิธีการซิงโครไนซ์ระหว่าง Git state และ cluster state
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
สร้าง Application แรกของคุณ
วิธีที่ 1: ใช้ Argo CD CLI
หากคุณต้องการสร้าง Application ผ่าน command line interface สามารถใช้คำสั่งดังนี้:
argocd app create my-first-app \
--repo https://github.com/yourusername/your-repo \
--path manifests/ \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--auto-prune \
--self-heal
เมื่อสร้าง Application แล้ว ให้ตรวจสอบสถานะด้วยคำสั่ง:
argocd app get my-first-app
argocd app list
หากต้องการซิงโครไนซ์ (deploy) Application ให้ใช้คำสั่ง:
argocd app sync my-first-app
วิธีที่ 2: ใช้ Argo CD Web UI
Argo CD มี Web interface ที่สะดวกใจสำหรับการสร้างและจัดการ Applications:
- เข้าไปยัง Argo CD dashboard (โดยปกติ https://localhost:8080)
- คลิก “New App” button ที่มุมบน
- กรอกรายละเอียดดังนี้:
- Application Name: ชื่อ application เช่น “my-first-app”
- Project: เลือก “default” project
- Repository URL: URL ของ Git repository
- Revision: ระบุ branch เช่น “main” หรือ “HEAD”
- Path: path ไปยัง manifests directory เช่น “manifests/” หรือ “k8s/”
- Destination Cluster: เลือก cluster (in-cluster)
- Destination Namespace: ระบุ namespace เช่น “default” หรือ “production”
- เปิด “Sync Policy” และเลือก “Automated” เพื่อให้ sync อัตโนมัติ
- คลิก “Create” เพื่อสร้าง Application
การตั้งค่า Source และ Destination
Source Configuration
Source ในที่นี้หมายถึง Git repository ที่เก็บ Kubernetes manifests ของคุณ
source:
repoURL: https://github.com/organization/infrastructure-configs
targetRevision: v1.2.3
path: apps/web-app/
plugin:
name: my-custom-plugin
kustomize:
version: v4.5.2
commonLabels:
app: my-app
version: v1
Argo CD รองรับหลายวิธีในการแยกวิเคราะห์ manifests:
- Plain YAML: ไฟล์ Kubernetes manifests ธรรมดา
- Kustomize: ใช้ kustomization.yaml เพื่อปรับแต่ง manifests
- Helm: ใช้ Helm charts สำหรับการจัดการ templates
- Jsonnet: ใช้ Jsonnet สำหรับการสร้าง manifests แบบ dynamic
- Custom Plugins: ใช้ custom plugins สำหรับวิธีอื่น ๆ
Destination Configuration
Destination ระบุว่าจะนำใช้งาน Application ไปยัง cluster และ namespace ใด
destination:
server: https://kubernetes.example.com:6443
namespace: production
name: production-cluster
สำหรับการจัดการ infrastructure ขนาดใหญ่ที่ใช้ Kubernetes หลายตัว คุณสามารถใช้บริการ ผู้ให้บริการโฮสติ้ง Cloud VPS เพื่อรันและจัดการ Kubernetes clusters ที่มีความเสถียรสูง ด้วยประสิทธิภาพเหนือกว่า
Health Status และ Sync Status
Health Status
Health status บอกถึงสภาพของ resources ที่ deploy บน cluster
- Healthy: ทุก resources ทำงานได้ปกติและอยู่ในสถานะที่คาดหวัง
- Progressing: Resources กำลังเปลี่ยนสถานะไปยังสถานะที่ต้องการ
- Degraded: Resources มีปัญหาหรือไม่ทำงาน
- Unknown: ไม่สามารถบอกสถานะของ resources ได้
- Missing: Resources ที่ควรมีอยู่นั้นหายไป
Sync Status
Sync status แสดงว่า Application state ใน cluster ตรงกับ Git state หรือไม่
- Synced: Git state และ cluster state เหมือนกัน
- Out of Sync: Git state และ cluster state ไม่เหมือนกัน
- Unknown: ไม่สามารถตรวจสอบ sync status ได้
ดูรายละเอียดของ health และ sync status ด้วยคำสั่ง:
argocd app get my-first-app
argocd app wait my-first-app --health
การจัดการ Application
แก้ไข Application
หากต้องการเปลี่ยนแปลง Application configuration คุณสามารถแก้ไขได้สองวิธี:
วิธีที่ 1: ใช้ CLI
argocd app patch my-first-app --type merge \
-p '{"spec":{"source":{"targetRevision":"develop"}}}'
วิธีที่ 2: ใช้ Web UI – เปิด Application details แล้วคลิก “Edit” เพื่อแก้ไข YAML manifest
ซิงโครไนซ์ Application
บังคับให้ Application ซิงโครไนซ์กับ Git state:
argocd app sync my-first-app
argocd app sync my-first-app --force
argocd app sync my-first-app --prune
ลบ Application
ลบ Application เมื่อไม่ต้องการใช้งานอีกต่อไป:
argocd app delete my-first-app
argocd app delete my-first-app --cascade
Refresh Application
บังคับให้ Argo CD ตรวจสอบ Git repository และ refresh Application state:
argocd app get my-first-app --refresh
argocd app wait my-first-app
Best Practices สำหรับ Argo CD Application
โครงสร้าง Git Repository
จัดระเบียบ Git repository ให้มีโครงสร้างที่ชัดเจน:
your-repo/
├── apps/
│ ├── web-app/
│ │ ├── kustomization.yaml
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── api-app/
│ ├── deployment.yaml
│ └── service.yaml
├── base/
│ ├── namespace.yaml
│ └── rbac.yaml
└── overlays/
├── development/
│ └── kustomization.yaml
├── staging/
│ └── kustomization.yaml
└── production/
└── kustomization.yaml
ใช้ Git Branches สำหรับ Environments ต่างๆ
สร้าง Application หลายตัวที่ชี้ไปยัง branches ต่างกัน เพื่อจัดการ development staging และ production environments แยกกัน
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-production
spec:
source:
repoURL: https://github.com/org/repo
targetRevision: main
path: apps/myapp/
destination:
server: https://kubernetes.default.svc
namespace: production
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-staging
spec:
source:
repoURL: https://github.com/org/repo
targetRevision: develop
path: apps/myapp/
destination:
server: https://kubernetes.default.svc
namespace: staging
ตั้งค่า RBAC และ Access Control
กำหนดสิทธิ์การเข้าถึง Application ให้เหมาะสม:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: role:readonly
policy.csv: |
p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
p, role:admin, applications, *, */*, allow
g, dev-team, role:developer
g, ops-team, role:admin
ใช้ Application Sets สำหรับ Multi-Cluster Deployments
สำหรับการจัดการหลาย applications หรือหลาย clusters ให้ใช้ ApplicationSet:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-deployment
spec:
generators:
- list:
elements:
- cluster: production
namespace: prod
- cluster: staging
namespace: staging
template:
spec:
source:
repoURL: https://github.com/org/repo
path: apps/myapp/
targetRevision: main
destination:
server: '{{ cluster }}'
namespace: '{{ namespace }}'
การจัดการ Secrets อย่างปลอดภัย
ห้ามเก็บ secrets ในที่เปิดเผย ให้ใช้ Sealed Secrets หรือ External Secrets Operator:
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: my-secret
spec:
encryptedData:
password: AgBkS2fZs1...
template:
metadata:
name: my-secret
type: Opaque
ตรวจสอบและ Monitoring
ตั้งค่า monitoring สำหรับ Argo CD Applications:
- ใช้ Prometheus เพื่อเก็บเมตริกส์ของ Argo CD
- ตั้งค่า alerts สำหรับ sync failures และ health issues
- บันทึก audit logs ของการเปลี่ยนแปลง (changes)
- ตรวจสอบ Application status อย่างสม่ำเสมอ
สรุป
Argo CD Application คือเครื่องมือที่ทรงพลังสำหรับการจัดการ Kubernetes deployments ด้วยวิธี GitOps ด้วยการทำความเข้าใจเกี่ยวกับ Application manifest YAML การสร้าง Application ผ่าน CLI และ UI การตั้งค่า source และ destination ตลอดจนการปฏิบัติตามหลักปฏิบัติที่ดี คุณสามารถควบคุมและจัดการ applications บน Kubernetes ได้อย่างมีประสิทธิภาพและปลอดภัย
หากคุณกำลังวางแผนสร้าง infrastructure บน Kubernetes ให้พิจารณาใช้ ผู้ให้บริการโฮสติ้ง Cloud VPS สำหรับการรัน Kubernetes clusters ที่มีความจำเป็น ด้วยบริการ cloud ที่เชื่อถือได้ของเรา คุณสามารถมั่นใจได้ว่า applications ของคุณจะทำงานได้อย่างเสถียรและปลอดภัย

