华为云:基于Velero备份恢复的容器迁移实验

开发者云实验云实验KooLabs在线实验上云实践云计算实验AI实验华为云官方实验平台-华为云 (huaweicloud.com)

1 源端集群环境搭建1.1 源端 CCE 集群购买
3. 进入CCE购买界面,按照如图所示参数进行 CCE 的配置:
计费模式:按需计费
区域:华北-北京四
集群名称:cce-source
版本:v1.27
集群规模:50
节点高可用:否
网络模型:VPC网络
虚拟私有云:vpc-cce
所在子网:subnet-cce
容器网段:自动设置网段除 coredns 及 everest 插件外,本实验暂不配置其他插件。
1.2 源端 CCE 集群节点创建1. 待集群创建完成后,点击进入cce-source 集群。找到左侧目录中的“节点管理”,进入其“节点”页签,并点击右上角的“创建节点”,创建集群节点。
节点参数如下:
计费模式:按需计费
节点规格:通用型 | s6.xlarge.2 | 4核 | 8GB
容器引擎:Containerd
操作系统:公共镜像 EulerOS 2.9
节点名称:cce-source-node登录方式:密码,并自行设置复杂密码
存储配置:系统盘(高IO,50 GiB)| 数据盘(高IO,200 GiB)
弹性公网IP:全动态BGP | 按流量计费 | 5 Mbit/s参数配置完成后,点击“提交”,等待节点创建完成。

1.3 安装Velero插件
1. 在控制台找到“对象存储服务OBS”并进入,在对象存储服务的桶列表页面,点击右上角“创建桶”
设置桶参数如下:桶名称:自行命名,本例使用velero-cce-test数据冗余存储策略:单AZ存储默认存储类别:标准存储桶策略:私有设置完成后点击右下角“立即创建”。

  1. 进入云服务器控制台,按照以下配置购买一个 ECS。

  2. 进入先前创建的 cce-source 集群的概览页面,下拉找到“连接信息”页签,点击 kubectl 边上的“配置”,并在弹出窗口中选择“JSON” > “下载”,下载 kubectl 配置文件(文件名:cce-source-kubeconfig.json)

  3. 打开实验桌面的 Xfce 终端,执行以下命令,登录 ECS。

  4. 执行以下命令,安装 kubectl。

cd /home
wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com/20220317/kubectl
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version

返回如下图所示结果,表示已安装成功。

  1. 执行以下命令,新建 .kube 目录和 config 文件,并复制步骤5中下载的 kubeconfig.json 文件内所有的内容到 config 文件,然后保存退出。
cd /home
mkdir -p $HOME/.kube
vim $HOME/.kube/config
  1. 执行以下命令,配置 Kubernetes 使用 VPC 内网接入。
kubectl config use-context internal

若看到以下回显则说明配置成功

  1. 查看 Kubernetes 集群信息。
kubectl cluster-info

返回结果如下图所示:

10. 安装 velero
1)在 ecs-kubectl 中执行以下命令,下载Velero 1.7.0版本的二进制文件。

wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com/20220317/velerco-v170.tar.gz

2)安装Velero客户端。

tar -xvf velerco-v170.tar.gz
cp ./velero-v1.7.0-linux-amd64/velero /usr/local/bin
  1. 获取访问密钥。
    1)鼠标移动到华为云控制台右上角的登录账号,点击“我的凭证”。
    2)在我的凭证页面中,点击左侧“访问密钥”,并点击“新增访问密钥”。
    3)在弹出的窗口中完成秘钥创建,并下载秘钥文件至本地。

  2. 执行以下命令,/home下创建备份对象存储访问秘钥文件 credentials-velero。

vim credentials-velero
  1. 执行以下命令,部署 Velero 服务端。注意:其中 –bucket 参数需要修改为已创建的对象存储桶名称
velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.2.1 \
  --bucket obs名字 \
  --secret-file ./credentials-velero \
  --use-restic \
  --use-volume-snapshots=false \
  --backup-location-config region=cn-north-4,s3ForcePathStyle="true",s3Url=http://obs.cn-north-4.myhuaweicloud.com

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

kubectl get pod -n velero

执行以下命令,查看 Velero 工具与对象存储的对接情况,状态需要为available。

velero backup-location get

1.4 部署MySQL服务
1. 在CCE集群控制台,选择左侧菜单栏“工作负载” > “有状态负载”,单击右上角“创建工作负载”。
创建MySQL服务,填写工作负载参数如下:
负载类型:有状态负载
负载名称:mysql命名空间:default
实例数量:1
容器配置的基本信息参数如下:
镜像名称:mysql
镜像版本:5.7
点击“环境变量”,并设置2个环境变量参数:
MYSQL_ROOT_PASSWORD:MySQL的root用户密码设置为“password@123”。
MYSQL_DATABASE:镜像启动时要创建的数据库名称设置为“wordpress”。配置完成后如下图所示:
在实例间发现服务配置中,填写Service名称为headless-mysql,端口名称为mysql,并设置服务端口及容器端口为3306。
这样在集群内部,通过Service名称:访问端口就可以访问MySQL负载,也就是headless-mysql:3306。单击右下角“创建工作负载”,等待负载创建完成。

