Argo CD + Argo Rollouts ทำ Blue-Green Deployment สลับ Environment ทันที

Argo CD + Argo Rollouts ทำ Blue-Green Deployment สลับ Environment ทันที

บทนำ: Blue-Green Deployment คืออะไร

Blue-Green Deployment เป็นกลยุทธ์การปรับใช้งาน (Deployment Strategy) ที่ช่วยลดความเสี่ยงขณะอัปเดตแอปพลิเคชัน โดยวิธีการนี้จะรักษาสภาพแวดล้อมที่กำลังใช้งานจริง (Production) สองชุดแบบขนานกัน – หนึ่งหน่วย (Blue) สำหรับผู้ใช้ปัจจุบัน และหนึ่งหน่วย (Green) สำหรับรุ่นใหม่ของแอปพลิเคชัน

เมื่อรุ่น Green พร้อมใช้งาน สามารถสลับการส่งข้อมูลผู้ใช้ (Traffic) จาก Blue ไปยัง Green ได้ทันที หากเกิดปัญหา ก็สามารถเปิดกลับไปยัง Blue ได้อย่างรวดเร็ว

ทำไมต้องใช้ Blue-Green Deployment

  • Zero Downtime: ไม่มีเวลาหยุดบริการ เนื่องจากสภาพแวดล้อมเก่ายังคงใช้งานได้
  • การ Rollback รวดเร็ว: หากพบปัญหาในรุ่นใหม่ สลับกลับได้ในไม่กี่วินาที
  • การทดสอบสมบูรณ์: ก่อนสลับ Traffic สามารถทดสอบหน่วย Green ได้อย่างละเอียด
  • ลดความเสี่ยง: ไม่ต้องเก็บผู้ใช้เก่าและใหม่ไว้ในสภาพแวดล้อมเดียวกัน

Argo CD และ Argo Rollouts: เครื่องมือที่สมบูรณ์แบบ

Argo CD เป็นเครื่องมือจัดการการปรับใช้งาน (Deployment) แบบ GitOps บน Kubernetes โดยใช้ Git Repository เป็นแหล่งความจริง (Source of Truth)

Argo Rollouts เป็นตัวขยาย (Extension) ของ Argo CD ที่ให้ความสามารถด้านกลยุทธ์การปรับใช้งานขั้นสูง เช่น Blue-Green, Canary, และ Traffic Management ด้วยวิธีการที่เป็นอัตโนมัติ

สำหรับผู้ที่ต้องการสภาพแวดล้อมการจัดการระดับองค์กร แนะนำบริการ ผู้ให้บริการโฮสติ้ง Cloud VPS (https://de.co.th/cloud-vps) ซึ่งเหมาะสำหรับการติดตั้ง Kubernetes และการจัดการระบบ Argo

การตั้งค่า Blue-Green Deployment ด้วย Argo Rollouts

ขั้นตอนที่ 1: ติดตั้ง Argo Rollouts

kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/download/v1.6.0/install.yaml

ขั้นตอนที่ 2: สร้าง Rollout Manifest

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp
  namespace: production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2.0
        ports:
        - containerPort: 8080
  strategy:
    blueGreen:
      activeService: myapp-active
      previewService: myapp-preview
      autoPromotionEnabled: false
      autoPromotionSeconds: 300
      scaleDownDelaySeconds: 600
      scaleDownDelayRevisionLimit: 2

ขั้นตอนที่ 3: สร้าง Service สำหรับ Blue-Green

apiVersion: v1
kind: Service
metadata:
  name: myapp-active
  namespace: production
spec:
  selector:
    app: myapp
  ports:
  - name: http
    port: 80
    targetPort: 8080
  type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-preview
  namespace: production
spec:
  selector:
    app: myapp
  ports:
  - name: http
    port: 80
    targetPort: 8080
  type: ClusterIP

การ Promote และ Rollback

เมื่อต้องการ Promote จาก Preview ไปยัง Active:

kubectl argo rollouts promote myapp -n production

ในกรณีที่ต้องการ Rollback กลับไปเวอร์ชันก่อนหน้า:

kubectl argo rollouts undo myapp -n production

Blue-Green vs Canary Deployment

ลักษณะ Blue-Green Canary
สลับ Traffic 100% ทันที ค่อยๆ เพิ่มขึ้น
ความเสี่ยง สูงกว่า (ทั้งหมด) ต่ำกว่า (เฉพาะส่วนเล็ก)
Rollback Time วินาที นาที
ใช้เมื่อ รุ่นใหม่มีความมั่นใจสูง ต้องการทดสอบค่อยเป็นค่อยไป

การตั้งค่า Health Checks

เพื่อให้การสลับมีความปลอดภัย จำเป็นต้องตั้งค่า Health Checks สำหรับตรวจสอบสถานะ Pod:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v2.0
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 3
  strategy:
    blueGreen:
      activeService: myapp-active
      previewService: myapp-preview
      autoPromotionEnabled: false

Best Practices สำหรับ Blue-Green Deployment

  • ทดสอบก่อนสลับ: ให้เวลาทดสอบหน่วย Green อย่างจริงจัง ตรวจสอบ API, Performance, และ Database Connection
  • ตั้งค่า Automated Rollback: ใช้ Analysis ของ Argo Rollouts เพื่อให้ Rollback อัตโนมัติหากพบข้อผิดพลาด
  • ใช้ GitOps Flow: เก็บการตั้งค่า Rollout ทั้งหมดใน Git Repository เพื่อให้สามารถติดตามการเปลี่ยนแปลงได้
  • ตรวจสอบ Resources: ตรวจให้แน่ใจว่า Node มีพื้นที่เพียงพอสำหรับรันหน่วย Blue และ Green พร้อมกัน
  • มีแผน Maintenance: กำหนดหน่วยเก่าเพื่อลบออกหลังจากสลับบริการสำเร็จแล้ว

สรุป

Blue-Green Deployment ด้วย Argo Rollouts เป็นวิธีที่มีประสิทธิภาพสำหรับการอัปเดตแอปพลิเคชัน Kubernetes ด้วยความเสี่ยงต่ำ การใช้งาน GitOps รวมกับ Argo CD ช่วยให้ทีมสามารถจัดการการปรับใช้งานได้ง่ายขึ้น

สำหรับการติดตั้ง Production-grade Kubernetes ที่เชื่อถือได้ ลองใช้ ผู้ให้บริการโฮสติ้ง Cloud VPS ซึ่งมีการปรับแต่ง (Customization) ตรงตามความต้องการ และได้รับการสนับสนุนจากทีมผู้เชี่ยวชาญ