วิธีตั้งค่า GitLab CI/CD พร้อม Kubernetes สำหรับ Deployment Blue‑Green อย่างปลอดภัย

ที่มาภาพ: Unknown Source

วิธีตั้งค่า GitLab CI/CD พร้อม Kubernetes สำหรับ Deployment Blue‑Green อย่างปลอดภัย

⚡ สรุป 30 วิ

การทำ Deployment แบบ Blue‑Green บน Kubernetes ด้วย GitLab CI/CD ช่วยให้เราปล่อยฟีเจอร์ใหม่ได้โดยไม่มีเวลาหยุดทำงานของระบบ (**Zero‑Downtime**) และลดความเสี่ยงจากข้อผิดพลาดที่อาจเกิดขึ้นในขั้นตอนปล่อยเว…

ภาพรวม — Overview

การทำ Deployment แบบ Blue‑Green บน Kubernetes ด้วย GitLab CI/CD ช่วยให้เราปล่อยฟีเจอร์ใหม่ได้โดยไม่มีเวลาหยุดทำงานของระบบ (Zero‑Downtime) และลดความเสี่ยงจากข้อผิดพลาดที่อาจเกิดขึ้นในขั้นตอนปล่อยเวอร์ชันใหม่ บทความนี้จะสอนวิธีตั้งค่า Pipeline ที่ปลอดภัยและเชื่อถือได้


เตรียมสภาพแวดล้อม — Setup

ก่อนเริ่มเขียน CI/CD pipeline เราต้องมีสิ่งต่อไปนี้พร้อมใช้งาน

  • คลัสเตอร์ Kubernetes ที่รองรับการสร้าง Service แบบ LoadBalancer หรือ Ingress
  • GitLab Runner ที่ติดตั้งบน Docker หรือ VM และสามารถเข้าถึง API ของ Kubernetes ได้
  • Namespace, Deployment, Service สำหรับแอปพลิเคชันที่ต้องทำ Blue‑Green
**Tip: ควรใช้ Service Account ที่มีสิทธิ์จำกัด (RBAC) เพียงพอสำหรับการสร้าง/ลบ Deployments และ Services เท่านั้น

แนวคิดของ Blue‑Green Deployment — Concept

Blue‑Green คือการมีสภาพแวดล้อมสองชุดพร้อมทำงานพร้อมกัน

  • Blue = เวอร์ชันปัจจุบันที่กำลังให้บริการผู้ใช้
  • Green = เวอร์ชันใหม่ที่จะทดสอบและเปลี่ยนเส้นทางทราฟิกเมื่อพร้อม

ขั้นตอนหลักคือ

  • Deploy เวอร์ชัน Green ไปยังคลัสเตอร์โดยไม่กระทบ Blue
  • ตรวจสอบสุขภาพ (Health Check) ของ Green ผ่าน Readiness Probes และ Liveness Probes
  • สลับ Service หรือ Ingress ให้ชี้ไปที่ Green
  • ถ้าเกิดปัญหาให้ย้อนกลับไปใช้ Blue ได้ทันที

ออกแบบไฟล์ `.gitlab-ci.yml` — CI/CD Pipeline

ขั้นตอนแรก: กำหนด Stage

```yaml stages:

  • build
  • test
  • deploy_green
  • switch_traffic
  • cleanup

```

  • build สร้าง Docker Image และอัปโหลดไปยัง Registry
  • test รัน Unit Test / Integration Test บน Image ที่สร้างขึ้น
  • deploy_green ใช้ `kubectl` หรือ Helm Deploy Green เวอร์ชันใหม่
  • switch_traffic สลับ Service ไปที่ Green หลังจากตรวจสอบสุขภาพสำเร็จ
  • cleanup ลบ Blue เวอร์ชันเก่าหากต้องการ

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

```yaml build_job: stage: build script:

  • docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
  • docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

```

  • ใช้ตัวแปร `$CI_COMMIT_SHA` เพื่อทำให้ Tag เป็นเอกลักษณ์ของแต่ละคอมมิต

ขั้นตอนที่ 3: Deploy Green

```yaml deploy_green_job: stage: deploy_green script:

  • export KUBECONFIG=$KUBE_CONFIG
  • kubectl set image deployment/my-app my-container=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --record
  • kubectl rollout status deployment/my-app

```

  • คำสั่ง `set image` จะอัปเดต Deployment ชื่อ `my-app-green` (ต้องตั้งชื่อแยกจาก Blue)
  • ใช้ `--record` เพื่อบันทึกประวัติการเปลี่ยนแปลงใน Kubernetes

ขั้นตอนที่ 4: ตรวจสอบสุขภาพ

```yaml health_check_job: stage: switch_traffic script:

  • export KUBECONFIG=$KUBE_CONFIG
  • |

if kubectl get pods -l app=my-app-green -o jsonpath='{.items[*].status.containerStatuses[0].ready}' | grep false; then echo "Green pods not ready" exit 1 fi ```

  • ถ้า Pods ของ Green ไม่พร้อม ระบบจะหยุด pipeline ก่อนขั้นตอนสลับทราฟิก

