Workshop: สร้างระบบ GitOps ครบวงจรด้วย Argo CD บน Cloud VPS ของ Dot Enterprise

Workshop: สร้างระบบ GitOps ครบวงจรด้วย Argo CD บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง

บทนำ: GitOps เป็นแนวทางในการจัดการโครงสร้างพื้นฐาน (Infrastructure) และแอปพลิเคชันโดยใช้ Git เป็นแหล่งความจริง (Source of Truth) ของระบบ การเรียนรู้ Argo CD บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง จะช่วยให้คุณสามารถนำไปใช้ในสภาพแวดล้อมการทำงานจริง (Production) ได้อย่างมั่นใจและปลอดภัย

1. บทบาท GitOps และ Argo CD ในอุตสาหกรรม

GitOps เป็นการรวมกลมกลืนระหว่าง DevOps และ Git Workflow ที่ให้ความสำคัญต่อ Declarative Infrastructure และ Continuous Deployment โดยความหลัก:

  • Git เป็นแหล่งความจริง: ทุกการเปลี่ยนแปลงไปยังระบบจะถูกบันทึกใน Git Repository
  • Automation: การ Deploy จะเกิดขึ้นโดยอัตโนมัติเมื่อมีการ Commit ใหม่
  • Observability: สามารถติดตามสถานะของระบบได้ทุกเวลา

2. สถาปัตยกรรม GitOps ที่สมบูรณ์

ก่อนเริ่มต้นการสร้างระบบ GitOps บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง คุณต้องเข้าใจส่วนประกอบหลัก:

2.1 ส่วนประกอบหลัก

┌─────────────┐
│ Git Repo    │ ← Source of Truth (Config + Code)
└──────┬──────┘
       │
       ▼
┌─────────────────────┐
│ CI Pipeline (GitHub │
│ Actions/GitLab CI)  │ ← Build & Test
└──────┬──────────────┘
       │
       ▼
┌──────────────────────┐
│ Image Registry       │ ← Store Docker Images
│ (Docker Hub/ECR)     │
└──────┬───────────────┘
       │
       ▼
┌─────────────────────────────┐
│ Argo CD on Cloud VPS        │
│ (GitOps Sync Controller)    │ ← Auto Deploy
└──────┬──────────────────────┘
       │
       ▼
┌──────────────────────────────┐
│ Kubernetes Cluster          │
│ (Running on Cloud VPS)      │ ← Production
└──────────────────────────────┘

3. ตั้งค่า Kubernetes บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง

3.1 เลือก Cloud VPS ที่เหมาะสม

สำหรับการรัน Kubernetes Cluster แนะนำให้ใช้ Cloud VPS ของ ผู้ให้บริการโฮสติ้ง ที่มีข้อกำหนด:

  • CPU: 4 cores ขึ้นไป
  • RAM: 8GB ขึ้นไป
  • Storage: 50GB ขึ้นไป

3.2 ติดตั้ง Kubernetes (kubeadm)

# อัปเดต System
sudo apt-get update
sudo apt-get upgrade -y

# ติดตั้ง Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# ติดตั้ง kubeadm, kubelet, kubectl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install -y kubeadm kubelet kubectl

# เริ่มต้น Control Plane
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# Configure kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# ติดตั้ง Network Plugin (Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

4. ติดตั้งและตั้งค่า Argo CD

4.1 Create Namespace และ Install Argo CD

# Create namespace สำหรับ Argo CD
kubectl create namespace argocd

# ติดตั้ง Argo CD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# รอให้ Pod ทั้งหมดพร้อม
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server -n argocd --timeout=300s

4.2 Access Argo CD Web UI

# Port Forward เพื่อเข้าถึง Argo CD UI
kubectl port-forward svc/argocd-server -n argocd 8080:443

# ดึง Initial Password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

5. ตั้งค่า Git Repository เป็น Source of Truth

5.1 โครงสร้าง Git Repository

gitops-repo/
├── apps/
│   ├── myapp/
│   │   ├── kustomization.yaml
│   │   ├── deployment.yaml
│   │   └── service.yaml
│   └── database/
│       └── kustomization.yaml
├── clusters/
│   ├── production/
│   │   └── kustomization.yaml
│   └── staging/
│       └── kustomization.yaml
└── README.md

5.2 ตัวอย่าง Deployment Manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v1.0.0
        ports:
        - containerPort: 8080
        env:
        - name: ENVIRONMENT
          value: "production"
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"

6. สร้าง Application ใน Argo CD

6.1 Argo CD Application Manifest

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourorg/gitops-repo.git
    targetRevision: main
    path: apps/myapp
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

6.2 Apply Application ใน Cluster

kubectl apply -f argocd-application.yaml

# ตรวจสอบสถานะ
kubectl get applications -n argocd
kubectl describe application myapp -n argocd

7. ตั้งค่า CI Pipeline ด้วย GitHub Actions

7.1 GitHub Actions Workflow

name: Build and Push Image

