
ที่มาภาพ: Unknown Source
วิธีตั้งค่า Argo Rollouts เพื่อทำ Canary Deployments บน Kubernetes อย่างปลอดภัย
⚡ สรุป 30 วิ
Argo Rollouts เป็นส่วนเสริมของ Kubernetes ที่ช่วยให้ทำ Canary Deployments ได้อย่างอัตโนมัติและมีการควบคุมที่ละเอียด การตั้งค่าที่ถูกต้องจะลดความเสี่ยงจากข้อผิดพลาดในขั้นตอนปล่อยเวอร์ชันใหม่ บทความนี้จ…
Overview
Argo Rollouts เป็นส่วนเสริมของ Kubernetes ที่ช่วยให้ทำ Canary Deployments ได้อย่างอัตโนมัติและมีการควบคุมที่ละเอียด การตั้งค่าที่ถูกต้องจะลดความเสี่ยงจากข้อผิดพลาดในขั้นตอนปล่อยเวอร์ชันใหม่ บทความนี้จะแนะนำวิธีติดตั้งและกำหนดค่า Argo Rollouts เพื่อทำ Canary Deployment อย่างปลอดภัยบนคลัสเตอร์ Kubernetes ของคุณ
Prerequisites
ก่อนเริ่มต้องตรวจสอบว่าเครื่องมือพื้นฐานพร้อมใช้งานแล้ว
- มี kubectl เชื่อมต่อกับคลัสเตอร์ที่ต้องการ
- คลัสเตอร์ติดตั้ง Helm 3 หรือใช้ `kubectl apply` ได้
- แอปพลิเคชันตัวอย่างที่ทำงานบน Docker image พร้อม tag เวอร์ชัน
Install Argo Rollouts
การติดตั้งสามารถทำได้สองวิธีหลัก คือ Helm และ Manifest โดยเลือกวิธีใดก็ได้ตามความสะดวก
- **วิธีที่ 1: ใช้ Helm
- เพิ่ม repository `helm repo add argo https://argoproj.github.io/argo-helm`
- อัพเดท cache `helm repo update`
- ติดตั้งด้วยค่าเริ่มต้น `helm install argo-rollouts argo/argo-rollouts --namespace argo-rollouts --create-namespace`
- **วิธีที่ 2: ใช้ Manifest
- ดึงไฟล์ YAML ล่าสุดจาก GitHub `curl -sSL https://raw.githubusercontent.com/argoproj/argo-rollouts/master/manifests/install.yaml | kubectl apply -f -`
- ตรวจสอบว่า CRD ถูกสร้าง `kubectl get crd rollouts.argoproj.io`
**Tip: ควรติดตั้งใน namespace แยกเพื่อให้การจัดการและอัพเกรดง่ายขึ้น
Configure Canary Strategy
Argo Rollouts ใช้ Custom Resource Definition (CRD) ชื่อ *Rollout* เพื่อกำหนดกลยุทธ์ การตั้งค่า Canary ต้องระบุขั้นตอนการปล่อยและเงื่อนไขตรวจสอบ
- สร้างไฟล์ `canary-rollout.yaml` ด้วยโครงสร้างพื้นฐาน
- ระบุตัว apiVersion: `argoproj.io/v1alpha1` และ kind: `Rollout`
- กำหนด metadata ชื่อ rollout ที่ต้องการ
- ในส่วน spec ใส่ strategy เป็น `canary`
- ตั้งค่า steps เพื่อควบคุมเปอร์เซ็นต์ traffic
- ตัวอย่าง: `- setWeight: 10`, `- pause: {duration: 2m}` จะเพิ่มน้ำหนักเป็น 10% แล้วหยุด 2 นาทีเพื่อรอการตรวจสอบ
- เพิ่ม analysisTemplate หากต้องการทำ automated metric check เช่น error rate หรือ latency
Deploy Example Application
ใช้แอปพลิเคชัน Nginx ตัวอย่างที่มี tag เวอร์ชันต่าง ๆ เพื่อทดสอบ Canary
- **ขั้นตอนที่ 1: สร้าง Deployment ปกติสำหรับเวอร์ชัน stable
```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-stable spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx version: stable spec: containers:
- name: nginx
image: nginx:1.21 ```
- **ขั้นตอนที่ 2: ใช้ Rollout ที่กำหนด Canary เพื่อลงเวอร์ชันใหม่ `nginx:1.22`
```yaml apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: nginx-canary spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers:
- name: nginx
image: nginx:1.22 strategy: canary: steps:
- setWeight: 10
- pause: {duration: 2m}
- setWeight: 30
- pause: {duration: 3m}
```
- **ขั้นตอนที่ 3: ใช้คำสั่ง `kubectl apply -f canary-rollout.yaml` แล้วตรวจสอบสถานะด้วย `kubectl argo rollouts get rollout nginx-canary`
Verify and Monitor
การมอนิเตอร์เป็นส่วนสำคัญเพื่อให้ Canary ปลอดภัย
- ตรวจสอบ weight ของ traffic ด้วย `kubectl argo rollouts get rollout nginx-canary --watch`
- เชื่อมต่อ Prometheus หรือ Datadog กับ metric ที่กำหนดใน analysisTemplate เพื่อรับสัญญาณว่าแอปทำงานตามคาดหรือไม่
- หากพบข้อผิดพลาดให้ใช้คำสั่ง `kubectl argo rollouts abort nginx-canary` เพิ่อยกเลิก rollout ทันที
| กลยุทธ์ | การควบคุม traffic | ความซับซ้อนการตั้งค่า | ตัวอย่างการใช้งาน |
|---|---|---|---|
| Canary | ปรับน้ำหนักเป็นขั้นตอน | ปานกลาง (ต้องกำหนด steps) | ปล่อยฟีเจอร์ใหม่ให้ผู้ใช้บางส่วน |
| Blue/Green | สลับ Service ไปยังเวอร์ชันใหม่ทั้งหมด | ต่ำ (สร้าง Service แยก) | อัปเดตระบบที่ต้องการ downtime น้อย |
Best Practices for Safety
เพื่อเพิ่มความปลอดภัยของ Canary Deployment ควรปฏิบัติตามแนวทางต่อไปนี้
- ใช้ PodDisruptionBudget ป้องกัน pod ที่สำคัญจากการถูกลบโดยอัตโนมัติในช่วง rollout
- ตั้งค่า readinessProbe ให้แม่นยำเพื่อให้ traffic ไม่ไหลเข้าสู่ pod ที่ยังไม่พร้อมใช้งาน
- จำกัด maxSurge และ maxUnavailable ใน RollingUpdate เพื่อควบคุมจำนวน pod ที่เปลี่ยนแปลงพร้อมกัน
**Tip: ควรเก็บประวัติโดเมนของการปล่อยเวอร์ชันใน GitOps เช่น Argo CD หรือ Flux เพื่อให้สามารถย้อนกลับได้อย่างรวดเร็ว
Troubleshooting Tips
เมื่อ Canary ไม่ทำงานตามคาดต้องตรวจสอบจุดต่อไปนี้
- ตรวจสอบว่า CRD `rollouts.argoproj.io` ถูกติดตั้งและอัพเดทเป็นเวอร์ชันล่าสุด
- ดู log ของ controller ด้วย `kubectl logs -n argo-rollouts deployment/argo-rollouts-controller-manager`
- เช็คว่าการ pause ไม่ได้ถูกข้ามโดยการตั้งค่า `autoPromotionEnabled: true` โดยไม่ต้องการ
Summary
Argo Rollouts ทำให้ Canary Deployments บน Kubernetes มีความอัตโนมัติและปลอดภัยเมื่อกำหนดค่าถูกต้อง
- ติดตั้ง Argo Rollouts ผ่าน Helm หรือ Manifest แล้วตรวจสอบ CRD
- กำหนด `strategy: canary` พร้อม steps ที่ควบคุม weight และ pause
- เชื่อมต่อการตรวจวัดด้วย Prometheus/Datadog เพื่ออัตโนมัติ abort หากพบปัญหา
- ปฏิบัติตาม best practices เช่น PodDisruptionBudget, readinessProbe, และ GitOps เพื่อให้ rollback ง่ายและเร็ว
ทำตามขั้นตอนเหล่านี้ คุณจะสามารถปล่อยฟีเจอร์ใหม่สู่ผู้ใช้บางส่วนได้อย่างมั่นใจ ลดความเสี่ยงจากการพังระบบใน production อย่างมีประสิทธิภาพ.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่า Argo Rollouts เพื่อทำ Canary Deployments บน Kubernetes อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 18 สิงหาคม 2569 เวลา 17:51