ขั้นตอนที่ 5: สลับ Traffic

```yaml switch_traffic_job: stage: switch_traffic script:

  • export KUBECONFIG=$KUBE_CONFIG
  • kubectl patch service my-app-service -p '{"spec":{"selector":{"appmy-app-green"}}}'

```

  • การแก้ไข `selector` ของ Service ทำให้ผู้ใช้ทั้งหมดเริ่มรับทราฟิกจาก Green ทันที

ขั้นตอนที่ 6: Cleanup (เลือกทำ)

```yaml cleanup_job: stage: cleanup when: manual # ให้ผู้ดูแลยืนยันก่อนลบ Blue script:

  • export KUBECONFIG=$KUBE_CONFIG
  • kubectl delete deployment my-app-blue

```

  • คำสั่ง `when: manual` ทำให้ขั้นตอนนี้ต้องกดปุ่มบน GitLab UI ก่อนดำเนินการ
**Tip: หากต้องการย้อนกลับเร็ว ๆ นี้ ให้เก็บไฟล์ Manifest ของ Blue ไว้ใน Repository เพื่อทำ Rollback ด้วย `kubectl apply -f blue.yaml`

การตรวจสอบและมอนิเตอร์ — Monitoring

การตั้งค่า CI/CD เพียงอย่างเดียวไม่พอ ต้องมีระบบมอนิเตอร์เพื่อรับรู้สถานะจริงของแอปพลิเคชัน

  • ใช้ Prometheus รวบรวมเมตริกส์จาก Pods ทั้ง Blue และ Green
  • ตั้ง Alertmanager ให้ส่งการแจ้งเตือนเมื่อ `readyReplicas` ของ Green ต่ำกว่า 100 % เป็นเวลาต่อเนื่องเกิน 2 นาที
  • เชื่อมต่อ Grafana Dashboard เพื่อดูกราฟเปรียบเทียบ Latency, Error Rate ระหว่างสองเวอร์ชัน

การเปรียบเทียบ Blue‑Green กับ Rolling Update — Comparison Table

ด้านBlue‑Green DeploymentRolling Update
ความเสี่ยงต่อผู้ใช้ไม่มี downtime เนื่องจากมีสภาพแวดล้อมเต็มชุดพร้อมให้บริการมีความเสี่ยงช่วงที่ Pods เก่าและใหม่ทำงานร่วมกัน (เช่น version incompatibility)
เวลาในการปล่อยต้องสร้างสภาพแวดล้อมสองชุด ใช้ทรัพยากรเพิ่มขึ้นในช่วง deploymentใช้ทรัพยากรคงที่ เนื่องจากอัปเดตทีละส่วน
ความง่ายของ Rollbackแค่เปลี่ยน selector ของ Service กลับไปยัง Blueต้องทำ `kubectl rollout undo` หรือสร้างเวอร์ชันใหม่อีกครั้ง
การตรวจสอบก่อนสลับสามารถทดสอบ Green แบบเต็มที่ (smoke test, performance) ก่อนให้ผู้ใช้จริงเข้าถึงทดสอบได้เฉพาะใน Pods ที่กำลังอัปเดต ไม่ครบทุก instance

แนวทางปฏิบัติที่ดีที่สุด — Best Practices

  • เก็บ Manifest ของ Blue และ Green แยกไฟล์ (`blue.yaml`, `green.yaml`) ในโฟลเดอร์ `k8s/` เพื่อความชัดเจน
  • ใช้ Helm Chart พร้อมค่า `values-green.yaml` / `values-blue.yaml` ทำให้การสลับค่าต่าง ๆ เป็นเรื่องง่ายโดยไม่ต้องแก้ไฟล์หลายไฟล์
  • ตั้งค่า Readiness Probe ที่ตรวจสอบ endpoint จริงของแอป (เช่น `/healthz`) เพื่อหลีกเลี่ยงกรณี Pods ถูกบ่งชี้ว่า Ready แต่ยังทำงานผิดพลาดอยู่
  • เปิดใช้ PodDisruptionBudget เพื่อให้ Kubernetes รักษาจำนวน Replicas ขั้นต่ำขณะทำการสลับหรืออัปเดต
**Tip: ควรทดสอบ Pipeline บนคลัสเตอร์ Staging ก่อน Deploy ไป Production ทุกครั้ง เพื่อลดโอกาสเกิดข้อผิดพลาดที่ไม่คาดคิด

สรุป — Summary

การตั้งค่า GitLab CI/CD เพื่อทำ Blue‑Green Deployment บน Kubernetes ให้ได้ผลลัพธ์ปลอดภัยและไม่มี downtime ต้องรวมขั้นตอนสำคัญต่อไปนี้

  • เตรียมคลัสเตอร์, Runner, Service Account ที่มีสิทธิ์จำกัด
  • ออกแบบ Pipeline ด้วย Stage: build test deploy_green health_check switch_traffic cleanup
  • ใช้ `kubectl set image` หรือ Helm เพื่อ Deploy เวอร์ชัน Green โดยแยกจาก Blue อย่างชัดเจน
  • ตรวจสอบสุขภาพของ Pods ก่อนสลับ Traffic ผ่าน Service selector
  • ตั้งระบบ Monitoring (Prometheus, Grafana) และ Alert เพื่อติดตามสถานะจริง
  • มีขั้นตอน Cleanup หรือ Rollback ที่ง่ายและเร็ว

