Lưu ý bài viết này thực hiện tháng 09/2025
| Tiêu chí | Velero (Công cụ Sao lưu) | MinIO (Hệ thống Lưu trữ) |
| Mục đích chính | Sao lưu và Phục hồi trạng thái, cấu hình và dữ liệu của cluster Kubernetes. | Lưu trữ và Truy xuất dữ liệu dưới dạng các đối tượng (object) một cách an toàn, bền bỉ. |
| Loại công cụ | Công cụ Backup & Restore, Di chuyển Cluster. | Hệ thống Lưu trữ đối tượng (Object Storage). |
| Chức năng cốt lõi | – “Chụp ảnh” tài nguyên K8s (YAML). – Tạo snapshot cho ổ đĩa (Persistent Volumes). – Lên lịch sao lưu tự động. – Thực thi quá trình phục hồi. | – Lưu trữ file/dữ liệu dưới dạng object. – Cung cấp API tương thích S3. – Quản lý phiên bản, mã hóa dữ liệu. – Phân phối dữ liệu trên nhiều máy chủ. |
| Đối tượng tác động | Các tài nguyên Kubernetes (Pods, Services, PVs, PVCs…). | Các “đối tượng” dữ liệu bất kỳ (file ảnh, video, file nén, các bản backup do Velero tạo ra…). |
| Phụ thuộc | Bắt buộc phải có một nơi để cất giữ các bản sao lưu (như MinIO, AWS S3, Google Cloud Storage…). | Hoạt động độc lập. Nó là nền tảng cho các công cụ khác (như Velero) sử dụng. |
| Ví dụ sử dụng | “Tôi dùng Velero để sao lưu ứng dụng trên Kubernetes của tôi mỗi đêm và cất bản sao lưu đó vào kho.” | “Tôi dùng MinIO để làm cái kho chứa các bản sao lưu do Velero tạo ra.” |
Kết luận
Không cần phải lựa chọn giữa Velero và MinIO. Thay vào đó, bạn quyết định sử dụng Velero VÀ MinIO cùng nhau để tạo nên một giải pháp sao lưu Kubernetes hoàn chỉnh, mạnh mẽ và tự quản lý.
- Velero là hành động (sao lưu/phục hồi).
- MinIO là địa điểm (nơi lưu trữ các bản sao lưu).
1.Triển Khai
1.1 Cấu hình docker-compose.yml cài đặt MiniO (thực hiện trên rancher-server)
Tùy thuộc vào điều kiện của công ty/cá nhân minio sẽ được cài đặt ở đâu.
Bài viết này đang tận dụng tài nguyên có sẵn trên rancher để tối ưu về chi phí và thời gian cài đặt
Nhắc lại 1 chút về danh sách các VM

minio:
image: minio/minio
container_name: minio
restart: always
ports:
- "9000:9000" # MinIO API Port
- "9001:9001" # MinIO Console Port
volumes:
- ./data/minio:/data
environment:
MINIO_ROOT_USER: hoatrancntt
MINIO_ROOT_PASSWORD: hoatrancntt
command: server --console-address ":9001" /data
networks:
VLAN88:
ipv4_address: 192.168.9.29
Lưu ý: Trong môi trường Lab có thể sử dụng mạng ngang hàng “IP chung dãy” còn trên môi trường thực tế thì nên tách lớp ip của backup riêng để tăng cường về bảo mật.
VLAN88 –>được tạo dạng Macvlan –> nói 1 cách dễ hiểu hơn là VLAN 88 đang được brigde từ máy VM vào các docker, bên trong.
Trong server rancher –>home/username/docker-compose.yml thêm phần minio

Build thành công
Đăng nhập vào http://192.168.9.29:9001/login1.2Tạo Bucket trên MiniO
Tiến hành tạo bucket : bấm Create Bucket > Đặt tên Bucket tại Bucket Name và bấm Create Bucket

1.3 Kết nối các K8s tới MiniO
Áp dụng tất cả các client trong cụm
# Cài đặt client.
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/mc
# Bước 2: Cấu hình Alias kết nối đến MinIO Server
# mc alias set <TÊN_ALIAS> <ACCESS_KEY_GỐC> <SECRET_KEY_GỐC>
mc alias set myminio http://192.168.9.29:9000 hoatrancntt hoatrancntt