on:
  push:
    branches:
      - main
    paths:
      - 'src/**'
      - 'Dockerfile'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Build Docker Image
      run: |
        docker build -t myrepo/myapp:${{ github.sha }} .
        docker tag myrepo/myapp:${{ github.sha }} myrepo/myapp:latest

    - name: Push to Registry
      run: |
        echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
        docker push myrepo/myapp:${{ github.sha }}
        docker push myrepo/myapp:latest

    - name: Update GitOps Repo
      run: |
        git clone https://github.com/yourorg/gitops-repo.git
        cd gitops-repo
        sed -i "s|image:.*|image: myrepo/myapp:${{ github.sha }}|g" apps/myapp/deployment.yaml
        git add apps/myapp/deployment.yaml
        git commit -m "Update image to ${{ github.sha }}"
        git push

8. การ Sync และ Deploy โดยอัตโนมัติ

8.1 Auto Sync Policy

Argo CD จะติดตามการเปลี่ยนแปลงใน Git Repository และ Sync โดยอัตโนมัติ:

# Monitor Sync Status
kubectl logs -f deployment/argocd-application-controller -n argocd

# Manual Sync (if needed)
argocd app sync myapp

# Full Sync with Retry
argocd app sync myapp --retry-limit=5

9. ติดตั้ง Monitoring และ Logging

9.1 ติดตั้ง Prometheus และ Grafana

# ติดตั้ง Prometheus Operator
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack

# ติดตั้ง Grafana
helm install grafana grafana/grafana

# ดู Grafana Password
kubectl get secret grafana -o jsonpath="{.data.admin-password}" | base64 --decode

10. Security Best Practices สำหรับ GitOps

10.1 ปกป้องข้อมูลลับ

  • ใช้ Sealed Secrets: ห้ามใส่ Secrets ลงใน Git อย่างตรงไป
  • RBAC: จำกัดสิทธิ์การเข้าถึง Kubernetes
  • Network Policies: ควบคุมการสื่อสารระหว่าง Pod

10.2 Install Sealed Secrets

helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm install sealed-secrets -n kube-system sealed-secrets/sealed-secrets

# Encrypt Secret
echo -n mypassword | kubectl create secret generic mysecret \
  --dry-run=client --from-file=/dev/stdin -o yaml | \
  kubeseal -f -

11. Production Checklist สำหรับ GitOps

  • Kubernetes Cluster ทั้งหมด upgraded และ secured
  • Argo CD ติดตั้งและ Configured ด้วย TLS Certificate ที่ valid
  • Git Repository มี Branch Protection และ Code Review Process
  • CI/CD Pipeline สมบูรณ์และ Automated Testing ผ่าน
  • Monitoring และ Alerting ตั้งค่าแล้ว
  • Backup Strategy สำหรับ Persistent Data
  • Disaster Recovery Plan พร้อมใช้งาน
  • Security Scanning สำหรับ Container Images
  • RBAC และ Network Policies ตั้งค่าแล้ว
  • Logging Centralized ใช้งานแล้ว

12. ตัวอย่างใช้งาน End-to-End

วงจร GitOps ที่สมบูรณ์:

  1. Developer Commit Code ไปยัง Git Repository
  2. GitHub Actions Build Docker Image และ Test
  3. Push Image ไปยัง Docker Registry
  4. Update Git Repository ด้วย Image Tag ใหม่
  5. Argo CD Detect Change และ Sync อัตโนมัติ
  6. Kubernetes Deploy Application Version ใหม่
  7. Monitoring จะแสดงเมตริกและสถานะใหม่

13. ทำไมเลือก Cloud VPS ของ ผู้ให้บริการโฮสติ้ง?

Cloud VPS ของ ผู้ให้บริการโฮสติ้ง เหมาะสมสำหรับ GitOps Infrastructure เพราะ:

  • ความยืดหยุ่น: Customize Configuration ได้ตามต้องการ
  • ประสิทธิภาพ: SSD Storage และ High Speed Network
  • Support: Thai Technical Support ที่เข้าใจการตั้งค่า Kubernetes
  • ราคา: Competitive Pricing ที่ดีสำหรับ Production Workload

14. บทสรุป

การสร้างระบบ GitOps ครบวงจรด้วย Argo CD บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง จะให้ประโยชน์อย่างมากในการจัดการ Infrastructure และแอปพลิเคชัน Git จะกลายเป็น Single Source of Truth ทำให้การ Deploy และ Rollback เป็นเรื่องง่าย นำเสนอ Continuous Delivery ที่ปลอดภัย และสามารถติดตามได้ทุกเวลา

ทดลองสร้างระบบ GitOps บน Cloud Hosting หรือ Cloud VPS ของ ผู้ให้บริการโฮสติ้ง วันนี้ และสัมผัสพลังของ GitOps ด้วยตนเอง!


ที่มา: ผู้ให้บริการโฮสติ้ง Knowledge Base – Argo CD Workshop Series

บทความที่เกี่ยวข้องอื่น ๆ ในชุด Argo CD:

  • Argo CD คืออะไร? เบื้องต้นเกี่ยวกับ Declarative GitOps
  • การติดตั้ง Argo CD บน Kubernetes Cluster
  • สร้างแอปพลิเคชัน Argo CD Application Manifest
  • Advanced: Multi-Cluster Deployment ด้วย Argo CD
  • Security Best Practices สำหรับ Argo CD Production