สิ่งที่ควรจำ

  • Zero‑Downtime เริ่มจากการแยกสภาพแวดล้อม Blue/Green อย่างสมบูรณ์
  • ใช้ Readiness/Liveness Probes ตรวจสุขภาพก่อนให้ผู้ใช้เข้าถึงเวอร์ชันใหม่
  • เก็บ Manifest ของแต่ละเวอร์ชันใน Repository เพื่อทำ Rollback ได้ทันที
  • ตั้งค่า Alert และ Dashboard เพื่อตรวจจับปัญหาเร็วที่สุด

ด้วยแนวทางเหล่านี้ ทีม DevOps สามารถปล่อยฟีเจอร์ใหม่ได้อย่างมั่นใจ ลดความเสี่ยงต่อระบบ Production อย่างมีประสิทธิภาพ.

แชร์บทความนี้:

ชอบบทความแบบนี้?

สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม

แหล่งข่าวต้นฉบับ

ชื่อต้นฉบับ
วิธีตั้งค่า GitLab CI/CD พร้อม Kubernetes สำหรับ Deployment Blue‑Green อย่างปลอดภัย
ผู้เขียน
กองบรรณาธิการ Thai Tech News
แหล่ง
บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
วันที่เผยแพร่
2 สิงหาคม 2569 เวลา 10:51

Related

บทความที่เกี่ยวข้อง

วิธีตั้งค่าและใช้ Terraform บน macOS เพื่อบริหารโครงสร้างพื้นฐาน Multi‑Cloud อย่างปลอดภัยGrowth
2 สิงหาคม 2569 เวลา 11:30

วิธีตั้งค่าและใช้ Terraform บน macOS เพื่อบริหารโครงสร้างพื้นฐาน Multi‑Cloud อย่างปลอดภัย

Terraform เป็นเครื่องมือ Infrastructure‑as‑Code ที่ช่วยให้คุณสร้างและจัดการโครงสร้างพื้นฐานบนหลายคลาวด์ได้ด้วยไฟล์เดียว การใช้ Terraform บน macOS ทำให้ขั้นตอนตั้งค่าเร็วขึ้นและปลอดภัยกว่าเดิม

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธียกเครื่อง Kubernetes บน Azure Arc เพื่อบริหารแบบไฮบริดและรักษาความปลอดภัยอย่างต่อเนื่องGrowth
1 สิงหาคม 2569 เวลา 20:30

วิธียกเครื่อง Kubernetes บน Azure Arc เพื่อบริหารแบบไฮบริดและรักษาความปลอดภัยอย่างต่อเนื่อง

การใช้ Kubernetes บน Azure Arc ช่วยให้คุณขยายคลัสเตอร์จากศูนย์ข้อมูลหรือ edge ไปยังคลาวด์ได้แบบไฮบริด โดยไม่ต้องเปลี่ยนแปลงโครงสร้างเดิม อีกทั้ง Azure Arc ยังผสานเครื่องมือด้านความปลอดภัยและการจัดการอ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ9 นาที
วิธีตั้งค่า OpenVPN Access Server บน Ubuntu เพื่อสร้างเครือข่ายส่วนบุคคลแบบปลอดภัยGrowth
1 สิงหาคม 2569 เวลา 19:00

วิธีตั้งค่า OpenVPN Access Server บน Ubuntu เพื่อสร้างเครือข่ายส่วนบุคคลแบบปลอดภัย

OpenVPN Access Server (AS) เป็นโซลูชัน VPN ที่ติดตั้งง่ายและให้ UI สำหรับจัดการผู้ใช้ และ เครือข่ายได้อย่างเต็มรูปแบบ การตั้งค่าบน Ubuntu ทำให้คุณสามารถสร้างเครือข่ายส่วนบุคคล (Private Network) ปลอดภั…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ9 นาที
วิธีตั้งค่าและใช้งาน GitHub Copilot Labs เพื่อสร้างโค้ดด้วย AI อย่างปลอดภัยใน VS CodeGrowth
1 สิงหาคม 2569 เวลา 11:30

วิธีตั้งค่าและใช้งาน GitHub Copilot Labs เพื่อสร้างโค้ดด้วย AI อย่างปลอดภัยใน VS Code

GitHub Copilot Labs เป็นส่วนขยายที่เพิ่มฟีเจอร์ AI ขั้นสูงให้กับ VS Code ทำให้การเขียนโค้ดเร็วขึ้นและปลอดภัยมากยิ่งขึ้น บทความนี้จะแนะนำวิธีตั้งค่าและใช้งาน Copilot Labs อย่างเป็นระบบ พร้อมเคล็ดลับเพื…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
คัดลอกลิงก์แล้ว!