Việc quản lý và triển khai các ứng dụng trên nền tảng Kubernetes (K8s) ngày càng trở nên khó khăn, phức tạp. Developer phải đối mặt với những thay đổi chóng mặt về mặt công nghệ nhưng việc triển khai phải đảm bảo tính nhất quán.
Trước đây, mỗi lần deploy ứng dụng lên K8s vẫn sử dụng theo cách truyền thống như dùng Kubeclt hay Helm Command (làm thủ công, hoặc viết Jenkins projects để chạy). NHƯNG với ArgoCD thì việc deploy này hoàn toàn tự động.
1. Giới thiệu ArgoCD
ArgoCD là một công cụ mã nguồn mở giúp quá trình triển khai và quản lý ứng dụng hoàn toàn tự động, phát triển bởi Argo Project dành riêng cho Kubernetes(K8s).
Dựa trên nguyên tắc GitOps, ArgoCD tự động deploy khi cấu hình và mã nguồn trên Git thay đổi, điều này đảm bảo về tính nhất quán và đơn giản hóa quá trình quản lý ứng dụng trên K8s hiệu quả.
2. Tại sao lại sử dụng ArgoCD?
- Quản lý phiên bản: Áp dụng ArgoCD sẽ giúp bạn khai báo, quản lý các định nghĩa, cấu hình và môi trường của ứng dụng được triển khai theo từng phiên bản.
- Tự động hóa: ArgoCD sẽ giúp bạn tự động hoá, dễ dàng kiểm tra việc triển khai và quản lý vòng đời ứng dụng.
3. Các chức năng chính
- Continuous Deployment (CD): ArgoCD tự động triển khai ứng dụng khi có thay đổi trong mã nguồn, giúp cập nhật và triển khai nhanh chóng.
- Khả năng theo dõi và quan sát (Monitoring): ArgoCD cung cấp các công cụ giám sát trạng thái ứng dụng để bạn dễ phát hiện và xử lý vấn đề phát sinh nhanh chóng.
- Quản lý ứng dụng (Application Management): ArgoCD cung cấp API để bạn dễ dàng quản lý và theo dõi trạng thái ứng dụng trên giao diện thân thiện.
- Xử lý lỗi và khôi phục (Error Handling and Rollback): ArgoCD tự động khôi phục lại trạng thái trước đó khi phát hiện lỗi trong quá trình triển khai đảm bảo ứng dụng luôn hoạt động ổn định.
- Quản lý nhiều cluster (Multi-Cluster Management): ArgoCD hỗ trợ quản lý và triển khai ứng dụng trên nhiều cụm K8s từ một nơi duy nhất.
- Hỗ trợ nhiều nguồn GIT khác nhau: ArgoCD có thể tích hợp với nhiều nguồn GIT khác nhau như GitHub, GitLab, Bitbucket và nhiều nguồn khác.
- Hỗ trợ các công cụ và các tiêu chuẩn hiện đại: ArgoCD hỗ trợ tích hợp các công cụ và tiêu chuẩn hiện đại như GitOps, Helm, ... và các công cụ CI/CD khác.
4. Kiến trúc
ArgoCD bao gồm 3 thành phần chính như hình ảnh bạn đang thấy phía trên:
- API
- Repository Service
- Application Controller
4.1 API Server
Đây là một gRPC/API server được xuất ra thành các APIs để các components khác như là CLI, WebUI và các CI/CD khác sử dụng.
API Server này chịu trách nhiệm về:
- Quản lý và báo cáo trạng thái ứng dụng.
- Thực hiện các tác vụ liên quan đến vận hành như: Sync, rollback và các tác vụ do người dùng định nghĩa ra.
- Quản lý các credentials cluster và repository được lưu trữ như một Kubernetes secrets.
- Cung cấp Single Sign-On.
- Thực hiện phân quyền (RBAC - Role-Based Access Control).
- Thực hiện lắng nghe và chuyển tiếp các sự kiện của Git webhook.
4.2 Repository Server
- Đây là một internal service để local cache lại Git repository, lưu trữ những application manifests.
- Repository Service sẽ tạo ra Kubernetes manifests và trả về chúng dựa trên những thông tin như repository URL, application path (đường dẫn đến file manifest), revisions (i.e., commits, tags, branches) và những template-specific settings như Helm values, Ksonnet environments, parameters.
4.3 Application Controller
- Đây là một Kubernetes controller, nó sẽ tiếp tục theo dõi trạng thái ứng dụng, so sánh trạng thái mong muốn được lưu trữ trên Git repository và trạng thái hiện tại của ứng dụng trên các cụm K8s.
- Nó phát hiện sự thay đổi (OutOfSync) của ứng dụng và có áp dụng các thay đổi này. Nó gọi các hook do người dùng định nghĩa cho các sự kiện trong vòng đời ứng dụng như PreSync, Sync và PostSync.
5.Cách thức hoạt động
- ArgoCD hoạt động dựa trên mô hình GitOps - dùng Git là nơi tin cậy nhất (source of truth) để quản lý các tài nguyên hoạt động
- Commit code: Khi developer thay đổi mã nguồn và thực hiện commit code lên kho lưu trữ mã nguồn (Git repository).
- Xây dựng và kiểm tra: CI Engine sẽ lấy mã nguồn từ Git repository, xây dựng, kiểm tra và tạo ra các docker images. Sau đó, các docker images này sẽ được đẩy lên Image Registry.
- Cập nhật cấu hình: Developer hoặc trong một số trường hợp thì CI Engine có thể thay đổi các file cấu hình, các Kubernetes manifest, sau đó commit lên Git repository.
- Đồng bộ hóa tự động: ArgoCD sẽ tự động đồng bộ hóa (sync) các cấu hình hoặc manifest từ Git repository vào Kubernetes cluster.
- Công cụ triển khai: ArgoCD sử dụng các công cụ như Helm, YAML, JSON để định nghĩa và triển khai các manifest và cấu hình.
- Triển khai: ArgoCD triển khai các thay đổi lên các Kubernetes cluster.
- Cập nhật liên tục: Mỗi lần bạn có sự thay đổi trong repository, ArgoCD sẽ tự động cập nhật và đồng bộ các Kubernetes cluster theo các cấu hình mới nhất từ Git repository.
ArgoCD đảm bảo rằng mỗi khi có bất kỳ thay đổi nào trong Git repository, toàn bộ hệ thống Kubernetes sẽ được cập nhật kịp thời và chính xác, giúp tăng cường hiệu suất trong quy trình triển khai ứng dụng.
6. Tổng kết
Vậy tổng kết lại thì bài viết này sẽ giúp bạn hiểu được: Tổng quan về ArgoCD, Những điều khiến cho bạn nên sử dụng ArgoCD, Các thành phần chính của ArgoCD cũng như nắm được flow hoạt động của ArgoCD giúp bạn có cái nhìn rõ hơn về ArgoCD trong dự án.
Nếu yêu thích và quan tâm các chủ đề về DevOps, bạn có thể tham khảo thêm các bài sau:
Bài viết liên quan
Grafana Loki là gì? So sánh Loki và Elasticsearch
Nov 16, 2024 • 6 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
ELK là gì? So sánh hiệu suất giữa ELK và PLG
Nov 06, 2024 • 9 min read
Docker Best Practices: Tối ưu Dung lượng Docker Image
Oct 30, 2024 • 8 min read
SQL Injection là gì? Những cách phòng ngừa SQL Injection
Oct 25, 2024 • 10 min read