全部產品
Search
文件中心

Container Service for Kubernetes:自建Kubernetes叢集應用遷移至線上ACK叢集

更新時間:Jun 19, 2024

您可以通過備份中心對註冊叢集中部署的應用及資料進行備份,並線上上ACK叢集中恢複,實現線下應用到線上的快速遷移。本文介紹如何使用備份中心將已接入註冊叢集的線下叢集的應用遷移至線上ACK叢集。

前提條件

  • 已建立註冊叢集,並將自建Kubernetes叢集(大於1.16版本)接入註冊叢集。具體操作,請參見建立註冊叢集並接入本機資料中心叢集

  • 已建立和註冊叢集在同一地區的用於恢複應用的ACK叢集,建議恢複叢集為1.18及以上版本。具體操作,請參見建立Kubernetes託管版叢集建立Kubernetes專有版叢集

    重要
    • 恢複叢集必須使用CSI儲存外掛程式,使用Flexvolume儲存外掛程式或通過csi-compatible-controller組件同時使用CSI Flexvolume儲存外掛程式的叢集不支援恢複。

    • 備份中心關注業務應用的備份和恢複。在恢複任務之前,您需要在恢複叢集中預先安裝並配置好所需的系統組件。例如:

      • ACR免密組件:您需要為恢複叢集重新授權並配置acr-configuration。

      • ALB Ingress組件:您需要預先配置ALBConfig等。

  • 註冊叢集和ACK叢集均已開啟叢集備份。具體操作,請參見安裝備份服務元件並配置許可權

  • 對已通過CEN、Express Connect、專線、VPN等方式與雲上VPC互連的註冊叢集,已配置指向OSS內網網段的路由。更多資訊,請參見OSS內網網域名稱與VIP網段對照表

  • 已開通Cloud Backup服務。具體操作,請參見Cloud Backup

適用情境

Cloud Backup容災:備份容災遷移一體化,實現快速應用上雲與資料災備。

注意事項

  • 備份線下叢集資料時,需要通過PV和PVC的方式掛載本地卷。阿里雲CSI外掛程式支援註冊叢集的掛載功能。更多資訊,請參見本機存放區卷概述

  • 註冊叢集、線上ACK叢集和OSS Bucket需要在同一地區內。

準備工作

本文以MySQL應用為例,線上下叢集中部署應用後進行備份,然後線上上ACK叢集中進行恢複。應用遷移前,請確認註冊叢集和ACK叢集在同一地區內,且均已開啟叢集備份,並滿足如下條件。

  • 註冊叢集:確認已建立RAM使用者並配置OSS與Cloud Backup許可權,並使用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叢集:

步驟一:線上下叢集中部署應用

  1. 執行以下命令,建立命名空間test1

    kubectl create namespace test1
  2. 使用以下內容,建立app-mysql.yaml檔案。

    替換如下<your-hostname>為您待備份的節點名稱,替換如下usernamepassword為您實際備份應用的使用者名稱和密碼。

    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應用的使用者密碼,需替換為您實際備份應用的使用者密碼。
  3. 執行以下命令,部署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
  4. 執行以下命令,確認MySQL應用部署成功。

    kubectl get pod -n test1 | grep mysql-sts

    預期輸出:

    mysql-sts-0   1/1     Running   1 (4m51s ago)   4m58s

步驟二:線上下叢集中備份MySQL應用及資料

由於註冊叢集已接入線下叢集,可在註冊叢集中進行備份任務操作,具體步驟如下:

  1. 在註冊叢集中建立備份倉庫。具體操作,請參見建立備份倉庫

  2. 在註冊叢集中建立名為MySQL的立即備份。具體操作,請參見建立備份計劃或立即備份

    輸入立即備份的名稱MySQL,選擇備份倉庫為您上一步建立的備份倉庫,選擇備份命名空間test1

  3. 應用備份頁面,單擊備份記錄頁簽,查看MySQL任務狀態由InProgress變為Completed,表示MySQL應用及資料備份完成。

步驟三:線上上ACK叢集中恢複應用

本文以將線下叢集的儲存轉化為alibabacloud-cnfs-nas儲存類為例,說明如何線上上ACK叢集中恢複MySQL應用。具體步驟如下:

  1. 建立恢複任務mysql-restore,將MySQL應用部署線上上ACK叢集的test2命名空間中,並轉換至儲存類alibabacloud-cnfs-nas。具體操作,請參見恢複應用和資料卷

    配置項

    樣本

    名稱

    mysql-restore。

    備份倉庫

    選擇備份倉庫為您之前建立的備份倉庫。若提示初始化倉庫,請單擊並等待備份記錄同步至該叢集。

    選擇備份

    MySQL。

    重定義命名空間

    test1變為test2

    儲存類轉換

    在轉換的PVC列表中為example-pvc選擇儲存類alibabacloud-cnfs-nas。

  2. 單擊立即恢複右側的查看恢複記錄,查看mysql-restore任務狀態由InProgress變為Completed,表示MySQL應用及資料恢複完成。

  3. 在ACK叢集中執行以下命令,確認MySQL應用部署成功。

    kubectl get pod -n test2 | grep mysql-sts

    預期輸出:

    mysql-sts-0   1/1     Running   0          4s
  4. 在ACK叢集中執行以下命令,確認資料已恢複正常。

    1. 執行以下命令,確認資料已恢複為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
    2. 執行以下命令,確認example-pvc已掛載到MySQL應用中。

      kubectl describe pvc example-pvc -n test2 | grep "Used By"

      預期輸出:

      Used By:       mysql-sts-0