CI/CD với các ứng dụng Cloud-Native

toannm

Tích hợp liên tục và phân phối liên tục_ CI / CD, không chỉ là một cách tiếp cận để phát triển và phân phối ứng dụng cho khách hàng. CI / CD còn thay đổi cách các ứng dụng được triển khai: giới thiệu các bước lặp nhỏ hơn và triển khai nhanh hơn. Cách tiếp cận này được áp dụng khác nhau, đặc biệt là cho các ứng dụng cloud-native.

Khi triển khai CI / CD cho các ứng dụng cloud-native, cách tiếp cận là một công cụ không thể tách rời giúp hợp lý hóa toàn bộ các giai đoạn phát triển và triển khai. Trên thực tế, các ứng dụng cloud-native có thể được tạo ra mạnh mẽ hơn trong thời gian dài khi sự phát triển của chúng được tích hợp với các pipelines dựa trên phương pháp CI / CD.

Featured-image-CI-CD-with-Cloud-Native-Applications2.png

Kubernetes là Container Orchestration Platform cho các ứng dụng cloud-native

So với việc triển khai VM, phân phối liên tục trong một môi trường như Kubernetes hiệu quả hơn rất nhiều do không cần tải toàn bộ ứng dụng xuống để thực hiện cập nhật hoặc thay đổi. Mỗi microservice chạy trong một container và chúng được xây dựng mô-đun một cách chủ ý. Các đặc điểm của các ứng dụng cloud-native thực sự khuếch đại lợi ích của CI / CD.
Các ứng dụng cloud-native có thể được phát triển, thử nghiệm và phân phối bằng trong cùng một môi trường cloud (hoặc trong các môi trường tương tự) với sự trợ giúp của Kubernetes. Có sự tồn tại song song của cáccontainer trong node chạy phiên bản staging và các container trong node riêng biệt thực sự cho người dùng thực và giữ cho ứng dụng chạy.

Cần có một pipeline thu hẹp khoảng cách giữa các giai đoạn phát triển. Phát triển một ứng dụng hoàn chỉnh với nhiều microservice khác với triển khai ứng dụng lên cloud. Những thách thức của quá trình chuyển đổi làm nổi bật hơn nữa sự cần thiết phải có các pipeline tốt để quản lý toàn trình.

CD Pipeline với Jenkins

Jenkins có lẽ là công cụ CD phổ biến nhất trên thị trường. Nó được sử dụng bởi hàng ngàn nhóm phát triển để tự động hóa quá trình phối hợp phát triển, thử nghiệm và triển khai các pipeline cho các ứng dụng cloud-native. Trong khi Kubernetes xử lý việc sắp xếp các tài nguyên server, cluster và các node, Jenkins trở thành cầu nối cần thiết để thu hẹp khoảng cách nói trên.
Jenkins cung cấp một số lợi thế :
  • Các container có thể được tạo ra hiệu quả hơn ngay từ đầu, toàn bộ ứng dụng hoạt động tốt hơn với các microservice và kiến trúc được định sẵn như một phần của deployment process.
  • Duy trì môi trường sạch để tương thích tối đa. Jenkins quay vòng các container mới khi cần kiểm tra và cập nhật.
  • Jenkins cũng tương thích với Helm và sẽ chạy như một container Kubernetes, nghĩa là có thể chạy Jenkins với các dịch vụ như Amazon EKS và hợp lý hóa pipeline phát triển hơn nữa.
Jenkins sử dụng các thành phần như Jenkins Master và Executor Pods, Data Persistent Disk, UI & Discovery Services và UI Ingress làm thành phần bổ sung. Để thiết lập Jenkins, cần có front-facing node cho UI và node hoặc cluster riêng cho Jenkins Master Pods.

Vì Jenkins chạy như một Kubernetes pod tiêu chuẩn, cần định cấu hình dịch vụ bằng các tệp YAML. Khi dịch vụ hoàn tất, có thể tạo Jenkins deployment từ master pod. Jenkins cũng sử dụng lưu trữ liên tục để lưu trữ các tập tin cấu hình.

