您可以通過備份中心對注冊集群中部署的應用及數據進行備份,并在線上ACK集群中恢復,實現線下應用到線上的快速遷移。本文介紹如何使用備份中心將已接入注冊集群的線下集群的應用遷移至線上ACK集群。
前提條件
已創建注冊集群,并將自建Kubernetes集群(大于1.16版本)接入注冊集群。具體操作,請參見創建注冊集群并接入本地數據中心集群。
已創建和注冊集群在同一地域的用于恢復應用的ACK集群,建議恢復集群為1.18及以上版本。具體操作,請參見創建ACK托管集群和創建ACK專有集群。
重要恢復集群必須使用CSI存儲插件,使用Flexvolume存儲插件或通過csi-compatible-controller組件同時使用CSI Flexvolume存儲插件的集群不支持恢復。
備份中心關注業務應用的備份和恢復。在恢復任務之前,您需要在恢復集群中預先安裝并配置好所需的系統組件。例如:
ACR免密組件:您需要為恢復集群重新授權并配置acr-configuration。
ALB Ingress組件:您需要預先配置ALBConfig等。
注冊集群和ACK集群均已開啟集群備份。具體操作,請參見安裝備份服務組件并配置權限。
對已通過CEN、高速通道、專線、VPN等方式與云上VPC互通的注冊集群,已配置指向OSS內網網段的路由。更多信息,請參見OSS內網域名與VIP網段對照表。
已開通云備份(Cloud Backup)服務。具體操作,請參見云備份(Cloud Backup)。
適用場景
云備份容災:備份容災遷移一體化,實現快速應用上云與數據災備。
注意事項
備份線下集群數據時,需要通過PV和PVC的方式掛載本地卷。阿里云CSI插件支持注冊集群的掛載功能。更多信息,請參見本地存儲卷概述。
注冊集群、線上ACK集群和OSS Bucket需要在同一地域內。
準備工作
本文以MySQL應用為例,在線下集群中部署應用后進行備份,然后在線上ACK集群中進行恢復。應用遷移前,請確認注冊集群和ACK集群在同一地域內,且均已開啟集群備份,并滿足如下條件。
注冊集群:確認已創建RAM用戶并配置OSS與云備份權限,并使用RAM用戶的AccessKey ID和AccessKey Secret在注冊集群的csdr命名空間中創建alibaba-addon-secret的Secret資源。
執行以下命令,確認alibaba-addon-secret已存在。
kubectl get secret alibaba-addon-secret -n csdr
預期輸出:
alibaba-addon-secret Opaque 2 5d22h
線上ACK集群:
若使用ACK托管版集群,請確認已開通云備份服務,且已創建cnfs-oss-****名稱的Bucket。
若使用ACK專有版集群,請確認已為Worker RAM角色配置OSS與云備份權限。具體操作,請參見為專有版集群配置OSS權限和為專有版集群或注冊集群的用戶配置云備份權限。
操作視頻
步驟一:在線下集群中部署應用
執行以下命令,創建命名空間test1。
kubectl create namespace test1
使用以下內容,創建app-mysql.yaml文件。
替換如下
<your-hostname>
為您待備份的節點名稱,替換如下username
和password
為您實際備份應用的用戶名和密碼。apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-sts namespace: test1 spec: selector: matchLabels: app: mysql-sts serviceName: mysql-sts template: metadata: labels: app: mysql-sts spec: containers: - name: mysql-sts image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 80 name: mysql-sts volumeMounts: - name: mysql mountPath: /var/lib/mysql volumes: - name: mysql persistentVolumeClaim: claimName: example-pvc --- apiVersion: v1 kind: PersistentVolume metadata: name: example-pv spec: capacity: storage: 100Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage local: path: /mnt/disk nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <your-hostname> # 待備份的節點名稱。 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc namespace: test1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi storageClassName: local-storage volumeName: example-pv --- apiVersion: v1 kind: Secret metadata: name: mysql-pass namespace: test1 type: Opaque data: username: dGVz**** # 待備份MySQL應用的用戶名,需替換為您實際備份應用的用戶名。 password: dGVzdDEt**** # 待備份MySQL應用的用戶密碼,需替換為您實際備份應用的用戶密碼。
執行以下命令,部署MySQL應用,并將本地盤掛載為PV,配置相關PV與PVC。
kubectl create -f app-mysql.yaml
預期輸出:
statefulset.apps/mysql-sts created persistentvolume/example-pv created persistentvolumeclaim/example-pvc created secret/mysql-pass created
執行以下命令,確認MySQL應用部署成功。
kubectl get pod -n test1 | grep mysql-sts
預期輸出:
mysql-sts-0 1/1 Running 1 (4m51s ago) 4m58s
步驟二:在線下集群中備份MySQL應用及數據
由于注冊集群已接入線下集群,可在注冊集群中進行備份任務操作,具體步驟如下:
在注冊集群中創建備份倉庫。具體操作,請參見創建備份倉庫。
在注冊集群中創建名為MySQL的立即備份。具體操作,請參見創建備份計劃或立即備份。
輸入立即備份的名稱為MySQL,選擇備份倉庫為您上一步創建的備份倉庫,選擇備份命名空間為test1。
在應用備份頁面,單擊備份記錄頁簽,查看MySQL任務狀態由InProgress變為Completed,表示MySQL應用及數據備份完成。
步驟三:在線上ACK集群中恢復應用
本文以將線下集群的存儲轉化為alibabacloud-cnfs-nas存儲類為例,說明如何在線上ACK集群中恢復MySQL應用。具體步驟如下:
創建恢復任務mysql-restore,將MySQL應用部署在線上ACK集群的test2命名空間中,并轉換至存儲類alibabacloud-cnfs-nas。具體操作,請參見恢復應用和數據卷。
配置項
示例
名稱
mysql-restore。
備份倉庫
選擇備份倉庫為您之前創建的備份倉庫。若提示初始化倉庫,請單擊并等待備份記錄同步至該集群。
選擇備份
MySQL。
重定義命名空間
由test1變為test2。
存儲類轉換
在轉換的PVC列表中為example-pvc選擇存儲類alibabacloud-cnfs-nas。
單擊立即恢復右側的查看恢復記錄,查看mysql-restore任務狀態由InProgress變為Completed,表示MySQL應用及數據恢復完成。
在ACK集群中執行以下命令,確認MySQL應用部署成功。
kubectl get pod -n test2 | grep mysql-sts
預期輸出:
mysql-sts-0 1/1 Running 0 4s
在ACK集群中執行以下命令,確認數據已恢復正常。
執行以下命令,確認數據已恢復為alibaba-cnfs-nas存儲類。
kubectl get pvc -n test2 | grep example-pvc
預期輸出:
example-pvc Bound nas-acde4acd-59b6-4332-90af-b74ef6****** 25Gi RWO alibabacloud-cnfs-nas 31m
執行以下命令,確認example-pvc已掛載到MySQL應用中。
kubectl describe pvc example-pvc -n test2 | grep "Used By"
預期輸出:
Used By: mysql-sts-0