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) ตรงตามความต้องการ และได้รับการสนับสนุนจากทีมผู้เชี่ยวชาญ

