更新时间:2024-05-10 GMT+08:00

迁移工具安装

Velero是开源的 Kubernetes 集群备份、迁移工具,集成了Restic工具对PV数据的备份能力,可以通过Velero工具将原集群中的K8s资源对象(如Deployment、Job、Service、ConfigMap等)和Pod挂载的持久卷数据保存备份上传至对象存储。在发生灾难或需要迁移时,目标集群可使用Velero从对象存储中拉取对应的备份,按需进行集群资源的还原。

根据迁移方案所述,在迁移开始前需准备临时的对象存储用于存放资源的备份文件,Velero支持使用OBS或者MinIO对象存储。对象存储需要准备足够的存储空间用于存放备份文件,请根据您的集群规模和数据量自行估算存储空间。建议您使用OBS进行备份存储,可直接参考安装Velero进行Velero的部署。

前提条件

  • 原始自建集群Kubernetes版本需1.10及以上,且集群可正常使用DNS与互联网服务。
  • 若您使用OBS存放备份文件,需已有OBS操作权限用户的AK/SK,请参考获取访问密钥(AK/SK)
  • 若您使用MinIO存放备份文件,则安装MinIO的服务器需要绑定EIP并在安全组中开放MinIO的API端口和Console端口。
  • 已创建迁移的目标CCE集群。
  • 原集群和目标集群中需要至少各拥有一个空闲节点,节点规格建议为4U8G及以上。

安装MinIO(可选)

MinIO 是一个兼容S3接口协议的高性能对象存储开源工具。若使用MinIO进行存放集群迁移的备份文件,您需要一台临时服务器用于部署MinIO并对外提供服务。若您使用OBS存放备份文件,请忽略此步骤,前往安装Velero

MinIO的安装位置选择有如下几种:

  • 集群外临时ECS

    将MinIO服务端安装在集群外,能够保障集群发生灾难性故障时,备份文件不会受到影响。

  • 集群内的空闲节点
    您可以远程登录节点安装MinIO服务端,也可以选择容器化安装MinIO,请参考Velero官方文档

    如使用容器化安装MinIO:

    • Velero官方文档提供的YAML文件中存储类型为empty dir,建议将其修改为HostPath或Local类型,否则容器重启后将永久丢失备份文件。
    • 您需将MinIO服务对外提供访问,否则将无法在集群外下载备份文件,可选择将Service修改为NodePort类型或使用其他类型的公网访问服务。

无论使用何种方法进行部署,安装MinIO的服务器需要有足够的存储空间,且均需要绑定EIP在安全组中开放MinIO的服务端口,否则将无法上传(下载)备份文件。

本示例选择在一台集群外的临时ECS上安装MinIO,步骤如下。

  1. 下载MinIO对象存储。

    mkdir /opt/minio
    mkdir /opt/miniodata
    cd /opt/minio
    wget https://dl.minio.io/server/minio/release/linux-amd64/minio
    chmod +x minio

  2. 设置MinIO的用户名及密码。

    此方法设置的用户名及密码为临时环境变量,在服务重启后需要重新设定,否则会使用默认root凭据minioadmin:minioadmin来创建服务。
    export MINIO_ROOT_USER=minio
    export MINIO_ROOT_PASSWORD=minio123

  3. 创建服务,其中/opt/miniodata/为MinIO 存储数据的本地磁盘路径。

    MinIO的API端口默认为9000,console端口默认为随机生成,您可使用--console-address参数指定console访问端口。
    ./minio server /opt/miniodata/ --console-address ":30840" &

    安装MinIO工具的服务器需开放防火墙、安全组中对应的API和console端口,否则将无法访问对象桶。

  4. 浏览器访问http://{minio所在节点的eip}:30840,可进入MinIO console界面。

安装Velero

首先前往OBS控制台或MinIO console界面,创建存放备份文件的桶并命名为velero。此处桶名称可自定义,但安装Velero时必须指定此桶名称,否则将无法访问导致备份失败,参见5

  • 原集群和目标集群中均需要安装部署Velero实例,安装步骤一致,分别用于备份和恢复。
  • CCE集群的Master节点不对外提供远程登录端口,您可通过kubectl操作集群完成Velero安装。
  • 如果备份资源量较大,请调整Velero及node-agent工具的cpu和内存资源(建议调整至1U1G及以上),请参考备份工具资源分配不足
  • 用于存放备份文件的对象存储桶需要是空桶

