自建Kubernetes集群應(yīng)用遷移至線上ACK集群
您可以通過(guò)備份中心對(duì)注冊(cè)集群中部署的應(yīng)用及數(shù)據(jù)進(jìn)行備份,并在線上ACK集群中恢復(fù),實(shí)現(xiàn)線下應(yīng)用到線上的快速遷移。本文介紹如何使用備份中心將已接入注冊(cè)集群的線下集群的應(yīng)用遷移至線上ACK集群。
前提條件
已創(chuàng)建注冊(cè)集群,并將自建Kubernetes集群(大于1.16版本)接入注冊(cè)集群。具體操作,請(qǐng)參見(jiàn)創(chuàng)建注冊(cè)集群并接入本地?cái)?shù)據(jù)中心集群。
已創(chuàng)建和注冊(cè)集群在同一地域的用于恢復(fù)應(yīng)用的ACK集群,建議恢復(fù)集群為1.18及以上版本。具體操作,請(qǐng)參見(jiàn)創(chuàng)建ACK托管集群和創(chuàng)建。
重要恢復(fù)集群必須使用CSI存儲(chǔ)插件,使用Flexvolume存儲(chǔ)插件或通過(guò)csi-compatible-controller組件同時(shí)使用CSI Flexvolume存儲(chǔ)插件的集群不支持恢復(fù)。
備份中心關(guān)注業(yè)務(wù)應(yīng)用的備份和恢復(fù)。在恢復(fù)任務(wù)之前,您需要在恢復(fù)集群中預(yù)先安裝并配置好所需的系統(tǒng)組件。例如:
ACR免密組件:您需要為恢復(fù)集群重新授權(quán)并配置acr-configuration。
ALB Ingress組件:您需要預(yù)先配置ALBConfig等。
注冊(cè)集群和ACK集群均已開(kāi)啟集群備份。具體操作,請(qǐng)參見(jiàn)安裝備份服務(wù)組件并配置權(quán)限。
對(duì)已通過(guò)CEN、高速通道、專(zhuān)線、VPN等方式與云上VPC互通的注冊(cè)集群,已配置指向OSS內(nèi)網(wǎng)網(wǎng)段的路由。更多信息,請(qǐng)參見(jiàn)OSS內(nèi)網(wǎng)域名與VIP網(wǎng)段對(duì)照表。
已開(kāi)通云備份(Cloud Backup)服務(wù)。具體操作,請(qǐng)參見(jiàn)云備份(Cloud Backup)。
適用場(chǎng)景
云備份容災(zāi):備份容災(zāi)遷移一體化,實(shí)現(xiàn)快速應(yīng)用上云與數(shù)據(jù)災(zāi)備。
注意事項(xiàng)
備份線下集群數(shù)據(jù)時(shí),需要通過(guò)PV和PVC的方式掛載本地卷。阿里云CSI插件支持注冊(cè)集群的掛載功能。更多信息,請(qǐng)參見(jiàn)本地存儲(chǔ)卷概述。
注冊(cè)集群、線上ACK集群和OSS Bucket需要在同一地域內(nèi)。
準(zhǔn)備工作
本文以MySQL應(yīng)用為例,在線下集群中部署應(yīng)用后進(jìn)行備份,然后在線上ACK集群中進(jìn)行恢復(fù)。應(yīng)用遷移前,請(qǐng)確認(rèn)注冊(cè)集群和ACK集群在同一地域內(nèi),且均已開(kāi)啟集群備份,并滿(mǎn)足如下條件。
注冊(cè)集群:確認(rèn)已創(chuàng)建RAM用戶(hù)并配置OSS與云備份權(quán)限,并使用RAM用戶(hù)的AccessKey ID和AccessKey Secret在注冊(cè)集群的csdr命名空間中創(chuàng)建alibaba-addon-secret的Secret資源。
執(zhí)行以下命令,確認(rèn)alibaba-addon-secret已存在。
kubectl get secret alibaba-addon-secret -n csdr
預(yù)期輸出:
alibaba-addon-secret Opaque 2 5d22h
線上ACK集群:
若使用ACK托管版集群,請(qǐng)確認(rèn)已開(kāi)通云備份服務(wù),且已創(chuàng)建cnfs-oss-****名稱(chēng)的Bucket。
若使用ACK專(zhuān)有版集群,請(qǐng)確認(rèn)已為Worker RAM角色配置OSS與云備份權(quán)限。具體操作,請(qǐng)參見(jiàn)為專(zhuān)有版集群配置OSS權(quán)限和為專(zhuān)有版集群或注冊(cè)集群的用戶(hù)配置云備份權(quán)限。
操作視頻
步驟一:在線下集群中部署應(yīng)用
執(zhí)行以下命令,創(chuàng)建命名空間test1。
kubectl create namespace test1
使用以下內(nèi)容,創(chuàng)建app-mysql.yaml文件。
替換如下
<your-hostname>
為您待備份的節(jié)點(diǎn)名稱(chēng),替換如下username
和password
為您實(shí)際備份應(yīng)用的用戶(hù)名和密碼。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> # 待備份的節(jié)點(diǎn)名稱(chēng)。 --- 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應(yīng)用的用戶(hù)名,需替換為您實(shí)際備份應(yīng)用的用戶(hù)名。 password: dGVzdDEt**** # 待備份MySQL應(yīng)用的用戶(hù)密碼,需替換為您實(shí)際備份應(yīng)用的用戶(hù)密碼。
執(zhí)行以下命令,部署MySQL應(yīng)用,并將本地盤(pán)掛載為PV,配置相關(guān)PV與PVC。
kubectl create -f app-mysql.yaml
預(yù)期輸出:
statefulset.apps/mysql-sts created persistentvolume/example-pv created persistentvolumeclaim/example-pvc created secret/mysql-pass created
執(zhí)行以下命令,確認(rèn)MySQL應(yīng)用部署成功。
kubectl get pod -n test1 | grep mysql-sts
預(yù)期輸出:
mysql-sts-0 1/1 Running 1 (4m51s ago) 4m58s
步驟二:在線下集群中備份MySQL應(yīng)用及數(shù)據(jù)
由于注冊(cè)集群已接入線下集群,可在注冊(cè)集群中進(jìn)行備份任務(wù)操作,具體步驟如下:
在注冊(cè)集群中創(chuàng)建備份倉(cāng)庫(kù)。具體操作,請(qǐng)參見(jiàn)創(chuàng)建備份倉(cāng)庫(kù)。
在注冊(cè)集群中創(chuàng)建名為MySQL的立即備份。具體操作,請(qǐng)參見(jiàn)創(chuàng)建備份計(jì)劃或立即備份。
輸入立即備份的名稱(chēng)為MySQL,選擇備份倉(cāng)庫(kù)為您上一步創(chuàng)建的備份倉(cāng)庫(kù),選擇備份命名空間為test1。
在應(yīng)用備份頁(yè)面,單擊備份記錄頁(yè)簽,查看MySQL任務(wù)狀態(tài)由InProgress變?yōu)?b data-tag="uicontrol" id="uicontrol-t3t-sla-3gq" class="uicontrol">Completed,表示MySQL應(yīng)用及數(shù)據(jù)備份完成。
步驟三:在線上ACK集群中恢復(fù)應(yīng)用
本文以將線下集群的存儲(chǔ)轉(zhuǎn)化為alibabacloud-cnfs-nas存儲(chǔ)類(lèi)為例,說(shuō)明如何在線上ACK集群中恢復(fù)MySQL應(yīng)用。具體步驟如下:
創(chuàng)建恢復(fù)任務(wù)mysql-restore,將MySQL應(yīng)用部署在線上ACK集群的test2命名空間中,并轉(zhuǎn)換至存儲(chǔ)類(lèi)alibabacloud-cnfs-nas。具體操作,請(qǐng)參見(jiàn)恢復(fù)應(yīng)用和數(shù)據(jù)卷。
配置項(xiàng)
示例
名稱(chēng)
mysql-restore。
備份倉(cāng)庫(kù)
選擇備份倉(cāng)庫(kù)為您之前創(chuàng)建的備份倉(cāng)庫(kù)。若提示初始化倉(cāng)庫(kù),請(qǐng)單擊并等待備份記錄同步至該集群。
選擇備份
MySQL。
重定義命名空間
由test1變?yōu)?b data-tag="uicontrol" id="621b3e20591ch" class="uicontrol">test2。
存儲(chǔ)類(lèi)轉(zhuǎn)換
在轉(zhuǎn)換的PVC列表中為example-pvc選擇存儲(chǔ)類(lèi)alibabacloud-cnfs-nas。
單擊立即恢復(fù)右側(cè)的查看恢復(fù)記錄,查看mysql-restore任務(wù)狀態(tài)由InProgress變?yōu)?b data-tag="uicontrol" id="uicontrol-f3r-rgi-d49" class="uicontrol">Completed,表示MySQL應(yīng)用及數(shù)據(jù)恢復(fù)完成。
在ACK集群中執(zhí)行以下命令,確認(rèn)MySQL應(yīng)用部署成功。
kubectl get pod -n test2 | grep mysql-sts
預(yù)期輸出:
mysql-sts-0 1/1 Running 0 4s
在ACK集群中執(zhí)行以下命令,確認(rèn)數(shù)據(jù)已恢復(fù)正常。
執(zhí)行以下命令,確認(rèn)數(shù)據(jù)已恢復(fù)為alibaba-cnfs-nas存儲(chǔ)類(lèi)。
kubectl get pvc -n test2 | grep example-pvc
預(yù)期輸出:
example-pvc Bound nas-acde4acd-59b6-4332-90af-b74ef6****** 25Gi RWO alibabacloud-cnfs-nas 31m
執(zhí)行以下命令,確認(rèn)example-pvc已掛載到MySQL應(yīng)用中。
kubectl describe pvc example-pvc -n test2 | grep "Used By"
預(yù)期輸出:
Used By: mysql-sts-0