Bên cạnh đó, còn có native Kubernetes operator của VirtusLab cho công cụ CD thực hiện chính xác những gì nó hứa hẹn “Jenkins operator là một Kubernetes native operator quản lý hoàn toàn Jenkins trên Kubernetes. Nó được xây dựng với cấu hình bất biến và khai báo như mã”. Operator gốc khiến Jenkins trở nên mạnh mẽ như các ứng dụng khác trong cluster bằng cách cho phép cung cấp tài nguyên server động.

Kubernetes & Travis CI

Travis CI có thể không phổ biến như Jenkins, nhưng điều đó không có nghĩa là khả năng của nó kém hơn. Rất nhiều nhà phát triển lựa chọn Travis là công cụ để sử dụng nhằm đi đến CI workflow. Điều đáng chú ý là Travis CI vốn không sẵn sàng để phối hợp với Kubernetes, nhưng các plugin và add-on giúp cả hai hoạt động trơn tru lại rất phổ biến.

Quá trình triển khai Travis CI rất giống với việc cài đặt Jenkins. Cần thêm Travis repo và cấu hình travis.yml. Tạo pod cho Travis và các dịch vụ hỗ trợ khác (ví dụ: MySQL) và bắt đầu cài đặt các dịch vụ. Có thể chọn mã hóa Travis vào thời điểm này; client tool của Travis hỗ trợ mã hóa các thông tin bí mật và thông tin đăng nhập.

Travis CI cũng hoạt động với các nền tảng và dịch vụ khác. Chẳng hạn, Travis CI có thể được sử dụng để tự động triển khai lên AWS CodeDeploy. Lệnh travis setup đơn giản sẽ kích hoạt triển khai miễn là nó được chạy trong thư mục dự án và có tệp YML hợp lệ. Công cụ này thậm chí sẽ cung cấp việc tạo tự động các storage bucket S3.

Travis CI tự động hóa test như một phần tính năng của nó cho các ứng dụng cloud-native. Bất cứ khi nào bạn đẩy vào một thay đổi đối với GitHub, Travis CI sẽ tự động chạy test trên các mã mới. Nếu các bản cập nhật mới phá vỡ một số chức năng nhất định, lỗi có thể được phát hiện trước khi chuyển sang triển khai. Travis hoạt động tốt với các nhánh khác nhau, cũng như với các multiple master.

CircleCI là một Solution

Công cụ thứ ba là CircleCI. Đây cũng là một công cụ hoạt động thực sự tốt với Kubernetes, đặc biệt vì nó đi kèm với docker support gốc. CircleCI cho phép sao chép môi trường phát triển trước khi triển khai, và ngược lại, trong môi trường K8s mà không phải cấu hình thủ công mọi thứ.

Tệp YML chính lưu trữ các cấu hình phối hợp, nhưng sự tương tác thực sự giữa CircleCI và Kubernetes xảy ra thông qua các Orbs. Orbs là các gói cấu hình nhỏ hơn chứa tham số của các quy trình trong CircleCI. Khimuốn tự động hóa kiểm tra, cần xác định các lệnh và routine sử dụng nhiều lần bằng Orbs.

Một lợi thế rất lớn của Orbs trong CircleCI là sự phổ biến của thư viện Orbs sử dụng để cải thiện pipeline CI / CD. Có rất nhiều thứ phục vụ việc tự động hóa trong một dự án phát triển như các routine, công cụ và các thành phần khác trong Orbs vì Orbs là một công cụ bổ sung rất lớn. CircleCI cũng có Workflows (đối với runtimes và routines), Steps (đối với các tác vụ và lệnh cụ thể có thể kết hợp thành các routines phức tạp hơn) và Jobs.

Phần sau là cách xác định hành động để hoàn thành. Jobs và Steps cho phép cân bằng giữa độ phức tạp vàmô đun. Hãy nhớ rằng CircleCI tập trung vào việc tạo ra một pipeline CI / CD có thể được sử dụng trong các tình huống khác nhau, do đó tính phân mô đun và dễ sử dụng trở thành các phần quan trọng của công cụ. CircleCI cho phép di chuyển sang từ các công cụ CI / CD khác.

CI / CD với các ứng dụng cloud-native là cách tốt nhất để đơn giản hóa việc phát triển và triển khai mà không cần phân bổ tài nguyên mở rộng. Tất cả các công cụ này đều chạy trong một container Kubernetes tiêu chuẩn và có thể giúp đơn giản hóa đáng kể pipeline triển khai.
 
Top