Giới thiệu
Sự ra đời của Infrastructure as Code (IaC) giúp DevOps đơn giản hóa việc quản lý hệ thống cho cả đội DevOps và đội phát triển bằng cách sử dụng code để mô tả và cung cấp hệ thống.
Với IaC thì việc định nghĩa và tạo tất cả các tài nguyên cho môi trường từ Kubernetes, Terraform và Cloud đều được gói gọn trong các tệp tin code thay vì tạo bằng cách thủ công. Điều này đã giúp công việc định nghĩa hạ tầng từ cấu hình hệ thống, mạng và các tham số cho các môi trường khác nhau một cách rất dễ dàng.
Tuy nhiên đa số các bạn DevOps thường để các tệp tin IaC ở dưới máy cá nhân và chạy thủ công để tạo hạ tầng, nếu có thay đổi gì ở hạ tầng các bạn chỉ sửa dưới máy của mình và chạy lại. Có một vài bạn kĩ hơn thì sẽ lưu các tệp tin IaC ở trên Git Repository để lưu trữ và theo dõi các thay đổi, nhưng vẫn chạy thủ công để thay đổi hạ tầng. Việc này sẽ dẫn tới khó khăn trong việc quản lý khi đội của ta có nhiều người hơn. Do đó GitOps đã ra đời.
Với GitOps việc tạo, kiểm tra và thay đổi hạ tầng đều được thực hiện tự động thông qua việc sửa tệp tin IaC và đẩy lên Git. Lúc này đội của ta có thể dễ dàng theo dõi việc thay đổi hạ tầng.
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à cách ta đồng bộ hạ tầng hiện tại cho giống với các cấu hình hạ tầng được định nghĩa trong các tệp tin IaC được lưu 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à một 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ó nhảy thẳng lên hạ tầng hiện tại để thay đổi mà ta sẽ làm như sau.
Đầu tiên ta sẽ kéo code trên Git xuống, thay đổi cấu hình của các tệp tin IaC mà liên quan tới hạ tầng. Sau khi thay đổi xong ta đẩy code lên trên Git, tạo yêu cầu merge vào nhánh chính. Sẽ có người xem xét và duyệt yêu cầu cho ta. Sau đó Git thông qua CI/CD sẽ cập nhật các thay đổi của hạ tầng và đảm bảo hạ tầng đồng nhất với các cấu hình của IaC. Nếu có bất kì lỗi nào ta có thể quay lại được thông qua cách 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ả?