首页 容器服务 Kubernetes 版 ACK 分布式云容器平台 操作指南 备份中心 自建Kubernetes集群应用迁移至线上ACK集群

自建Kubernetes集群应用迁移至线上ACK集群

更新时间: 2023-09-22 17:34:21

您可以通过备份中心对注册集群中部署的应用及数据进行备份,并在线上ACK集群中恢复,实现线下应用到线上的快速迁移。本文介绍如何使用备份中心将已接入注册集群的线下集群的应用迁移至线上ACK集群。

前提条件

适用场景

混合云备份容灾:备份容灾迁移一体化,实现快速应用上云与数据灾备。

注意事项

  • 备份线下集群数据时,需要通过PV和PVC的方式挂载本地卷。阿里云CSI插件支持注册集群的挂载功能。更多信息,请参见本地存储卷概述

  • 注册集群、线上ACK集群和OSS Bucket需要在同一地域内。

准备工作

本文以MySQL应用为例,在线下集群中部署应用后进行备份,然后在线上ACK集群中进行恢复。应用迁移前,请确认注册集群和ACK集群在同一地域内,且均已开启集群备份,并满足如下条件。

  • 注册集群:确认已创建RAM用户并配置OSS与HBR权限,并使用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

    备份和快照页签下,查看MySQL任务状态由InProgress变为Completed,表示MySQL应用及数据备份完成。

步骤三:在线上ACK集群中恢复应用

本文以alibabacloud-cnfs-nas存储类为例,说明如何在线上ACK集群中恢复MySQL应用。具体步骤如下:

  1. 在线上ACK集群中为MySQL备份任务制作快照。具体操作,请参见为文件系统类型的数据卷制作快照

    备份和快照页签下,查看MySQL备份状态由Completed变为ConvertionCompleted,表示快照制作完成。

  2. 创建恢复任务mysql-restore,将MySQL应用部署在线上ACK集群的test2命名空间中。具体操作,请参见恢复应用和数据卷

    输入恢复任务的名称mysql-restore,选择备份仓库为您之前创建的备份仓库,选择备份MySQL重定义命名空间test1变为test2

    恢复页签下,查看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
阿里云首页 容器服务 Kubernetes 版 ACK 相关技术圈