1.5 部署 WordPress 服务
1、接下来创建WordPress工作负载,在集群控制台的工作负载页面,点击右上角的“创建工作负载”,工作负载基本信息如下:
负载类型:无状态负载
负载名称:wordpress
命名空间:default
实例数量:1
在容器配置中选择镜像中心中的wordpress镜像,容器配置的基本信息参数如下:
镜像名称:wordpress
镜像版本:php7.3
在环境变量页面设置4个环境变量参数,让WordPress知道MySQL数据库的信息,根据前面mysql负载的配置:
WORDPRESS_DB_HOST:headless-mysql:3306
WORDPRESS_DB_USER:root
WORDPRESS_DB_PASSWORD:password@123
WORDPRESS_DB_NAME:wordpress
在服务配置处点击“+”号,添加服务。
在创建服务页面设置服务参数如下:访问类型:负载均衡LoadBalancer负载均衡器:共享型 | 自动创建 | 实例名称:elb-cce | 公网访问端口配置:服务端口8000(该端口号将映射到容器端口),容器端口80(容器中应用启动监听的端口)
点击右下角“确定”后,点击右下角“创建工作负载”,等待wordpress状态变为“运行中”。

1.6 创建 PV 及 PVC 。1. 创建 SFS Turbo 文件系统。
1)在控制台服务列表,找到存储类服务中的“弹性文件服务SFS”并点击进入该服务控制台。
2)在 SFS Turbo 页面,点击右上角“创建文件系统”。

  1. 创建 PV 及 PVC 。1)在 cce-source 集群控制台,点击左侧菜单的“存储”页面,在“存储卷声明”页签,点击右上角“创建存储卷声明PVC”。


1.7 进行数据持久化挂载
1. 进入 cce-source 集群的工作负载页面,并点击先前创建的有状态工作负载mysql。


在生命周期页签,填写以下运行命令:

/bin/bash

并填写以下运行参数

-c
rm -rf  /var/lib/mysql/lost+found;docker-entrypoint.sh mysqld;


在数据存储页面的下拉菜单,选择“已有存储卷生命(PVC)”。

请保证选择的存储卷声明(PVC)为先前创建的 pvc-souece。在挂载路径处填写“/var/lib/mysql”,表示挂载到容器的以上路径下,并点击右下角“升级工作负载”。

确认YAML文件后,点击“提交”,并等待mysql工作负载恢复至运行中。

1.8 访问 WordPress 网站
1. 点击进入 wordpress 无状态工作负载详情页,在访问方式页签,复制对应的负载均衡公网IP地址。

2 备份源端资源
1. 登录 ECS,执行以下命令,对源端 CCE 集群内 default 命名空间下的容器进行备份。

velero backup create backup-source --include-namespaces default

  1. 执行以下命令,查看备份情况。
velero backup get


进入您创建的OBS桶,查看备份对象数据。

3 目标端恢复集群资源并验证迁移结果
4.1 创建目标端CCE集群
4.2 安装Velero插件
1. 同步骤1.4,进入 cce-target 详情页面,点击连接管理中,kubectl后的“配置”,并在弹出窗口中选择“JSON” > “下载”,下载 kubectl 配置文件

  1. 登录 ecs-kubectl,将原来的 config 文件重命名,并新建 config 文件,然后将上一步下载的目标端的 kubeconfig.json 文件内容粘贴到新建的 config 文件中。
cd $HOME/.kube
mv config config.source
vim config

将新下载的 kubeconfig.json 文件内容粘贴进来。
3. 执行以下命令,修改 CCE 链接模式为 VPC 内网链接。

kubectl config use-context internal
  1. 执行以下命令,查看 CCE 集群信息。
kubectl cluster-info

  1. 在目标端 CCE 集群上部署 Velero 服务端。注意其中 –bucket 参数需要修改为已创建的对象存储桶名称,本例中为velero-cce-test;需要回到credentials-velero文件所在路径。
velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.2.1 \
  --bucket velero-cce-test \
  --secret-file ./credentials-velero \
  --use-restic \
  --restore-only \
  --use-volume-snapshots=false \
  --backup-location-config region=cn-north-4,s3ForcePathStyle="true",s3Url=http://obs.cn-north-4.myhuaweicloud.com
  1. Velero 实例将默认创建一个名为 velero 的namespace,执行以下命令可查看 pod 状态。
kubectl get pod -n velero
  1. 查看 Velero 工具与对象存储的对接情况,状态需要为 available。
velero backup-location get
  1. 在 ecs-kubectl 中执行以下命令,使用 Velero 工具恢复原集群中的备份。
velero restore create --from-backup backup-source

4 验证迁移结果
1. 在CCE控制台验证迁移结果,可观察到负载创建成功。