Migration Cluster từ vContainer tới VKS
Last updated
Last updated
Địa chỉ
VNG CorporationĐể migrate một Cluster từ hệ thống vContainer tới hệ thống VKS, hãy thực hiện theo các bước theo tài liệu này.
Thực hiện tải xuống helper bash script và grand execute permission cho file này ()
Quy trình thực hiện migrate từ vContainer sang vKS (Khách hàng + VNG Cloud)
Step 1: Đánh giá version hiện tại của vContainer cluster và tương ứng với vKS cluster sẽ migrate. Lúc này sẽ xảy ra 2 trường hợp (step 2 và step 3)
Step 2: Nếu version vContainer thấp hơn so với các version đang được hỗ trợ bởi vKS, thì các Custom Resouces (CRD) cần được xem xét mức độ tương tích với các version kubernetes mới.
Nếu tương thích với version vKS mới, tiếp tục thực hiện step 3
Nếu không tương thích, cần manual update và cấu hình lại CRD cũng như các Applications liên quan
Step 3: Nếu version vContainer được hỗ trợ bởi vKS (1.27, 1.28 và 1.29), thì cần kiểm tra các resouces trên vContainer trước khi backup. Cần lưu ý với các loại resources sau:
PV/PVC: Velero không hỗ trợ backup với type hostPath, chỉ hỗ trợ type Local.
Ingress resources: Ingress resources được quản lý bởi container-ingress-nginx-controller sau khi migrate sang sẽ không hoạt động được.
Label và Taint node: Velero không thực hiện gắn lại các Label và Taint cho các nodes ở vKS
Step 4: Thực hiện backup các resouces trên vContainer cluster
Step 5: Thực hiện restore các resources trên vKS cluster
Step 6: Thực hiện kiểm tra và những điều chỉnh
Kiểm tra các StorageClass hiện có trên vContainer và tạo các StorageClass tương ứng trên vKS. Sau đó thực hiện mapping 1:1 StorageClass giữa vContainer và vKS cluster.
Ví dụ file ConfigMap ở Bước 3.
Velero không hỗ trợ backup volume dạng hostPath, chỉ hỗ trợ dạng local.
Đối với các cluster đang sử dụng PV type hostPath, cần thực hiện chuyển sang dạng local như sau:
Lưu ý: Cần thực hiện xóa và deploy lại Application đang sử dụng PV type hostPath
Case 1: Type Local hỗ trợ đường dẫn hostPath
Ví dụ PV hostPath đang cấu hình mount tại folder /opt/data, thực hiện convert sang type Local và mount vào lại Pods, theo mẫu sau:
Case 2: Type Local không hỗ trợ đường dẫn hostPath gốc
Khi thực hiện tạo các PV/PVC theo Case 1, Pod không mount được PVC và xuất hiện lỗi
MountVolume.NewMounter initialization failed for volume "pvc" : path "/mnt/data" does not exist
Thực hiện copy data sang một folder mới (ví dụ /var, /opt, /tmp, ...) và thực hiện lại theo Case 1, sau đó mount PVC vào Pod như thường:
Tạo một project vStorage, Container và S3 key tương ứng để làm nơi lưu trữ dữ liệu backup
Trên cả 2 cluster:
Tạo file credentials-velero với nội dung sau:
Cài đặt Velero CLI
Cài đặt Velero trên 2 cluster kubernetes
Đối với
Annotate các Persistent Volume cần backup
Annotate các resource không backup của kube-system
Annotate các resource khác (không được mark trong file velero_helper.sh), như CSI, Ingress Controller, hoặc những resources khác không muốn migrate (lưu ý cần mark label hết toàn bộ resources của objects không cần backup).
Ví dụ như một application bao gồm DaemonSet, Deployment, Pod, ... thì cần mark label cho toàn bộ resources đó
Thực hiện kiểm tra và gắn các Labels and Taint trên nodes vContainer vào các nodes vKS trước khi restore
Tạo 2 bản backup cho Cluster resources và Namespace resource theo cú pháp
Xem các bản backup đã được tạo và details các resources được backup (chú ý STATUS của backup)
Nếu ở cluster vContainer sử dụng CSI là cinder.csi.openstack.org, cần thực hiện mapping StorageClass giữa 2 cluster vContainer và vKS
Mapping csi-sc-cinderplugin-nvme-5000 (vContainer) và vngcloud-nvme-5000-delete (vKS), tương tự đối với các StorageClass khác
Ở vKS cần tạo các StorageClass tương ứng
Tạo file sc-mapping.yaml và apply trên cluster VKS
Thực hiện thêm permissions cho Velero được quyền restore data PersistentVolume
Tạo file add-permission.yaml và apply trên cluster VKS
Thực hiện restore theo thứ tự
Lưu ý, với mỗi lần thực hiện restore, cần kiểm tra quá trình restore đã thành công hay chưa rồi mới tiếp tục thực hiện các command khác
Trường hợp migrate qua VKS vẫn sử dụng vcontainer-nginx-ingress-controller, thì cần thực hiện đổi type Service thành LoadBalancer