Deploy Application ด้วย Argo CD + Helm Chart บน Cloud VPS
เรียนรู้วิธีการ Deploy Application โดยใช้ Argo CD ร่วมกับ Helm Chart บน Cloud VPS เพื่อให้ได้ระบบ Continuous Deployment ที่มีประสิทธิภาพและง่ายต่อการจัดการ
บทนำ: Argo CD กับ Helm Chart
การ Deploy Application ในสภาพแวดล้อม Kubernetes นั้นต้องการเครื่องมือที่มีประสิทธิภาพในการจัดการและควบคุม Argo CD เป็นเครื่องมือ Continuous Deployment (CD) ที่ถูกออกแบบมาเพื่อให้ Git ทำหน้าที่เป็น Single Source of Truth ในขณะที่ Helm Chart นั้นช่วยให้การ Package Application เป็นไปอย่างง่ายดายและสามารถนำไปใช้ซ้ำได้
การผสมผสาน Argo CD กับ Helm Chart นั้นเป็นวิธีที่ดีที่สุดสำหรับการจัดการ Application ขนาดใหญ่บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง
Helm Chart คืออะไร
Helm Chart เป็นแพคเกจสำหรับ Kubernetes ที่ประกอบด้วยชุดของ Template Files ที่สามารถเขียนข้อมูลค่าต่างๆ (Values) เข้าไปได้ Helm Chart ช่วยให้คุณสามารถ:
- บรรจุ Application ด้วย YAML Template ที่ยืดหยุ่น
- จัดการค่า Configuration ผ่านไฟล์ values.yaml
- นำ Application ไปใช้ซ้ำได้ในสภาพแวดล้อมต่างๆ
- ควบคุมเวอร์ชัน (Version Control) ของ Application
การสร้าง Helm Chart พื้นฐาน
ตัวอย่าง Chart.yaml สำหรับ Application บน Cloud VPS:
apiVersion: v2
name: myapp
description: A Helm chart for deploying application on ผู้ให้บริการโฮสติ้ง Cloud VPS
type: application
version: 1.0.0
appVersion: 1.0.0
ไฟล์ values.yaml สำหรับกำหนดค่าเริ่มต้น:
replicaCount: 3
image:
repository: myregistry.azurecr.io/myapp
pullPolicy: IfNotPresent
tag: "1.0.0"
service:
type: ClusterIP
port: 80
targetPort: 8080
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- host: myapp.example.com
paths:
- path: /
pathType: Prefix
Argo CD Integration กับ Helm Chart
Argo CD ช่วยให้ Git Repository กลายเป็น Source of Truth สำหรับการจัดการ Application Argo CD สามารถติดตามการเปลี่ยนแปลงใน Git และ Deploy โดยอัตโนมัติ
การสร้าง Argo CD Application ที่ใช้ Helm Chart:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/myapp-helm
targetRevision: main
path: ./chart
helm:
releaseName: myapp
values: |
replicaCount: 3
image:
tag: "1.0.0"
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
การกำหนดค่า Helm Values ใน Argo CD Application
Argo CD ให้คุณสามารถกำหนดค่า Helm Values ได้หลายวิธี เช่น inline values, values files, หรือ parameters
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-prod
namespace: argocd
spec:
source:
repoURL: https://github.com/myorg/myapp-helm
targetRevision: main
path: ./chart
helm:
releaseName: myapp
parameters:
- name: replicaCount
value: "3"
- name: image.tag
value: "1.0.0"
values: |
service:
type: LoadBalancer
ingress:
enabled: true
hostname: myapp-prod.example.com
destination:
server: https://kubernetes.default.svc
namespace: production
Helm Hooks กับ Argo CD Hooks
Helm Hooks และ Argo CD Hooks เป็นกลไกการ Hook ที่แตกต่างกัน
Helm Hooks: ใช้สำหรับการทำงานระหว่างการ Release (Install, Upgrade, Delete, Rollback)
apiVersion: batch/v1
kind: Job
metadata:
name: db-migration
annotations:
helm.sh/hook: pre-upgrade
helm.sh/hook-weight: "-5"
spec:
template:
spec:
containers:
- name: migration
image: myapp:1.0.0
command: ["./migrate.sh"]
restartPolicy: Never
Argo CD Hooks: ใช้สำหรับการทำงานระหว่างกระบวนการ Sync ของ Argo CD (PreSync, Sync, PostSync)
apiVersion: batch/v1
kind: Job
metadata:
name: smoke-test
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-phase: Succeeded
spec:
template:
spec:
containers:
- name: test
image: myapp-test:1.0.0
command: ["./run-tests.sh"]
restartPolicy: Never
Best Practices สำหรับ Argo CD + Helm Chart
- ใช้ Git as Single Source of Truth: เก็บ Helm Chart และ Configuration ไว้ใน Git Repository
- แยก Environment: สร้าง Directory แยกสำหรับแต่ละ Environment
- ใช้ Values Override: ใช้ไฟล์ values-prod.yaml สำหรับ Production
- Monitor Sync Status: ตรวจสอบสถานะ Sync ใน Argo CD Dashboard
- เปิดใช้ Auto Sync: กำหนด Automated Sync Policy
- ใช้ Namespace Isolation: แยก Application ออกจากกันด้วย Namespace
การ Deploy บน ผู้ให้บริการโฮสติ้ง Cloud VPS
วิธีการ Deploy Application ของคุณบน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง:
- สร้าง Git Repository ที่มี Helm Chart
- ติดตั้ง Argo CD บน Kubernetes Cluster ของ Cloud VPS
- สร้าง Argo CD Application Manifest ที่ชี้ไปยัง Git Repository
- กำหนดค่า syncPolicy สำหรับการ Deploy อัตโนมัติ
- ตรวจสอบและจัดการ Application ผ่าน Argo CD Web UI
Cloud VPS ของ ผู้ให้บริการโฮสติ้ง ให้คุณ Kubernetes Cluster ที่มีประสิทธิภาพสูง พร้อมด้วย Network Performance ที่ดี ทำให้เหมาะสำหรับการ Deploy Application ขนาดใหญ่
บทสรุป
การใช้ Argo CD ร่วมกับ Helm Chart นั้นเป็นวิธีที่ยอดเยี่ยมในการ Deploy และจัดการ Application บน Kubernetes Cloud VPS ของ ผู้ให้บริการโฮสติ้ง สามารถให้คุณ Continuous Deployment ที่ปลอดภัย Version Control ที่ชัดเจน Automation ที่ลดความผิดพลาด และ Scalability ที่สูงสำหรับการจัดการ Application หลายตัว
หากคุณต้องการ Infrastructure ที่ทรงพลัง สำหรับการ Deploy Application ด้วย Kubernetes Cloud VPS ของ ผู้ให้บริการโฮสติ้ง เป็นตัวเลือกที่ดีที่สุด