# Tạo Service Account (Access Key & Secret Key mới)
# mc admin user svcacct add <TÊN_ALIAS> <TÊN_USER_SỞ_HỮU>
mc admin user svcacct add myminio hoatrancntt
#Node 01
Access Key: 3L1B2PGLWZVKOH3CQR06
Secret Key: qfrpPWbkjjbsFBTLZm1gCvkTxkdYYM0ccF7kRZDg
Expiration: no-expiry
# Node 02
Access Key: 1A7G3KQGS00HUQ830D54
Secret Key: Qq6jqFRIputzBVF9WnyMdRy+AG+jz06+HEN9dqPf
Expiration: no-expiry
# Node 03
Access Key: V87J1FORPXDXMYU8T8GK
Secret Key: VFvN4T6F0+h7nFD6B4CDGskD63Pyg9KTvQQe8QoB
Expiration: no-expiry
1.4 Cài đặt Velero client (Thực hiện trên server k8s-master-1 hoặc kubectl shell Rancher)
#Ta truy cập trực tiếp vào https://github.com/vmware-tanzu/velero/releases để lấy bản mới nhất
# wget https://github.com/vmware-tanzu/velero/releases/download/v1.17.0-rc.1/velero-v1.17.0-rc.1-linux-amd64.tar.gz
# tar -xvf velero-*
# sudo mv velero-v1.17.0-rc.1-linux-amd64/velero /usr/local/bin


1.5 Cài đặt Velero với MinIO làm backend lưu trữ các bản sao lưu của K8S
[Thực hiện trên K8s Master hoặc trên Kube shell Rancher]
Mục đích: Tạo một file tên là credentials-velero chứa cặp khóa Access Key và Secret Key của MinIO.
Tại sao lại có aws_?: Velero sử dụng plugin S3 của AWS để giao tiếp. Do MinIO tương thích hoàn toàn với API S3 của AWS, Velero sử dụng cùng một định dạng credentials đó để kết nối, ngay cả khi máy chủ không phải của AWS.
echo -e "[default]\naws_access_key_id=Your acess key\naws_secret_access_key=Password acess key" > ./credentials-velero
echo -e "[default]\naws_access_key_id=PU872KE9Z9H2MH59YLF6\naws_secret_access_key=qjXr7zinDnhmYaomJ6I8e8VjbR9tl2cbWruUMPMe" > ./credentials-velero
Cài đặt Velero với MinIO làm backend lưu trữ các bản sao lưu của Kubernetes
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.10.0 \
--bucket bk-hoatranlocal-k8s \
--namespace velero \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--backup-location-config \
region=minio,s3ForcePathStyle="true",s3Url=http://192.168.9.29:9000

2. Backup tài nguyên của Namespace cụ thể
2.1 Backup
#Backup cho một Namspace cụ thể
velero backup create backup-hoatranlocal-ecommerce-020925 --include-namespaces hoatranlocal-ecommerce
Kiểm tra lại thông tin đã backup
velero backup describe backup-hoatranlocal-ecommerce-020925

#Backup cả cụm cluster
velero backup create full-cluster-except-system-020925 --exclude-namespaces kube-system,velero

Kiểm tra trạng thái backup

2.2 Restore K8s
#Phục hồi từ một bảng backup
Lệnh này sẽ khôi phục lại tất cả tài nguyên có trong một bản backup cụ thể.
full-cluster-except-system-020925 –> là bảng backup full ở trên.
velero restore create --from-backup full-cluster-except-system-020925
#Chỉ phục hồi từ một Namspace cụ thể.
Trường hợp này là khôi phục khi một ứng dụng bị lỗi.
velero restore create --from-backup <TÊN_BẢN_BACKUP> --include-namespaces <TÊN_NAMESPACE>
velero restore create restore-hoatranlocal-ecommerce-only --from-backup full-cluster-except-system-020925 --include-namespaces hoatranlocal-ecommerce
#Phục hồi từ namespace này sang namespace khác. (Thường hay sử dụng và rất hữu ích)
Bạn có thể phục hồi một namespace từ backup nhưng đổi tên nó thành một namespace mới. Cực kỳ hữu ích để tạo môi trường staging/dev từ backup của production.
velero restore create <TÊN_RESTORE>
--from-backup <TÊN_BACKUP>
--namespace-mappings <NAMESPACE_CŨ>:<NAMESPACE_MỚI>
Ví dụ: Phục hồi namespace production thành staging.
velero restore create restore-prod-to-staging --from-backup backup-hoatranlocal-ecommerce-020925 --namespace-mappings hoatranlocal-ecommerce:hoatranlocal-ecommerce-staging