从Velero官方发布路径https://github.com/vmware-tanzu/velero/releases下载最新的稳定版二进制文件,本文以Velero 1.13.1版本为例。原集群和目标集群中的安装过程一致,请参考如下步骤。

  1. 登录一台可以访问公网的虚拟机,并使用kubectl连接需要安装Velero的集群。
  2. 下载Velero 1.13.1版本的二进制文件。

    wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.1/velero-v1.13.1-linux-amd64.tar.gz

  3. 安装Velero客户端。

    tar -xvf velero-v1.13.1-linux-amd64.tar.gz
    cp ./velero-v1.13.1-linux-amd64/velero /usr/local/bin

  4. 创建备份对象存储访问密钥文件credentials-velero。

    vim credentials-velero
    文件内容如下,其中的AK/SK请根据实际情况进行替换。使用OBS时,可参考获取访问密钥(AK/SK)获取AK/SK。如使用MinIO,此处AK/SK则为2中所创建的用户名及密码。
    [default]
    aws_access_key_id = {AK}
    aws_secret_access_key = {SK}

  5. 部署Velero服务端。注意其中--bucket参数需要修改为已创建的对象存储桶名称,本例中为velero。关于更多自定义安装参数,请参考自定义安装Velero

    velero install \
      --provider aws \
      --plugins velero/velero-plugin-for-aws:v1.9.1 \
      --bucket velero \
      --secret-file ./credentials-velero \
      --use-node-agent \
      --use-volume-snapshots=false \
      --backup-location-config region=ap-southeast-1,s3ForcePathStyle="true",s3Url=http://obs.ap-southeast-1.myhuaweicloud.com
    表1 Velero安装参数说明

    安装参数

    参数说明

    --provider

    声明使用的插件类型为AWS S3组件。

    --plugins

    使用AWS S3兼容的API组件,本文使用的OBS和MinIO对象存储均支持该S3协议。

    --bucket

    用于存放备份文件的对象存储桶名称,需提前创建。

    --secret-file

    访问对象存储的密钥文件,即4中创建的“credentials-velero”文件。

    --use-node-agent

    PV数据备份,建议开启,否则将无法备份存储卷资源。

    --use-volume-snapshots

    是否创建 VolumeSnapshotLocation 对象进行PV快照,需要提供快照程序支持。该值设为false。

    --backup-location-config

    对象存储桶相关配置,包括region、s3ForcePathStyle、s3Url等。

    region

    对象存储桶所在区域。

    • OBS:请根据实际区域填写,如“ap-southeast-1”。
    • MinIO:参数值为minio。

    s3ForcePathStyle

    参数值为“true”,表示使用S3文件路径格式。

    s3Url

    对象存储桶的API访问地址。

    • OBS:该参数值需根据对象存储桶地域决定,参数值为“http://obs.{region}.myhuaweicloud.com”。例如区域为香港(ap-southeast-1),则参数值为“http://obs.ap-southeast-1.myhuaweicloud.com”
    • MinIO:该参数值需根据MinIO安装节点的IP及暴露端口确定,参数值为“http://{minio所在节点的eip}:9000”
      说明:
      • s3Url中的访问端口需填写MinIO的API端口,而非console端口。MinIO API端口默认为9000。
      • 访问集群外安装的MinIO时,需填写其公网IP地址。

  6. Velero实例将默认创建一个名为velero的namespace,执行以下命令可查看pod状态。

    $ kubectl get pod -n velero
    NAME                   READY   STATUS    RESTARTS   AGE
    node-agent-rn29c       1/1     Running   0          16s
    velero-c9ddd56-tkzpk   1/1     Running   0          16s

    为防止在实际生产环境中备份时出现内存不足的情况,建议您参照备份工具资源分配不足,修改node-agent和Velero分配的CPU和内存大小。

  7. 查看Velero工具与对象存储的对接情况,状态需要为available。

    $ velero backup-location get
    NAME      PROVIDER   BUCKET/PREFIX   PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
    default   aws        velero          Available   2021-10-22 15:21:12 +0800 CST   ReadWrite     true