弹性云服务器创建完成后,登录ECS
1.2 源端CCE集群节点创建 1.3 安装E-Backup插件 单击“cce-source”集群,进入集群控制台,在左边导航栏的“命名空间”当中,创建名为“velero”的命名空间。 在插件管理页面,安装E-Backup插件,配额参数保持默认。 1.4 部署MySQL服务在集群控制台,选择左侧菜单栏“工作负载”,单击右上角“创建负载” 创建MySQL服务,填写工作负载参数如下: 负载类型:有状态负载负载 名称:mysql命名空间: default实例数量:1 容器配置的基本信息参数如下: 镜像名称:mysql 镜像版本:5.7
在环境变量页面设置四个环境变量参数: MYSQL_ROOT_PASSWORD:MySQL的root用户密码“password@123”。 MYSQL_DATABASE:镜像启动时要创建的数据库名称“database”。 MYSQL_USER:数据库用户名称“db_user”。 MYSQL_PASSWORD:数据库用户密码“password@123”。 在创建服务页面设置服务参数如下:Service名称:mysql访问类型:集群内访问ClusterIP端口配置:服务端口3306,容器端口3306(mysql镜像的默认访问端口默认为3306,所以容器端口设置为3306,访问端口可以设置为其他端口号,但这里也设置成3306是为了方便使用)这样在集群内部,通过服务名称:访问端口就可以访问MySQL负载,也就是mysql:3306。
1.5 部署WordPress服务首先,购买访问WordPress所需的弹性负载均衡,进入弹性负载均衡控制台页面,点击右上角“购买弹性负载均衡”,配置弹性负载均衡参数。 首先,购买访问WordPress所需的弹性负载均衡,进入弹性负载均衡控制台页面,点击右上角“购买弹性负载均衡”,配置弹性负载均衡参数。 弹性负载均衡参数配置如下: 实例规格类型: 共享型区域:华北-北京四所属 VPC:vpc-cce子网:subnet-cce 弹性公网IP:新创建 弹性公网IP类型:全动态BGP 公网带宽:按流量计费 带宽:5 名称:elb-cce 接下来创建WordPress工作负载,同样在集群控制台的工作负载页面,点击右上角的“创建负载”,工作负载基本信息如下: 负载类型:无状态负载负载 名称:wordpress 命名空间:default 实例数量:1 容器配置的基本信息参数如下: 镜像名称:wordpress 镜像版本:php7.3 在环境变量页面设置四个环境变量参数,让WordPress知道MySQL数据库的信息,根据前面mysql负载的配置: WORDPRESS_DB_HOST:mysql:3306 WORDPRESS_DB_USER:db_user WORDPRESS_DB_PASSWORD:password@123 WORDPRESS_DB_NAME:database 在创建服务页面设置服务参数如下: 访问类型:负载均衡LoadBalancer 负载均衡器:elb-cce 服务亲和:保持默认 端口配置:服务端口8000(该端口号将映射到容器端口),容器端口80(容器中应用启动监听的端口)点击右下角“确定”。
1.6 创建PV及PVC 首先创建SFS Turbo文件系统,在控制台服务列表找到存储类服务中的“弹性文件服务SFS”并点击。 在SFS Turbo页面,点击右上角“创建文件系统”。 接下来进行PV及PVC的创建,在cce-source集群控制台,点击到“容器存储”页面,点击“存储卷”,点击右上角“创建存储卷”。 在“创建存储卷”页面,选择存储卷类型为“急速文件存储”,急速文件存储中选择步骤五中创建的“sfs-turbo-source”,PV名称命名为“pv-efs-source”,其余参数保持不变,点击右下角“创建”。 存储卷创建完成后,在存储卷声明页面。点击“创建存储卷声明”。 在创建存储卷声明页面,创建方式选择“使用已有存储卷”,PVC名称命名为“pvc-source”,存储卷类型选择“急速文件存储”,关联存储卷选择刚才创建的“pv-efs-source”,点击右下角“创建”。 1.7 进行数据持久化挂载进入工作负载页面,并点击mysql工作负载。 在mysql工作负载中,点击“容器管理”,并点击右下方的“编辑”。 在生命周期页面,填写以下运行命令: /bin/bash 并填写以下运行参数: -c rm -rf /var/lib/mysql/lost+found;docker-entrypoint.sh mysqld; 在数据存储页面,点击“数据卷声明”,并点击下面的“+”号。 选择刚才创建的存储卷声明“pvc-source”,点击“确定”。 在挂载路径处填写“/var/lib/mysql”,表示挂载到容器的以上路径下,点击右下角“升级工作负载”,确认YAML文件后,点击“提交”,并等待mysql工作负载恢复至运行中。
2 迁移准备工作 2.1 创建OBS桶创建备份存储OBS桶,在控制台找到“对象存储服务OBS”并进入,在对象存储服务的桶列表页面,点击右上角“创建桶”。 2.2 创建并下载密钥 右上角华为云用户名处,点击“我的凭证”。
- 下载kubernetes包
wget https://dl.k8s.io/v1.19.10/kubernetes-client-linux-amd64.tar.gz
解压kubectl安装包:
tar -xvf kubernetes-client-linux-amd64.tar.gz
将kubectl拷贝至/home目录下:
cp /root/kubernetes/client/bin/kubectl /home/
进入CCE集群的“集群信息”页,在连接信息模块点击kubectl后的“点击查看”,在弹窗中点击下载kubectl配置文件。
下载完成后,在第一个Xfce终端上将上一步下载的kubectl配置文件kubeconfig.json上传到ecs-test,上传完成后可以看到/home目录下已存在该配置文件。
scp /home/user/Downloads/kubeconfig.json root@EIP:/home
在ecs-test的home目录下可以看到上传的kubeconfig.json文件
cd /home chmod +x kubectl mv -f kubectl /usr/local/bin
将配置文件复制到$HOME/.kube/config文件中。
mkdir $HOME/.kube cp kubeconfig.json $HOME/.kube/config
切换kubectl的访问模式为VPC网络内接入访问。
如有报错请检查/usr/local/bin/kubectl 是否有权限
kubectl config use-context internal
验证kubectl安装结果。
kubectl cluster-info
2.4 密钥转码 切换回root目录下: cd 创建credential-for-huawei-obs文件: vim credential-for-huawei-obs 文件中填写以下内容: HUAWEI_CLOUD_ACCESS_KEY_ID=2.2中下载的密钥文件中的Access Key Id HUAWEI_CLOUD_SECRET_ACCESS_KEY=2.2中下载的密钥文件中的Secret Access Key 输入以下命令,使用base64格式化字符串: base64 -w 0 credential-for-huawei-obs
2.5 创建备份存储库访问密钥 在集群中创建备份存储库访问密钥secret,首先创建secure-opaque-secret.yaml文件。 vim secure-opaque-secret.yaml 文件内容为: apiVersion: v1 data: cloud: #填写2.4中将密钥文件转码后的结果 kind: Secret metadata: labels: backup.everest.io/secret: "true" name: secure-opaque-secret namespace: velero type: cfe/secure-opaque 文件创建完成后,执行以下命令创建secret: kubectl create -f secure-opaque-secret.yaml 返回成功: secret/secure-opaque-secret created 使用以下命令查看secret是否存在: kubectl get secret -n velero 返回成功: NAME TYPE DATA AGE default-secret kubernetes.io/dockerconfigjson 1 20m default-token-rs4r2 kubernetes.io/service-account-token 3 21m paas.elb cfe/secure-opaque 3 20m secure-opaque-secret cfe/secure-opaque 1 27s sh.helm.release.v1.cceaddon-e-backup.v1 helm.sh/release.v1 1 21m velero-token-qj9t4 kubernetes.io/service-account-token 3 21m 注意: • secret所在namespace必须和E-Backup实例所在namespace一致,即velero。 • secret.data中存储的是访问对象存储服务的秘钥,其中key必须为 cloud,而value为上文中通过base64编码得到的字符串。 • secret需要打上标签“secret.everest.io/backup: true”,标识该secret是用于备份存储库的管理的。
2.6 创建备份存储库 创建backup-storage.yaml文件: vim backup-storage.yaml 内容如下: apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: backup-location-001 #备份存储库的名称 namespace: velero #必须和E-Backup处于同一namespace spec: config: endpoint: obs.cn-north-4.myhuaweicloud.com credential: name: secure-opaque-secret #此前创建的secret的名字 key: cloud #secret.data中的key值,不需要改 objectStorage: bucket: cce-backup ##改成对象存储桶名字 provider: huawei #使用华为云OBS服务 其中spec.config.endpoint参数在2.1创建的OBS桶“cce-backup”中的概览页面可以获取到: 文件编辑完成后,输入以下命令进行备份存储库的创建: kubectl create -f backup-storage.yaml 成功返回: backupstoragelocation.velero.io/backup-location-001 created 输入以下命令查看备份存储库的状态: kubectl get backupstoragelocation -n velero 成功返回: NAME PHASE LAST VALIDATED AGE DEFAULT backup-location-001 Available 3s 3s
PHASE为“Available”即表示备份存储库可用
4 目标端恢复集群资源并验证迁移结果 4.1 创建目标端CCE集群 集群名称:cce-target 节点规格:通用型 | s6.xlarge.2 | 4核 | 8GB 4.2 安装E-Backup插件 参考1 源端集群环境搭建中的1.3,创建名为“velero”的命名空间,并安装E-backup插件。 4.3 创建集群存储卷 参考1 源端集群环境搭建中的1.6创建目标端SFS Turbo存储卷并命名为“sfs-turbo-target”,注意文件系统类型和容量与源端存储卷保持一致。 在cce-target集群中创建存储卷,使用急速文件存储“sfs-turbo-target”,并命名为“pv-efs-target”: 4.4 配置目标端集群的kubectl客户端 下载“cce-target”集群的配置文件: 将配置文件重命名为kubeconfignew.json。 将文件上传至“ecs-test”的home目录下: 回到ecs-test远程登录窗口,并在home目录下,执行如下命令,替换配置文件: cd /home cp kubeconfignew.json $HOME/.kube/config 并执行以下命令,切换kubectl的访问模式为VPC网络内接入访问: kubectl config use-context internal 返回成功: Switched to context "internal". 验证集群信息: kubectl cluster-info 返回成功 Kubernetes master is running at https://192.168.0.192:5443 CoreDNS is running at https://192.168.0.192:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
4.5 创建secret和备份存储库 回到/root目录下,参考迁移准备工作当中的2.5和2.6,创建secret和备份存储库,secure-opaque-secret.yaml和backup-storage.yaml文件可以复用,无需更改。 cd kubectl delete -f secure-opaque-secret.yaml kubectl create -f secure-opaque-secret.yaml kubectl delete -f backup-storage.yaml kubectl create -f backup-storage.yaml kubectl get backupstoragelocation backup-location-001 -n velero 返回成功 NAME PHASE LAST VALIDATED AGE DEFAULT backup-location-001 Available 8s 8s
4.6 恢复集群资源并验证迁移结果 创建如下restore.yaml文件: vim restore.yaml 内容 apiVersion: velero.io/v1 kind: Restore metadata: name: restore-backup-001 namespace: velero spec: backupName: backup-001 includedNamespaces: - default
执行以下命令,恢复集群资源: kubectl create -f restore.yaml 执行以下命令,查看恢复情况: kubectl get restores -n velero 若状态为“Completed”,则表示恢复成功。 也可执行命令,查看工作负载恢复情况: kubectl get po -w 返回成功 NAME READY STATUS RESTARTS AGE mysql-0 1/1 Running 0 94s restore-backup-001-z2cn2-worker-vm2cj 0/1 Error 0 6m15s word-779bb7f7f6-6mdlj 1/1 Running 0 94s