ใช้ Argo CD กับ Plain YAML Manifest สำหรับ Kubernetes Deployment

ใช้ Argo CD กับ Plain YAML Manifest สำหรับ Kubernetes Deployment

บทนำ

Argo CD เป็นเครื่องมือ GitOps ที่ช่วยให้การจัดการและติดตั้ง Kubernetes applications เป็นเรื่องง่าย โดยจะตรวจสอบ Git repository อย่างต่อเนื่อง และทำให้สถานะของระบบสอดคล้องกับที่กำหนดไว้ในไฟล์ manifest บทความนี้จะอธิบายวิธีการใช้ Argo CD กับ Plain YAML Manifest ซึ่งเป็นวิธีที่เรียบง่าย แต่มีประสิทธิภาพสูง

ทำไมต้องใช้ Plain YAML กับ Argo CD

Plain YAML Manifest นั้นเหมาะสำหรับโครงการที่มีความซับซ้อนน้อยถึงกลาง หรือเมื่อคุณต้องการความง่ายในการจัดการ ข้อดีของการใช้ Plain YAML คือ:

  • ไม่ต้องติดตั้งเครื่องมือเพิ่มเติม เช่น Helm หรือ Kustomize
  • เข้าใจง่าย และควบคุมได้อย่างชัดเจน
  • เหมาะสำหรับทีมที่เพิ่งเริ่มเรียนรู้ Kubernetes
  • ปรับแต่งได้อย่างยืดหยุ่นตามความต้องการของโปรเจกต์

Plain YAML vs Helm vs Kustomize

ในการเลือกใช้เครื่องมือสำหรับการจัดการ Kubernetes manifests นั้น ขึ้นอยู่กับความซับซ้อนของโปรเจกต์:

  • Plain YAML: เหมาะสำหรับโปรเจกต์เล็กถึงกลาง ที่ไม่ต้องใช้ parameters ที่ซับซ้อน
  • Helm: ใช้ได้สำหรับ package management ที่ซับซ้อน และมี reusable templates
  • Kustomize: ปรับแต่งโครงสร้าง YAML โดยไม่ต้องใช้ template engine

โครงสร้างไดเรกทอรี่แบบ Best Practice

เมื่อใช้ Plain YAML กับ Argo CD ให้จัดระเบียบไฟล์ตามโครงสร้างด้านล่าง:

my-app/
├── manifests/
│   ├── namespace.yaml
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── configmap.yaml
│   └── ingress.yaml
├── application.yaml
└── README.md

ตัวอย่าง Namespace Manifest

apiVersion: v1
kind: Namespace
metadata:
  name: my-app-ns
  labels:
    name: my-app-ns

ตัวอย่าง Deployment Manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: my-app-ns
  labels:
    app: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: myregistry/web-app:1.0.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        env:
        - name: APP_ENV
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: environment

ตัวอย่าง Service Manifest

apiVersion: v1
kind: Service
metadata:
  name: web-app-service
  namespace: my-app-ns
spec:
  type: ClusterIP
  selector:
    app: web-app
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

ตัวอย่าง ConfigMap Manifest

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
  namespace: my-app-ns
data:
  environment: "production"
  log_level: "info"
  api_timeout: "30"
  config.yaml: |
    server:
      port: 8080
      host: 0.0.0.0

ตัวอย่าง Argo CD Application Manifest

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: web-app-deploy
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourusername/my-app.git
    targetRevision: main
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: my-app-ns
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

วิธีการติดตั้ง Argo CD

ก่อนใช้ Argo CD ต้องติดตั้งในคลัสเตอร์ Kubernetes ของคุณ:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

วิธีการดึงและซิงค์ Manifest จาก Git

Argo CD จะติดตามการเปลี่ยนแปลงในไฟล์ YAML ภายในโฟลเดอร์ที่กำหนดใน path ของ Application manifest โดยใช้ Git repository เป็นแหล่งความจริง (Single Source of Truth) เมื่อมีการอัพเดต manifest ใน Git Argo CD จะตรวจพบและซิงค์อัตโนมัติ

Best Practices สำหรับการใช้ Plain YAML กับ Argo CD

  • แยกไฟล์ Manifest: แบ่งแต่ละ Kubernetes object ออกจากกัน เพื่อให้อ่านและบำรุงรักษาง่าย
  • ใช้ Labels: ติดป้ายกำกับ resources เพื่อจัดกลุ่มและติดตามได้ง่ายขึ้น
  • ตั้งค่า Resource Requests/Limits: กำหนดจำนวน CPU และ Memory ให้กับ containers
  • ใช้ Namespace: จัดแยกแอปพลิเคชันต่างๆ โดยใช้ Namespace
  • ตรวจสอบไฟล์: ใช้ kubectl dry-run ก่อนส่งไปยังคลัสเตอร์
  • เวอร์ชันควบคุม: เก็บ manifests ทั้งหมดใน Git repository

การใช้ Argo CD บน ผู้ให้บริการโฮสติ้ง Cloud VPS

หากคุณต้องการจัดการแอปพลิเคชัน Kubernetes ด้วย Argo CD บนเซิร์ฟเวอร์ของคุณเอง ผู้ให้บริการโฮสติ้ง Cloud VPS เป็นตัวเลือกที่ยอดเยี่ยม ด้วยความเป็นส่วนตัวสูง ความยืดหยุ่นในการปรับแต่ง และประสิทธิภาพที่เชื่อถือได้ คุณสามารถติดตั้ง Kubernetes cluster และ Argo CD ได้อย่างอิสระ

ผู้ให้บริการโฮสติ้ง Cloud VPS ให้บริการคุณภาพสูง พร้อมการสนับสนุนจากทีมเทคนิคของเรา เพื่อให้แน่ใจว่าระบบของคุณทำงานได้อย่างราบรื่น

ข้อสรุป

การใช้ Plain YAML Manifest กับ Argo CD นั้นเป็นวิธีที่เรียบง่าย แต่มีประสิทธิภาพสูง สำหรับการจัดการแอปพลิเคชัน Kubernetes โดยไม่ต้องใช้เครื่องมือที่ซับซ้อน ด้วยการตั้งค่าโครงสร้างไดเรกทอรี่อย่างเหมาะสม ปฏิบัติตามแนวทาง Best Practices และ commit manifests ใน Git repository คุณจะสามารถจัดการและติดตามแอปพลิเคชันของคุณได้อย่างมีประสิทธิภาพ บนระบบไม่ว่าจะเป็น ผู้ให้บริการโฮสติ้ง Cloud VPS หรือสภาพแวดล้อมอื่นๆ