Giới thiệu
Sự ra đời của Infrastructure as Code (IaC) đã thay đổi quy trình quản lý hệ thống, mang lại sự đơn giản và hiệu quả cho cả đội DevOps và đội phát triển. Thay vì phải thực hiện các thao tác thủ công, IaC cho phép người dùng mô tả và cung cấp hạ tầng thông qua mã nguồn. Với IaC, việc định nghĩa và tạo ra tất cả các tài nguyên cho môi trường, bao gồm Kubernetes và các dịch vụ đám mây, được thực hiện một cách tự động và nhất quán thông qua các tệp tin mã. Công việc thiết lập hạ tầng từ cấu hình hệ thống, mạng cho đến các tham số cụ thể trở nên dễ dàng và hiệu quả hơn bao giờ hết.
Tuy nhiên, hầu hết các kỹ sư DevOps vẫn thường lưu trữ các tệp tin IaC trên máy cá nhân và thực hiện các thao tác thủ công để tạo ra hạ tầng. Khi có thay đổi, họ chỉ cần sửa đổi trên máy của mình và chạy lại mã.
Một số người cẩn thận hơn sẽ lưu trữ các tệp tin IaC trên Git Repository để theo dõi và quản lý các thay đổi, nhưng vẫn thực hiện các thao tác thủ công trên máy cá nhân để cập nhật hạ tầng. Cách làm này có thể gây khó khăn trong việc quản lý, đặc biệt khi đội ngũ phát triển ngày càng đông. Để khắc phục vấn đề này, GitOps đã ra đời.
Với GitOps, mọi quy trình tạo, kiểm tra và thay đổi hạ tầng đều được tự động hóa thông qua việc chỉnh sửa tệp tin IaC và đẩy chúng lên Git.
GitOps là gì?
Tại KubeCon năm 2019, một cuộc thảo luận đã mô tả GitOps là một "phương pháp nhanh chóng và an toàn cho các nhà phát triển và nhà điều hành để duy trì và cập nhật các ứng dụng phức tạp đang chạy trên Kubernetes".
GitLab xác định GitOps là "một cách vận hành mà áp dụng các thực tiễn tốt nhất của DevOps được sử dụng cho phát triển ứng dụng như quản lý phiên bản, hợp tác, tuân thủ và công cụ CI/CD, và áp dụng chúng cho tự động hóa hạ tầng".
Weaveworks định nghĩa GitOps là "một cách để quản lý cụm Kubernetes và phân phối ứng dụng. GitOps hoạt động bằng cách sử dụng Git như một nguồn cấu hình chính cho hạ tầng và ứng dụng".
Với tất cả những định nghĩa trên, mình rút gọn lại như sau: GitOps là phương pháp đồng bộ trạng thái hạ tầng hiện tại cho giống với cấu hình hạ tầng được định nghĩa trong các tệp tin IaC lưu trữ trên Git.
Các luồng công việc của GitOps là:
- Vận hành Git (như cấu hình, cài đặt, cập nhật phiên bản mới của Git, …)
- Sử dụng Git như nguồn cấu hình chính. Ví dụ: Iac để định nghĩa hạ tầng
- Các hoạt động tạo hoặc thay đổi đều được thực hiện thông qua Git
- Sử dụng CI/CD để đồng bộ hạ tầng từ Git
- Có lưu lại tất cả các thay đổi đã được thực hiện và có thể quay lại thay đổi trước đó
Hiện nay các ứng dụng được phát triển và cập nhật với tốc độ chóng mặt, GitOps ra đời để phần nào đáp ứng cho nhu cầu này.
GitOps là một khái niệm bổ sung cho DevOps, nó hoạt động như một phần mở rộng của DevOps. GitOps là cách làm việc để nâng cao hiệu quả của DevOps.
Cách GitOps hoạt động?
Cách hoạt động của GitOps đa số đều thông qua Git. Ví dụ, khi ta làm việc trong một nhóm DevOps lớn, bây giờ ta cần thay đổi cấu hình của hạ tầng. Ta không có thực hiện thay đổi trực tiếp lên hạ tầng hiện tại mà ta sẽ làm theo quy trình sau:
- Đầu tiên, chúng ta sẽ kéo mã từ Git về máy cá nhân và thực hiện các thay đổi cần thiết trong các tệp tin IaC liên quan đến hạ tầng. Sau khi hoàn tất việc chỉnh sửa, chúng ta sẽ đẩy mã lên Git và tạo yêu cầu merge vào nhánh chính. Yêu cầu này sẽ được xem xét và phê duyệt bởi các thành viên trong nhóm
- Khi yêu cầu được chấp thuận, Git sẽ thông qua hệ thống CI/CD để tự động cập nhật các thay đổi vào hạ tầng, đảm bảo rằng hạ tầng luôn đồng nhất với các cấu hình trong tệp tin IaC
- Nếu xảy ra bất kỳ lỗi nào trong quá trình này, chúng ta có thể dễ dàng quay lại trạng thái trước đó bằng cách sử dụng chức năng Revert trên Git
Các công cụ được sử dụng trong GitOps
Các công cụ phổ biến hiện tại cho GitOps là ArgoCD, FluxCD, Jenkins X và Terraform Cloud.
ArgoCD
ArgoCD là một công cụ triển khai cho Kubernetes trong việc quản lý và triển khai ứng dụng. ArgoCD được phát triển vào năm 2018 và hiện tại đang là một dự án thuộc quyền của Cloud Native Computing Foundation. ArgoCD được dùng để đồng bộ các tệp tin cấu hình của Kubernetes lên hạ tầng hiện tại.
FluxCD
Flux là một công cụ tượng tự như ArgoCD và cũng được dùng cho Kubernetes. Flux được phát triển bởi Weaveworks và hiện cũng đang thuộc quyền của CNCF.
Jenkins X
Jenkins X là cũng là công cụ sử dụng cho Kubernetes và được phát triển bởi CloudBees. Điểm mạnh của công cụ này là nó có thể xài kết hợp với Jenkins.
Terraform Cloud
Terraform Cloud là một dịch vụ của HashiCorp, nó giúp ta trong việc quản lý các tài nguyên được tạo bằng Terraform một cách dễ dàng và bảo mật hơn. Ngoài ra Terraform Cloud còn giúp ta xây dựng luồng CI/CD cho việc cung cấp hạ tầng rất đơn giản.
Kết luận
Vậy là ta đã tìm hiểu xong về khái niệm của GitOps, hiện tại thì các công cụ GitOps có sẵn chỉ tập trung vào Kubernetes và Terraform, còn lại ta đều phải tự làm CI/CD thủ công. Hi vọng trong tương lai sẽ có thêm nhiều công cụ cho các hạ tầng khác nhau. Nguồn tham khảo: The Developer’s Guide to GitOps.
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?
Series ngắn về cách sử dụng ArgoCD:
- Getting Started
- Core concepts
- Private Repo
- ArgoCD Architecture
- Work with Helm
- Work with Kustomize
- Resource hooks
- Secret Management with GitOps
- Application Set
- Multi Cluster
- Enterprise features (SSO)