ℹ️ Góp ý cải thiện tài liệu 
Để đóng góp chỉnh sửa, nhấp vào liên kết Gửi ticket ở khung bên phải.

Mục đích: Tài liệu hướng dẫn dịch chuyển một Cluster từ hệ thống Cloud Provider hoặc On-premise tới hệ thống VNPT K8S của khách hàng

Điều kiện cần

  • Tạo cụm VNPT K8s giống với cluster cần migrate về số nodes, os nodes, cấu hình nodes, version k8s …
  • Khi thực hiện migrate, có thể tài nguyên trong Cluster nguồn đang sử dụng label và taint. Cần đảm bảo các label và taint quan trọng này tồn tại trong các node Cluster đích.
  • Nếu Storage Class khác nhau giữa Cluster nguồn và Cluster đích, cần mapping Storage Class giữa 2 cụm. File Yaml này cần được apply tại Cluster đích trước khi bạn lệnh backup.
  • Nếu cụm cluster nguồn đang sử dụng private registry thì phải migrate tất cả các images từ private registry hoặc đến một registry mà cluster đích có thể sử dụng, sau đó cần mapping image trong các resources từ cluster cũ sang cluster đích. File Yaml này cần được apply tại Cluster đích trước khi chạy lệnh backup.
  • Khuyến nghị nên migrate images tới VNPT Container Registry thông qua hướng dẫn tại đây (Sẽ bổ sung sau)

Lưu ý

  • Không hỗ trợ migrate snapshot volumes giữa các cloud provider mà sẽ sử dụng cơ chế File system Backup. Xem thêm tại đây.
  • Không thể migrate vào cluster đích có phiên bản Kubernetes thấp hơn cluster nguồn.
  • Không đảm bảo tương thích khi migrate giữa các version Kubernetes khác nhau: Các API (đặc biệt là CRD) có thể không còn tương thích ở cluster mới. Cần kiểm tra và cập nhật các CRD hoặc API versions để phù hợp với cluster đích.
  • Không hỗ trợ sao lưu và migrate hostPath Volume

 

Hướng dẫn cài đặt velero tool trên cụm k8s đích và nguồn

Giới thiệu

  • Velero là một công cụ mã nguồn mở giúp backup và restore tài nguyên của Kubernetes, bao gồm cả Persistent Volume (PV). Nó hỗ trợ nhiều backend storage như AWS S3, MinIO, Google Cloud Storage, Azure Blob Storage, v.v.
  • Velero là một công cụ mở, hỗ trợ backup (sao lưu), restore (khởi phục) và di chuyển dữ liệu cho Kubernetes cluster. 
  • Velero cung cấp các tính năng: Backup và khôi phục toàn bộ hoặc tối thiểu các resource trong cluster. Di chuyển dữ liệu giữa các cluster. Hỗ trợ backup persistent volumes.

Hướng dẫn cài đặt velero

  • Chuẩn bị storage
    • Cần sử dụng một storage làm nơi nhận dự liệu backup của cluster. Trong ví dụ này đã có một dịch vụ s3 minio có thông tin như sau:
Enpoint: https://vnptcloud.storage.vnpt.vn
Region: us-east-1
Bucket: migrate-k8s
  • Install Velero CLI và Velero Server
    • Thực hiện các bước sau trên cả 2 Cluster (source and target)
    • Riêng dịch vụ Vnpt K8s được truy cập và thao tác thông qua máy ảo bastion. Tất cả các thao tác cài đặt, thao tác velero đều phải thực hiện tại máy ảo bastion. 

1.Tạo file credentials cho storage đã chuẩn bị với nội dung sau: 

[default]
aws_access_key_id=_______________________
aws_secret_access_key=___________________

 

2.Cài đặt Velero CLI

curl -OL https://github.com/vmware-tanzu/velero/releases/download/v1.13.2/velero-v1.13.2-linux-amd64.tar.gz
tar -xvf velero-v1.13.2-linux-amd64.tar.gz
cp velero-v1.13.2-linux-amd64/velero /usr/local/bin

 

3.Cài đặt Velero Server

velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.9.0 \
    --use-node-agent \
    --use-volume-snapshots=false \
    --secret-file ./credentials \
    --bucket migrate-k8s \
    --backup-location-config region=us-east-1,s3ForcePathStyle="true",s3Url=https://vnptcloud.storage.vnpt.vn

 

4.Kiểm tra velero server đã cài đặt thành công hay chưa

$ kubectl get all -n velero


NAME                        READY   STATUS    RESTARTS       AGE
pod/node-agent-g6pl2        1/1     Running   0              5h28m
pod/node-agent-h5pt5        1/1     Running   0              5h28m
pod/velero-cb46cf74-r8p5f   1/1     Running   0              5h28m

NAME               READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/node-agent      1            1         <none>       5h28m

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/velero   1/1     1            1           5h28m

NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/velero-cb46cf74   1         1         1       5h28m

Hướng dẫn thực hiện migrate

Thực hiện chuẩn bị trên cụm cluster đích và cluster nguồn

  1. Tải file script hỗ trợ cho việc chuẩn bị migrate cho cụm nguồn tại đây
wget -O helper.sh https://raw.githubusercontent.com/chungtd203338/test/refs/heads/main/helper.sh
chmod +x helper.sh

 

  1. Đánh label cho tất cả các volume trong cụm K8s nguồn
  • Annotate các Persistent Volume cần backup. Mặc định velero sẽ không backup volume. Chạy lệnh dưới để annotate backup tất cả volume có sử dụng trong cụm.
./helper.sh mark_volume

 

  1. Đảm bảo label trên các nodes của cụm đích khớp với cụm nguồn nếu các resource trong cụm có sử dụng label hoặc taint.
  • Sử dụng câu lệnh sau để check các label và taint khác mặc định của các nodes trên cluster nguồn

./helper.sh show_labels

./helper.sh show_taints

 

  1. Mapping storageclass trên cụm đích nếu storageclass trên cụm đích khác với cụm nguồn
  • Tạo file mapping Storage Class giữa Cluster nguồn và đích (thực hiện apply trên cụm đích)

apiVersion: v1
kind: ConfigMap
metadata:
  name: change-storage-class-config
  namespace: velero
  labels:
    velero.io/plugin-config""
    velero.io/change-storage-class: RestoreItemAction
data:
  <old-storage-class>: <new-storage-class>

  <old-storage-class>: <new-storage-class>

 

 

  1. Mapping images trên cụm đích nếu cụm nguồn sử dụng private registry
  • Tạo file mapping Images giữa Cluster nguồn và đích (thực hiện apply trên cụm đích)

apiVersion: v1
kind: ConfigMap
metadata:
  name: change-image-name-config
  namespace: velero
  labels:
    velero.io/plugin-config""
    velero.io/change-image-name: RestoreItemAction
data:
  "case1": "nginx,ecr.vnptplatform.vn"

  "case2": "1.0.0,3.0.0"

  "case3": "nginx:alphine,ecr.vnptplatform.vn/nginx:1.0.0"

  "caseN": "<parten _cũ>,<parten _mới>"

  • Với các case tương ứng <parten _cũ>,<parten _mới>, velero sẽ đọc configmap và tự động thay thế các image có các parten khai như trên trong Pod, Deployment, Statefulset, Daemonset, Replicaset, Job, CronJob.

Thực hiện backup cụm nguồn

  • Thực hiện backup theo cú pháp trên cụm cluster nguồn: 
velero backup create vnpt-backup-name --exclude-namespaces velero,kubesystem --wait --include-cluster-resources=true
  • Ở đây chúng ta sẽ backup cả cụm trừ namespace velero tránh tự backup chính nó và namespace kube-system của hệ thống
  • Nếu không muốn migrate resources nào hãy đánh label velero.io/exclude-from-backup=true cho resources đó bằng thủ công trước khi thực hiện câu lệnh backup trên.

Thực hiện migrate sang cụm VNPT K8s

  • Trước khi thực hiện hãy kiểm tra đã thực hiện các bước 4 và bước 5 ở mục a hay chưa.
  • Thực hiện restore vào cụm mới theo cú pháp sau:
velero restore create --item-operation-timeout 1m --from-backup vnpt-backup-name \
  --exclude-resources="MutatingWebhookConfiguration,ValidatingWebhookConfiguration"