Series ArgoCD Thực chiến #4: Mắt thần Image Updater – Tự động hóa CI/CD 100%
1. ArgoCD Image Updater là gì?
Nếu ArgoCD làm nhiệm vụ "nhìn" vào kho code (Git), thì Image Updater làm nhiệm vụ "nhìn" vào kho chứa ảnh (Docker Registry như Docker Hub, GitHub Container Registry, Harbor...).
Cách nó hoạt động:
- Image Updater liên tục quét kho Docker của bạn.
- Nó phát hiện: "Á à, team Backend vừa đẩy lên một image mới afc-core-api:v1.2.1".
- Nó tự động chạy vào kho Git của bạn, tự sửa file values-prod.yaml thành v1.2.1 và tự động tạo một Commit (Git Write-back).
- Ngay khi có Commit mới trên Git, ArgoCD (như chúng ta đã biết ở Bài 3) sẽ lập tức phát hiện ra thay đổi và tiến hành Deploy hệ thống!
Vòng lặp CI/CD của bạn giờ đây đã khép kín hoàn toàn mà không cần con người nhúng tay vào.
2. Cài đặt Mắt thần vào cụm K8s
Giống như ArgoCD, việc cài đặt Image Updater cực kỳ đơn giản. Bạn hãy mở Terminal và chạy lệnh sau để thả nó vào cùng "khu phố" (namespace) với ArgoCD:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml
3. Gắn "Radar" cho Ứng dụng bằng Annotations
Bây giờ, Image Updater đã chạy, nhưng nó chưa biết phải theo dõi ứng dụng nào. Cụm K8s của trạm Metro có hàng chục service, chúng ta chỉ muốn nó theo dõi tự động cho cái afc-core-api-production mà chúng ta đã tạo ở Bài 3.
Tuyệt kỹ ở đây là sử dụng Annotations (Chú thích). Bạn hãy mở file afc-prod-app.yaml (Bản giao kèo ở Bài 3) ra và thêm khối annotations vào phần metadata:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: afc-core-api-production
namespace: argocd
annotations:
# 1. Bật tính năng theo dõi ảnh cho app này, trỏ vào đường dẫn ảnh trên Docker Hub
argocd-image-updater.argoproj.io/image-list: myapi=hieunguyen/afc-core-api
# 2. Chiến lược cập nhật: Dùng SemVer (Semantic Versioning)
argocd-image-updater.argoproj.io/myapi.update-strategy: semver
# 3. Phép màu GitOps: Cho phép Image Updater tự động commit ngược lại vào Git!
argocd-image-updater.argoproj.io/write-back-method: git
spec:
# ... (Phần spec giữ nguyên như Bài 3) ...
Giải mã các chiến lược (Update Strategy):
- latest: Cứ thấy image nào mới nhất là kéo về. (Rất nguy hiểm trên Production, dễ dính ảnh lỗi).
- semver (Khuyên dùng): Dựa trên chuẩn Đánh dấu phiên bản. Bạn có thể ép nó chỉ tự động cập nhật các bản vá lỗi (Patch). Ví dụ: Nó sẽ tự lên từ v1.2.0 lên v1.2.5, nhưng tuyệt đối không tự động nhảy lên v1.3.0 hay v2.0.0. Điều này giúp hệ thống AFC luôn an toàn.
4. Thiết lập Quyền Commit cho Image Updater
Vì chúng ta đang chọn write-back-method: git (ép Image Updater phải commit thẳng vào kho Git), nên nó cần phải có quyền Ghi (Write) vào Git Repository.
Nếu ở Bài 2, bạn đã cấp cho ArgoCD một Personal Access Token (PAT) có cả quyền Đọc và Ghi, thì Image Updater sẽ tự động "mượn" luôn cái chìa khóa đó để dùng.
5. Vòng lặp hoàn hảo (The Perfect Pipeline)
Hãy nhìn lại toàn bộ bức tranh kiến trúc mà bạn vừa xây dựng xong. Đây chính là luồng vận hành của những gã khổng lồ công nghệ:
- Bạn (Dev): Code xong tính năng mới, gõ lệnh git push origin main.
- GitHub Actions / GitLab CI: Tự động chạy Unit Test. Test Pass ➔ Build Docker Image ➔ Đẩy lên Docker Hub với tag v1.2.1. (CI kết thúc nhiệm vụ tại đây, không hề chạm vào K8s).
- ArgoCD Image Updater: Phát hiện có tag v1.2.1 trên Docker Hub. Nó lập tức lấy PAT, chạy vào repo chứa cấu hình Helm, tự động sửa file và tạo ra một commit: "build: update afc-core-api to v1.2.1".
- ArgoCD: Thấy Git có commit mới, tải Helm chart mới về, dịch ra YAML và áp dụng vào K8s.
- Kubernetes: Thực hiện thao tác Rolling Update, tắt dần Pod cũ và bật Pod mới lên. Hệ thống AFC được nâng cấp mà khách hàng quẹt vé không hề cảm nhận được sự gián đoạn (Zero-downtime).
Tổng kết Bài 4
Đến đây, bạn đã biến cụm Kubernetes của mình thành một cỗ máy tự vận hành (Autopilot) 100%. Từ khoảnh khắc code rời khỏi máy của bạn, máy móc sẽ tự động đưa nó đến thẳng môi trường Production một cách an toàn và đúng chuẩn GitOps nhất.
Nhưng khoan đã, Rolling Update của Kubernetes đôi khi vẫn là chưa đủ an toàn. Nhỡ bản v1.2.1 chứa một con bug chết người (ví dụ: trừ sai tiền vé) mà Unit Test không bắt được thì sao? Hệ thống sẽ cập nhật 100% lên bản mới và hàng ngàn khách hàng sẽ bị ảnh hưởng.
Ở Bài 5, chúng ta sẽ bước vào đỉnh cao của kỹ thuật Deploy: Argo Rollouts (Blue/Green & Canary Deployment). Chúng ta sẽ dạy hệ thống cách chỉ đẩy bản mới cho 10% khách hàng dùng thử, nếu ổn định mới đẩy cho 90% còn lại. Bạn đã sẵn sàng chưa?
All rights reserved