Vọc banh xác với Spinnaker - Part 1

Image result for spinnaker
Dạo này đang phải làm phần Continuous delivery của DevOps. Đại loại là việc deploy application lên server, khách hàng chỉ đạo “Chú nghiên cứu cái Spinnaker đi” xong rồi show kết quả cho anh xem.
Trước khi giải thích vì sao lại đẻ ra thanh niên Spinnaker này, thì cần nói qua về phần deployment.

Infra hệ thống thường chia thành 4 môi trường
Dev: Dành cho mấy anh coder, có thể vào chọc phá code, test thoải mái con gà mái, ko sao cả
QA: Dành cho mấy em Tester xinh đẹp, khi nào code thấy chạy hòm hòm thì deploy code vào đấy để mấy em ý test, report bug
Staging: Một môi trường gần giống với production, đại loại là code test chạy thấy ổn ngon rồi thì deploy vào, coi như là 1 bản beta để xài thử trước khi release
Production: Môi trường dành cho end-user sử dụng, chứa dữ liệu thật, trước khi deploy vào đây là phải qua rất nhiều ban bệ approve, mấy chú dev cùi là cấm sờ vào hiện vật
Vấn đề đặt ra là việc deployment sẽ mất một khoảng thời gian nào đó, dẫn tới hệ thống bị down-time, user sẽ không truy cập được, nên đa số người ta deploy vào lúc nửa đêm.
Tuy nhiên user ngày nay nhiều thanh niên là cú đêm nên việc này tạo bad user experiences cho người dùng.  Để giải quyết điều này, thì blue/green deployment được ra đời

Blue-green deployment

User đang dùng bản app version 1 được deploy trên 1 cụm server gọi là blue
Bản version 2 sẽ được deploy trên 1 cụm server mới gọi là green, nếu deploy xong xuôi, test chạy ok thì chỉ switch load balancer sang cụm server mới là xong. Cụm server mới này lại trở thành blue sang lần deploy tiếp theo. Còn cụm server kia có thể terminate đi để tiết kiệm
Cách này hay là zero-downtime, nếu deploy gặp vấn đề gì thì vẫn rollback được.
Nói theo kiểu giaosucan’s blog thì blue server giống như là vợ, còn green server thì như là em người yêu. Sống thử với em người yêu một thời gian thấy điện nước đầy đủ thì kết hôn, promote em ý chính thức làm vợ, còn không thì nói lời chia tay (không ảnh hưởng)


Image result for blue-green deployment

Canary deployment

Cài này cũng na ná như B/G deployment nhưng có vài điểm khác biệt 
Xét theo khía cạnh infra thì cấu trúc của nó tương đồng với B/G deploy ở chỗ là, cũng có 2 môi trường production nằm độc lập. Tuy nhiên cách vận hành và mục đích của chúng thì khác nhau. Canary release sẽ không route người dùng vào 1 trong 2 môi trường production mà sẽ phân tán vào cả 2 cùng một lúc (có thể theo tỉ lệ 1-9 hay 3-7 vân vân), mục đích là thăm dò và đánh giá phản ứng của người dùng với 2 phiên bản khác nhau trước khi thực sự release.
Hiểu theo kiểu giaosucan’s blog là một dạng một anh bắt cá hai tay, một tay chơi liền 2 em. Thứ 2, 4 ,6 thì em A, 3, 5 ,7 thì em B. Chủ nhật thì play all. Sau một thời gian thấy em nào ngon, nước nôi tràn trề thì chốt hạ.

Spinnaker

Image result for spinnaker
Phần trên nói nhiều về việc deployment, spinnaker chính là một tool dùng trong công việc deploy ứng dụng lên cloud server (CD) được phát triển bởi Netflix

Spinnaker mạnh ở chỗ nó là một tool multi-cloud continuous delivery platform. Tức là bạn có thể dùng spinnaker để build, deploy lên AWS, Azure, GCE … đủ loại.

Spinnaker bao gồm tập hợp nhiều Microservices nhưng có dependency với nhau
Ví dụ như
  • Deck là browser-UI
  • Halyard CLI là service để config spinnaker
  • Gate là API gateway
  • Clouddriver để làm việc với multi-cloud provider
  • Front50 dùng để lưu trữ metadata
  • Echo là event bus
  • Fiat is Spinnaker’s authorization service
Spinnaker có thể tích hợp với Jenkins để start các jobs từ Jenkins, monitor process. Jenkins dùng để build, Spinnaker dùng để deployment

Setup Spinnaker

Bạn có thể setup Spinnaker trên local, GCE kubernetes, EKS hoặc ECS. Lúc đầu mình setup Spinnaker trên Kubernetes GCE dùng helm khá dễ dàng, do helm chuyên dùng cho Kubernetes. Tuy nhiên do yêu cầu dùng infra của AWS nên chuyển sang setup trên ECS thì khó vl vì phải làm hoàn toàn from scratch.
Bài tiếp theo sẽ trình bày việc mình đã setup Spinnaker trên GCE và ECS như thế nào

1 nhận xét:

  1. Bạn đang nhầm lẫn về khái niệm Blue/Green. Khi v2 của app được deploy lên Green thì Blue vẫn đc giữ chứ ko terminate (nếu terminate thì đó là kiểu deploy Rolling hay Highlander). Mục đích giữ cụm server Blue nhằm rollback lại 1 cách nhanh chóng (đây chính là khác biệt lớn nhất giữa Blue/Green và Rolling).

    Trả lờiXóa

Được tạo bởi Blogger.