Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Chiêu binh bình giảng - Hồi 2

Hồi 2
Làm DevOps, Fsoft lập team
Tiếp Hồi 1
Đấy nói chuyện công ty Fsoft vốn làm outsourcing ngót nghét đã hơn 20 năm, khách hàng 5 châu bốn biển đủ cả. Trước chủ yếu chỉ làm testing, web app, về sau có món blockchain nhưng mấy năm rồi vẫn chỉ dừng lại ở ném đá dò đường, mò trăng đáy nước. Thế rồi năm ấy, nhờ sale man có tài hùng biện mà trúng được dự án triệu đô, mở thêm được một mảng là DevOps

Công ty gấp rút tuyển người, đào tạo nhân lực build được team độ 6 members, đều là những thanh niên ưu tú, khó khăn chẳng ngại, gian khổ không sờn. Thời gian đầu, kinh nghiệm DevOps chẳng có, kiến thức về infra cũng không. Khách hàng chửi cho lên bờ xuống ruộng, lãnh đạo thì mắng đến vuốt mặt không xong. Quả thật là thập phần gian khổ, muôn vạn khó khăn.
Kết quả hình ảnh cho khách hàng chửi"
Nhưng người xưa có nói “Lửa thử vàng, gian nan thử sức”, 6 member DevOps trải qua bao khó khăn đã trưởng thành lên nhiều, học được nhiều kiến thức mới, skill tiến bộ vượt bậc. Thấm thoát đã 2 niên trôi qua, nay đã thành core team DevOps của FSoft, nhân sự từ 6 cũng lên đến 14 người, cùng với team của Sillicon Valley, Brazil build nên một hệ thống CI/CD tuy chưa dám nói là khủng như Google, Facebook nhưng so với Tiki, Lazada chắc cũng ko kém. Giang hồ đồn rằng team đó có tên là Expendable 
Kết quả hình ảnh cho Expendable"
Vậy CI/CD này có những gì, chắc không thể nói hết trong 1 bài ngắn ngủi, cũng khó trình bày chi tiết vì sợ security. Cho nên chỉ có thể dùng vài lời chém như gió thổi ngọn cây, đôi câu tung hứng như bóng trăng qua cửa sổ.
Nghe chữ CI/CD thì rõ rồi, gồm 2 phần CI (Continuous Integration) CD (Continuous Deployment)
Kết quả hình ảnh cho CI/CD systems"

Continuous Integration

Trái tim của phần CI là hệ thống các Jenkins được build trên Google Cloud.  Jenkins được cài đặt trên các cluster K8S của Google.  Mỗi cluster được dùng cho các mục đích khác nhau, hoặc owner bởi các team khác nhau.
Mỗi cluster Jenkins tính sơ có tới hàng nghìn job, xem qua cũng cả nghìn user. Cho nên việc đảm bảo tính scaling và availability cũng thách thức như lên núi đao, vượt biển lửa.
Thế cho nên, người ta đã lập một team và dự án riêng để phát triển hệ thống này, lấy bí danh Warp-Drive, lấy ý tưởng về một loại động cơ có thể du hành nhanh hơn ánh sáng (FTL – faster than light)
Kết quả hình ảnh cho jenkins scaling"
Để giải quyết vấn đề scaling và availability, Jenkins được deploy trên Google Cloud Kubernetes bằng Infra as Code , gọi là các Jenkin k8s cluster phục vụ cho mục đích khác nhau, automated test, performance hoặc chỉ phục vụ cho mục đích thử nghiệm, testing feature mới
Mỗi k8s Jenkins cluster trung bình có 9 – 2 0 nodes, có thể scaling lên hơn trăm nodes. Nghe thiên hạ đồn rằng K8S của Google bang có thể scale lên tới 5000 nodes. Thú thật là tại hạ cũng chưa có thấy hệ thống K8S 5000 nodes bao giờ.
Jenkins được monitoring bởi StackDriver, công cụ monitoring và management của Google, cho phép monitoring trạng thái của Jenkins pods, CPU usage, Uptime check, tích hợp Alerting, visualize data in graph như Prometheus, Grafana  Công cụ này nghe nói tính năng sánh ngang với CloudWatch của Amazon, theo kiểu Bắc Kiều Phong, Nam Mộ Dung. Đông Tà Hoàng Dược Sư, Tây Độc Âu Dương Phong, có thể nói là một chín một mười.
Source code lưu chủ yếu trên Github private repos, khi có Pull Request thì tự động trigger quá trình build code, check code quality and test automation
Kết quả hình ảnh cho CI Jenkins build code trigger workflow"

Continuous Delivery

CI sơ sơ là vậy thế CD thì sao. Hệ thống này có 4 môi trường dev, qa, staging, production. Server build trên Google Cloud và Amazon tính ra lên tới cả nghìn. Đấy là còn chưa tính đến phần đi kèm như VPC, Security Group, ELB … Thật là rộng như Đông Hải, lớn tựa Thái Sơn, làm sao mà quản lý ?
May thay, trí tuệ con người thật là tuyệt luân, người ta đã phát minh ra SaltStack, một công cụ Configuration Management. Chi tiết thì quý vị cứ lên Google, còn hiểu nhanh thì như thế này, SaltStack hoạt động theo mô hình salt master minion, Admin chỉ cần ngồi ở con salt-master là có thể quản lý, configure, install mọi thứ trên hàng loạt con minion cùng 1 lúc
Với việc sử dụng Salt-Stack, team đã có thể quản lý, install service, deploy application lên hàng trăm server chỉ trong vòng một nén hương.
Tuy công nghệ thì hiện đại, nhưng cuối cùng mấu chốt vẫn là con người. Làm việc với hệ thống như vậy, incident thỉnh thoảng cũng xẩy ra. Tuy cũng chỉ năm thì mười họa, nhưng đôi lúc cũng làm cho kinh hồn táng đởm, bạt vía thất kinh.
Nghe nói, có một team mới lập gọi là SRE team , gọi là Site Reliability Engineering, đại loại là team tập trung vào phần Operation như xử lý isues, quản trị hệ thống. Một ngày đẹp trời, một chàng trai ssh server qua terminal, vô tình lỡ tay gõ lệnh reboot, shutdown, khiến server down cái rụp, toàn bộ các Jenkins job bị stuck, tiếng gào khóc chửi rủa khắp nơi, email message bắn ra tới tấp.
  • Server toang rồi, ông giáo ơi
  • Jenkins job không build được, app không deploy được
  • Chết mịa rồi….
 Từ đó, họa mi cũng ngừng hót, team đó được đổi tên thành Server Reboot Engineer
Muốn biết Server Reboot Engineer đã gây ra những họa gì, xem hồi sau sẽ rõ

Đăng nhận xét

3 Nhận xét

  1. hello giáo sư. đọc bài của giáo sư thú vị thật. Em đang chân ướt chân ráo tìm hiểu devops, giáo sư có thể chỉ hướng giúp em ko ạ :( Cảm ơn giáo sư

    Trả lờiXóa