Dọn Dẹp Kho Ảnh Docker Harbor: Vị Cứu Tinh Python Giúp Tối Ưu Bộ Nhớ và An Toàn Tuyệt Đối!
Lê Lân
0
Tự Động Dọn Dẹp Ảnh Docker Trên Harbor An Toàn cùng Kubernetes
Mở Đầu
Việc quản lý các ảnh Docker không sử dụng trong registry Harbor ngày càng trở nên quan trọng khi dung lượng lưu trữ tăng nhanh chóng và ảnh hưởng đến hiệu suất hệ thống. Việc dọn dẹp thủ công vừa mất thời gian vừa dễ gây rủi ro nếu xóa nhầm ảnh đang dùng trong môi trường sản xuất.
Trong bài viết này, chúng ta sẽ khám phá một kịch bản Python tự động kết nối đến Harbor và Kubernetes nhằm dọn dẹp các ảnh cũ, không sử dụng một cách an toàn. Kịch bản này giúp giảm thiểu rác ảnh trong Harbor, đảm bảo không làm gián đoạn các ứng dụng đang chạy nhờ việc nhận diện các ảnh đang được triển khai bởi Kubernetes. Đồng thời, bạn sẽ được hướng dẫn cách cấu hình linh hoạt chính sách bảo lưu ảnh theo thời gian và số lượng, cũng như các tính năng kiểm soát như chạy thử (dry-run).
Thách Thức Của Việc Quản Lý Ảnh Docker Trên Harbor
Phân Tích Vấn Đề
Sau một thời gian vận hành Harbor trong môi trường sản xuất, có thể gặp phải các vấn đề sau:
Dung lượng lưu trữ tăng nhanh: Hàng trăm, thậm chí hàng nghìn ảnh và tag cũ tích tụ.
Khó nhận diện ảnh đang được sử dụng: Không dễ phân biệt ảnh nào đang phục vụ ứng dụng, ảnh nào đã lỗi thời.
Rủi ro gây gián đoạn: Xóa nhầm ảnh đang chạy trong môi trường production có thể ảnh hưởng nghiêm trọng đến dịch vụ.
“Một công cụ tự động dọn dẹp ảnh cũ mà đồng thời hiểu được ảnh nào đang được Kubernetes sử dụng sẽ giúp giảm thiểu rủi ro và nhàn hơn nhiều!”
Giải Pháp: Script Python Tự Động Cleanup Harbor an toàn với Kubernetes
Tổng Quan Script
Script Python này được xây dựng với các điểm nổi bật:
Kết nối Harbor API để liệt kê và xóa ảnh/tag.
Kiểm tra Kubernetes Cluster để xác định các ảnh thực sự đang được triển khai.
Chính sách bảo lưu linh hoạt: giữ lại ảnh mới theo số ngày hoặc giữ lại một số lượng tag gần nhất.
Chế độ Dry-run: thử chạy để xem ảnh nào sẽ bị xóa mà không thực tế xóa.
Báo cáo chi tiết, ghi log đầy đủ hỗ trợ theo dõi quá trình.
Cấu Trúc Chính Của Script
1. HarborClient
Thực hiện các thao tác gọi API Harbor: lấy project, repository, tag, xóa tag.
Xác thực bằng HTTP Basic với username/password.
Hỗ trợ cấu hình xác thực SSL.
2. KubernetesClient
Dùng thư viện kubernetes Python để truy vấn cluster.
Lấy danh sách các image đang dùng từ Deployments, StatefulSets, DaemonSets, Pods.
Trả về tập hợp các image đầy đủ tag/digest.
3. HarborCleanup
Áp dụng các chính sách dọn dẹp:
Bỏ qua ảnh đang dùng trong Kubernetes (mặc định).
Giữ lại các tag theo mẫu định nghĩa (ví dụ latest, stable, prod-*).
Giữ lại tag theo số lượng hoặc theo tuổi.
Thực hiện xóa ảnh hoặc mô phỏng xóa (dry-run).
Hỗ trợ chọn lọc dự án Harbor cần quét và dự án loại trừ.
Thu Thập Danh Sách Ảnh Đang Sử Dụng Trong Kubernetes
Liệt kê tất cả Deployments, StatefulSets, DaemonSets, Pods.
Với mỗi đối tượng, lấy danh sách container images, cả container chính và init containers.
Tập hợp thành tập hợp unique tránh xóa nhầm.
Áp Dụng Chính Sách Bảo Lưu
Luôn giữ các tag khớp mẫu luôn giữ như latest, stable, hoặc có wildcard prod-*.
Giữ các tag có tuổi nhỏ hơn keep_days (ví dụ 30 ngày).
Giữ số lượng tag gần nhất theo keep_tags.
Bỏ qua ảnh đang dùng Kubernetes nếu bật skip_in_use.
Thao Tác Xóa Ảnh
Nếu ảnh/tag không bị bảo lưu, gọi API xóa.
Khi bật --dry-run, chỉ ghi log không xóa thật.
Khuyến nghị bật chế độ --dry-run trước khi thực hiện xóa thật để tránh mất dữ liệu không mong muốn.
Các Tính Năng Nổi Bật
Tính Năng
Mô Tả
Hỗ trợ chính sách đa dạng
Kết hợp giữ theo độ tuổi và số lượng ảnh.
Tự động nhận diện ảnh đang sử dụng
Quét Kubernetes để loại ảnh đang chạy ra khỏi danh sách xóa.
Chế độ Dry-run
Giúp khảo sát trước khi xóa thực.
Cấu hình linh hoạt
Có thể chọn dự án sạch hoặc loại trừ dự án.
Hỗ trợ lấy credential từ Kubernetes Secret
Giúp tự động lấy thông tin Harbor khi tích hợp trong cluster.
Ghi log chi tiết
Theo dõi lịch sử xóa và phát hiện lỗi nhanh chóng.
Bắt Đầu Sử Dụng
Cài đặt phụ thuộc
pip3 install pyyaml kubernetes requests
Chạy thử chế độ Dry-Run
./harbor-cleanup.py \
--use-kube-auth \
--dry-run \
--keep-days 30 \
--keep-tags 5 \
--always-keep-tags latest stable master "prod-*"
Chạy dọn dẹp thực tế
./harbor-cleanup.py \
--harbor-url https://harbor.example.com \
--harbor-username admin \
--harbor-password secret \
--keep-days 30 \
--keep-tags 5
Sử dụng file cấu hình YAML
# config.yaml
harbor-url:https://harbor.example.com
harbor-username:admin
keep-days:30
keep-tags:5
exclude-projects:
-infrastructure
-legacy
Chạy với:
./harbor-cleanup.py --config config.yaml
Cách Hoạt Động An Toàn
Script chỉ xóa ảnh không nằm trong danh sách ảnh đang được k8s sử dụng.
Bảo lưu các tag quan trọng theo mẫu tùy chỉnh.
Hỗ trợ chế độ dry-run để mô phỏng tác động.
Ghi log đầy đủ giúp truy vết và phục hồi nếu cần.
Kết Luận
Việc duy trì registry Harbor gọn gàng, tránh chứa ảnh cũ không dùng là rất quan trọng để bảo vệ tài nguyên hệ thống và đảm bảo hiệu suất. Script Python kết hợp Harbor API và Kubernetes API giúp bạn:
Tự động nhận biết và bảo vệ ảnh đang dùng trong môi trường sản xuất.
Tùy chỉnh dễ dàng chính sách xóa ảnh theo nhu cầu.
Giảm thiểu rủi ro và thao tác thủ công nhờ tự động hóa và chức năng dry-run.
Hãy thử áp dụng script này để giảm đáng kể dung lượng lưu trữ Harbor với độ an toàn cao, đồng thời duy trì vận hành hệ thống ổn định.
Tham gia bình luận chia sẻ trải nghiệm quản lý registry của bạn để cộng đồng cùng phát triển các giải pháp hiệu quả hơn!