2.3 Lập lịch tự động.
Sử dụng cú pháp Cron trong lunix để tiếp hành lập lịch backup dữ liệu hằng ngày.
Lệnh thực hiên:
# velero schedule create
Ví dụ: thực hiện sao chép dữ liệu vào lúc 1h sáng hằng ngày, thời gian lưu trữ 720h.
velero schedule create daily-full-backup\
--schedule="0 1 * * * " \
--ttl 720h0m0s

Thực hiện backup namespace hằng tuần vào chủ nhật, 3 giờ sáng.
velero schedule create weekly-production-backup \
--schedule="0 3 * * 0" \
--include-namespaces hoatranlocal-ecommerce \
--ttl 720h0m0s


2.4 Kịch bản phục hồi sau thảm họa.
Bài toán giả định khôi phục dữ liệu của data center bị mất dựa trên backup đã lưu trên minio ở một khu vực khác.
2.4.1. Chuẩn bị một vùng dữ liệu mới.
Trước khi phục hồi, bạn cần có một môi trường Kubernetes hoàn toàn mới, sạch sẽ.
- Dựng hạ tầng mới: Chuẩn bị các máy chủ (vật lý hoặc ảo) mới hoàn toàn.
- Dựng lại cụm Kubernetes: Cài đặt một cụm Kubernetes mới toanh trên các máy chủ đó. Cụm này phải có phiên bản Kubernetes tương đương hoặc mới hơn phiên bản của cụm cũ đã bị mất.
- Cài đặt công cụ cần thiết: Trên máy quản trị (admin machine), bạn cần cài đặt
kubectlđể kết nối tới cụm K8s mới và quan trọng nhất là cài lại Velero CLI.
2.4.2 Cài đặt Velero ở dạng chỉ khôi phục (Restore only mode)
- Chuẩn bị file credentials-velero: Tạo lại file chứa access key và secret key của MinIO server.
- Chạy lệnh
velero installvới cờ--restore-only:
velero install
--provider aws
--plugins velero/velero-plugin-for-aws:v1.10.0
--bucket bk-hoatranlocal-k8s
--secret-file ./credentials-velero
--use-volume-snapshots=false
--backup-location-config
region=minio,s3ForcePathStyle="true",s3Url=http://<ĐỊA_CHỈ_IP_MINIO_MỚI>:9000
--restore-only
Kiểm tra kết nối: Sau khi cài đặt xong, hãy kiểm tra xem Velero trên cụm mới đã “nhìn thấy” các bản backup cũ hay chưa.
velero backup get
2.5. Thực hiện phục hồi
2.5.1 Chọn bản backup cần phục hồi từ lệnh get bên trên.
2.5.2 Chạy lệnh restore
velero restore create restore-from-disaster --from-backup <file backup của bạn>
2.5.3 Theo dõi tiến trình
# Xem trạng thái chung
velero restore get
# Xem chi tiết, bao gồm các lỗi nếu có
velero restore describe restore-from-disaster
2.5.4 Kiểm tra xác nhận hoàn thành
Sau khi Velero báo Completed, bạn cần kiểm tra lại toàn bộ hệ thống để đảm bảo mọi thứ đã trở lại.
- Kiểm tra Pods:
kubectl get pods --all-namespacesXem các pod ứng dụng của bạn có đang ở trạng tháiRunningkhông. - Kiểm tra Services:
kubectl get services --all-namespaces - Kiểm tra Ingress/Gateway: Truy cập vào ứng dụng của bạn từ bên ngoài thông qua tên miền để xác nhận kết nối end-to-end.
- Kiểm tra dữ liệu (Nếu có): Nếu bạn có phục hồi cả volume, hãy đăng nhập vào ứng dụng và kiểm tra xem dữ liệu có đúng như tại thời điểm backup hay không.

