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 ที่สมบูรณ์:
- Developer Commit Code ไปยัง Git Repository
- GitHub Actions Build Docker Image และ Test
- Push Image ไปยัง Docker Registry
- Update Git Repository ด้วย Image Tag ใหม่
- Argo CD Detect Change และ Sync อัตโนมัติ
- Kubernetes Deploy Application Version ใหม่
- 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

