- SAP 监控
- CDN下载加速
- 全球数据传输加速
- 高可用网站架构云化
- 核心数据库上云
- 应用容器化上云
- Linux服务器迁移上云
- 域名转入华为云解析
- 第三方云集群迁移至华为云CCE
- 使用自定义域名托管静态网站
- 通过VPN构建跨境网络
- 云上敏捷开发DevOps实践
- 基于Discuz快速搭建论坛
- 基于Tomcat快速构建Java web环境
- 基于WordPress搭建个人网站
- 快速构建FTP站点
- 快速构建高可用四层负载均衡
- 无服务器告警推送
- 基于Jenkins快速部署源码编译环境
- 快速部署高可用MongoDB
- 基于开源Odoo快速部署ERP系统
- 快速部署高可用七层负载均衡
- SAP Backint安装指南
- 华为云SAP on DB2安装
- 华为云基于SIOS的SAP高可用配置
- 快速部署战斧跨境电商管理系统
- 基于MetaTown构建数字资产平台
- 数字资产秒杀场景解决方案
- 基于开源wangmarketCMS快速建站
- 快速部署高可用MHA-MySQL集群
- 快速部署高可用的RabbitMQ集群
- 数据库上云
- 语音识别解决方案
- 游戏批量开服数据库解决方案
- 基于Zpan快速构建私有网盘
- 等保三级解决方案
- 基于迅响快速构建响应式网站
- 快速部署高可用Redis集群
- 快速部署赛瀚德MES系统
- 基于Ploto构建自动驾驶平台
- 无服务器日志实时分析
- 快速创建云数据库RDS 克隆实例
- 无服务器图片生成缩略图
- 快速构建Node.js运行环境
- 快速部署高可用Docker Swarm集群
- 云和恩墨数据库统一管理平台
- 基于万户快速建站
- 防勒索病毒安全解决方案
- 基于SNAT公网访问解决方案
- 基于CCE快速部署Volcano批量调度系统
- 无服务器文件解压
- 定时开关机解决方案
- 运维平台数据库解决方案
- CDN日志定时转储解决方案
- 基于VPCEP实现跨VPC连接ELB
- 基于Nginx Ingress实现灰度发布
- 基于蓝凌MK-PaaS快速构建OA系统
- 快速部署SAP S4HANA云上环境
- 快速部署高可用PostgreSQL
- 快速部署宝塔面板
- 通过Nginx反向代理访问OBS最佳实践
- 快速部署永洪BI平台
- 基于SmartBI快速构建商业智能分析平台
- 基于CCE容器快速建站
- 快速搭建OpenVPN
- 云上跨VPC添加实例到ELB最佳实践
- 企业云上办公桌面解决方案
- CDN自动刷新缓存解决方案
- CDN自动预热解决方案
- 快速部署TongWeb应用服务器
- 基于GitLab快速部署仓库管理系统
- 无服务器视频转码解决方案
- 快速部署SAP B1云上环境
- 无服务器日志文件上传LTS
- 基于云手机搭建安卓测试集群
- 基于Hexo快速搭建博客
- 基于Zabbix搭建运维监控平台
- 快速搭建WDCP管理系统
- 游戏服务托管解决方案
- 快速构建基于事件网格的运维审计环境
- 快速构建高可用Pulsar集群
- 快速构建高可用Solr集群
- 基于JumpServer快速搭建远程安全运维环境
- 快速搭建高可用Elasticsearch集群
- 基于DataGuard实现Oracle数据库快速迁移上云
- 快速搭建高可用InfluxDB集群
- 基于DBSyncer快速实现数据库迁移
- 基于WGCLOUD搭建运维监控平台
- 快速搭建DataX数据库迁移环境
- 基于辅助弹性网卡实现ECS绑定多IP
- 定时批量创建/删除ECS实例
- 公网IP不变业务迁移最佳实践
- 文档下载
- 通用参考
链接复制成功!
集群内资源迁移(E-Backup)
操作场景
本节介绍在自建集群中使用开源Velero备份,在CCE集群使用E-Backup插件做恢复的方法。
本文使用Wordpress应用为例,将自建Kubernetes集群中的应用整体迁移到CCE集群。Wordpress应用包含Wordpress和MySQL两个组件,均为容器化实例,分别绑定了两个Local类型的本地存储卷,并通过NodePort服务对外提供访问。
迁移前通过浏览器访问Wordpress站点,创建站点名称为“Migrate to CCE”,并发布一篇文章用于验证迁移后PV数据的完整性。Wordpress中发布的文章会被存储在MySQL数据库的“wp_posts”表中,若迁移成功,数据库中的内容也将会被全量搬迁至新集群,可依此进行PV数据迁移校验。
前提条件
- 请在迁移前提前清理原集群中异常的Pod资源。当Pod状态异常但是又挂载了PVC的资源时,在集群迁移后,PVC状态会处于pending状态。
- 请确保CCE侧集群中没有与被迁移集群侧相同的资源,因为Velero工具在检测到相同资源时,默认不进行恢复。
- 为确保集群迁移后容器镜像资源可以正常拉取,请将镜像资源迁移至容器镜像服务(SWR),具体操作方法请参见客户端上传镜像。
- CCE不支持ReadWriteMany的云硬盘存储,在原集群中存在该类型资源时,需要先修改为ReadWriteOnce。
- Velero集成Restic工具对存储卷进行备份还原,当前不支持HostPath类型的存储卷,详情请参见Restic限制。若您需备份该类型的存储卷,请将HostPath类型替换为Local类型。当备份任务中存在HostPath类型的存储,该类型存储卷将会被自动跳过并产生Warning信息,并不会导致备份失败。
原集群应用备份
- (可选)如果需要对Pod中指定的存储卷数据进行备份,需对Pod添加annotation,标记模板如下:
kubectl -n <namespace> annotate <pod/pod_name> backup.velero.io/backup-volumes=<volume_name_1>,<volume_name_2>,...
- <namespace>:Pod所在的namespace。
- <pod_name>:Pod名称。
- <volume_name>:Pod挂载的持久卷名称。可通过describe语句查询Pod信息,Volume字段下即为该Pod挂载的所有持久卷名称。
对Wordpress和MySQL的Pod添加annotation,pod名称分别为wordpress-758fbf6fc7-s7fsr和mysql-5ffdfbc498-c45lh。由于Pod在默认命名空间default下,-n <NAMESPACE>参数可省略:
kubectl annotate pod/wordpress-758fbf6fc7-s7fsr backup.velero.io/backup-volumes=wp-storage kubectl annotate pod/mysql-5ffdfbc498-c45lh backup.velero.io/backup-volumes=mysql-storage
- 对应用进行备份。备份时可以根据参数指定资源,若不添加任何参数,则默认对整个集群资源进行备份,详细参数请参考Resource filtering。
- --default-volumes-to-restic:表示使用Restic工具对Pod挂载的所有存储卷进行备份,不支持HostPath类型的存储卷。如不指定该参数,将默认对1中annotation指定的存储卷进行备份。此参数仅在安装Velero时指定“--use-restic”后可用。
velero backup create <backup-name> --default-volumes-to-restic
- --include-namespaces:用于指定namespace下的资源进行备份。
velero backup create <backup-name> --include-namespaces <namespace>
- --include-resources:用于指定资源进行备份。
velero backup create <backup-name> --include-resources deployments
- --selector:用于指定与selector相匹配的资源备份。
velero backup create <backup-name> --selector <key>=<value>
本文指定default命名空间下的资源进行备份,wordpress-backup为备份名称,进行应用恢复时也需指定相同的备份名称。示例如下:
velero backup create wordpress-backup --include-namespaces default --default-volumes-to-restic
回显如下,表示成功创建备份任务:
Backup request "wordpress-backup" submitted successfully. Run `velero backup describe wordpress-backup` or `velero backup logs wordpress-backup` for more details.
- --default-volumes-to-restic:表示使用Restic工具对Pod挂载的所有存储卷进行备份,不支持HostPath类型的存储卷。如不指定该参数,将默认对1中annotation指定的存储卷进行备份。此参数仅在安装Velero时指定“--use-restic”后可用。
- 查看备份情况。
velero backup get
回显如下:NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR wordpress-backup Completed 0 0 2021-10-14 15:32:07 +0800 CST 29d default <none>
同时可前往对象桶中查看备份的文件,其中backups路径为应用资源备份,restic路径为PV数据备份。
目标集群安装E-Backup插件
E-Backup为CCE提供集群备份恢复能力。如在CCE中使用E-Backup恢复,需要安装插件并创建存储库。
安装E-Backup插件
- 登录CCE控制台,单击左侧导航栏的“插件市场”,找到e-backup插件,单击e-backup插件下的“安装”。
- 在安装插件页面,选择要安装的集群,配置参数,然后单击“安装”。
当前支持配置如下参数。
volumeWorkerNum:备份volume的工作并发数量,默认为3。
创建密钥
- 获取访问密钥。
登录CCE控制台,在右上角用户名下选择“我的凭证”,在左侧选择“访问密钥”,单击“新增访问密钥”。
- 创建密钥文件,并通过 base64 格式化成字符串。
# 创建密钥文件 $ vi credential-for-huawei-obs HUAWEI_CLOUD_ACCESS_KEY_ID=your_access_key HUAWEI_CLOUD_SECRET_ACCESS_KEY=your_secret_key # 使用 base64 格式化字符串 $ base64 -w 0 credential-for-huawei-obs XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHWOBS
- 创建Secret。
按如下YAML文件创建Secret。
apiVersion: v1 kind: Secret metadata: labels: secret.everest.io/backup: 'true' #标识该secret用于E-Backup访问备份存储库 name: secret-secure-opaque namespace: velero #必须和E-Backup置于同一namespace,取值必须为velero type: cfe/secure-opaque data: # credential文件经过base64编码后得到的字符串 cloud: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHWOBS
- secret 所在 namespace 必须和 E-Backup 实例所在namespace一致,即 velero。
- secret.data 中存储的是访问对象存储服务的秘钥,其中 key 必须为 cloud,而 value 为2中通过 base64 编码得到的字符串。一般通过 base64 编码后显示的字符串会有换行符,请在写入 secret.data 中时手动去除这些换行符。
- secret 需要打上标签“secret.everest.io/backup: true”,标识该 secret 是用于备份存储库的管理。
创建存储库
这里的备份存储库是指 E-Backup 用于获取和检测后端对象存储服务相关信息的 K8s 资源对象。
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 # OBS的endpoint credential: name: secret-secure-opaque # 此前创建的secret的名字 key: cloud # secret.data中的key值 objectStorage: bucket: velero # OBS中的桶名 provider: huawei # 使用OBS服务
- 除了 prefix 字段为选填外,其他字段必填。provider 为固定值 huawei。
- endpoint 可以到地区和终端节点获取,都需要保证集群内各节点可访问该地址。当endpoint 不带协议头时(http或者https),默认启用 https。
- credential中的 name 和 key 需要配置正确,否则 E-Backup 无法访问后端存储库。
创建完成后等待30s用于备份存储库的检查和同步等工作,随后查看该备份存储库状态是否可用,PHASE 为 Available 表示可用,其他表示不可用。
$ kubectl get backupstoragelocations.velero.io backup-location-001 -n velero NAME PHASE LAST VALIDATED AGE DEFAULT backup-location-001 Available 23s 23m
此处如果PHASE 长时间没有变成Available,可通过查看E-Backup的日志定位问题。E-Backup安装后会在velero命名空间创建一个名为velero的工作负载,查看velero的日志即可。
目标集群应用恢复(E-Backup)
如果在CCE中使用E-Backup恢复集群,可以使用如下步骤。
将某个立即备份作为数据源,恢复应用到另一个集群 中,全场景适用。
编辑 Restore 模板,如下所示,随后通过 kubectl create 命令创建。
apiVersion: velero.io/v1 kind: Restore metadata: name: restore-01 namespace: velero spec: backupName: wordpress-backup includedNamespaces: - default storageClassMapping: local: csi-disk imageRepositoryMapping: quay.io/coreos: swr.cn-north-4.myhuaweicloud.com/everest
- backupName:指定某个立即备份作为数据源,对该备份中的内容进行恢复,必填项。
- storageClassMapping:改变备份资源PV、PVC等使用的storageClassName,要求StorageClass类型相同。本示例中将本地local改为CCE支持的csi-disk。
- imageRepositoryMapping:改变备份资源的images字段,用于仓库的映射关系,不包含镜像名字和标签的改变(防止迁移和升级耦合在一起),比如:quay.io/coreos/etcd:2.5 搬迁到SWR后,使用本地镜像仓库下 swr.cn-north-4.myhuaweicloud.com/everest/etcd:2.5,配置格式为:quay.io/coreos: swr.cn-north-4.myhuaweicloud.com/everest
这里如果配置了storageClassMapping和imageRepositoryMapping,那镜像更新适配和StorageClass更新适配就无需再次适配。
其他参数请参见E-Backup。
恢复执行后,可通过如下命令查看恢复状态。
$ kubectl -n velero get restores restore-01 -o yaml | grep " phase" phase: Completed
状态Completed表示恢复完成,此时可以去CCE控制台查看具体应用恢复情况。