Deploy Application ด้วย Argo CD + Helm Chart บน Cloud VPS

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 ของ ผู้ให้บริการโฮสติ้ง:

  1. สร้าง Git Repository ที่มี Helm Chart
  2. ติดตั้ง Argo CD บน Kubernetes Cluster ของ Cloud VPS
  3. สร้าง Argo CD Application Manifest ที่ชี้ไปยัง Git Repository
  4. กำหนดค่า syncPolicy สำหรับการ Deploy อัตโนมัติ
  5. ตรวจสอบและจัดการ 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 ของ ผู้ให้บริการโฮสติ้ง เป็นตัวเลือกที่ดีที่สุด