轻轨线CI/CD数据备份和恢复方案
1. 概述
本节描述 轻轨线 CI/CD服务的数据备份和迁移方案。
注意: 因为轻轨线CICD是基于 gPaaS容器服务之上的,所以在操作之前,先将gPaaS进行备份(gPaaS容器服务、监控服务的数据备份恢复指南) ,然后再进行轻轨线CICD的备份。在恢复之前,也是先将gPaaS进行恢复,然后再进行轻轨线CI/CD的恢复。
涉及到的对象:
k8s集群里面的对象
数据库
挂载数据,包括PV(第三方组件数据)
名词解释
pvc | 数据卷申明 |
pv | 数据卷 |
版本说明:
在进行数据备份和恢复时,轻轨线以及其他涉及的第三方组件前后版本必须保持一致,否则可能会出现异常。可按照如下截图指引进行版本查看。
轻轨线版本查看方式
第三方组件版本查看方式
2. 数据备份
2.1 备份k8s里与CICD相关的命名空间对象
注意,默认配置的导出项不包含pvc和role资源,备份时建议先修改kcs服务的环境变量。之后就可以将pvc和role资源也一起导出。具体导出操作流程可参考文章 苍穹k8s集群数据备份恢复方法 。
2.1.1 导出命名空间下的资源对象
命名空间包括: devops(第三方组件),harbor-system(镜像仓库),kce-system(与容器服务共用)。若某个命名空间不存在,则可能是没有部署。
备份方式: 进入容器服务-集群管理,使用资源管理中的命名空间导出功能进行导出。
特别说明:
kce-system命名空间,是容器服务,监控服务,轻轨线CI/CD共用,如gPaaS已进行备份,此处可以不备份。
cicd-tool(融合工具,服务挂载了2块数据卷)是部署在客户第三方的商业k8s集群上,其备份恢复依赖于第三方k8s集群的备份恢复机制。不在本文范围之内。
kce-system下的rabbitmq服务 由于消息消费量非常小,也不会产生实际影响,可以不备份。
2.1.2 备份k8s里与轻轨线CI/CD相关的ingress对象
包含2个文件:cicd-third-subpath, kce-entry
# kubectl get ingress kce-entry -n $gPaaS命名空间 -oyaml > kce-entry-ingress.yaml
#gPaaS命名空间默认为 kce-system
# kubectl get ingress cicd-third-subpath -n devops -oyaml > cicd-third-subpath-ingress.yaml
用以上两个文件替换掉上步骤导出的yaml包中的ingress-xxxxxx.yaml文件(注意按照命名空间进行归类整理,按照默认名字,包含kce-system,devops 2个命名空间)。
2.1.3 修改pvc资源文件
devops命名空间
导出的pvc yaml文件中包含10组pvc资源数据,分别为如图中10个pvc资源,需要删除导出文件中pv相关的声明配置。
如下图示为删除过后的 pvc-fastdfs-data的最终数据格式,其它9个pvc也是相似处理。
harbor镜像仓库(harbor-system)(如组件未安装,可忽略)
导出的pvc yaml文件中,包含如图中的5个pvc资源,同样需要删除导出文件中pv相关的声明配置。
2.2 数据库备份
先在宿主机上看下有哪些数据库 ;
# kubectl exec -it db-mysql-0 -n $gPaaS命名空间 -- mysql -uroot -p # show databases;
结果如下:
与轻轨线CI/CD相关的数据库,包含: devops,kcar, kdcc,kdpm,third_api-server, dtm_barrier。
注意:轻轨线CI/CD服务 依赖gPaaS的容器服务,请先确认已备份gPaaS相关的数据库(参考gPaaS备份手册)。
在gPaaS的安装机上执行如下语句,进行数据库备份。
其中,参数"gPaaS命名空间"按实际填写,安装时若未修改则为kce-system,参数 "gPaaS mysql密码"按实际填写,为安装时用户自定义配置。生成的文件名为cicd_bak.sql(可自定义修改)。
# kubectl exec db-mysql-0 -n $gPaaS命名空间 -- mysqldump --databases devops kcar kdcc kdpm third_api-server dtm_barrier -u root -p"$gPaaS mysql 密码" --add-drop-table >cicd_bak.sq
2.3 第三方组件的数据备份
2.3.1 devops命名空间
此命名空间下,包含10组pvc所对应的pv的数据需要备份。涉及的第三方组件包含:fastdfs,gitlab,jenkins,nexus,postgresql,sonarqube(如组件未安装,可忽略)
a) 先查找命名空间 devops下的对应的所有 pv的数据,用如下命令执行:
# kubectl get pvc -n devops --no-headers | awk '{system ("kubectl get pv " $3 " -o jsonpath='[{.spec.hostPath.path},{.spec.nodeAffinity.required.nodeSelectorTerms[0].matchExpressions[0].values[0]}]' ");print "" }'
执行后,得出来的结果如图:
结果说明: 第一列:pv对应的主机磁盘路径; 第二列:pv所在的主机IP(hostname),中间以逗号分隔。
b) 分别备份上一步骤中的数据目录(注意所在主机和数据路径,将整个目录备份,目录名中有所属的组件名称)。
例如 第一行数据(属于fastdfs服务)
/var/gpaas/gpaas/pvc-48e39e19-887c-4331-b765-db1f375aaf39_devops_pvc-fastdfs-data,v-fusion-test1.sz.kingdee.net
需要备份时,先切换到 hostname(或ip)为 v-fusion-test1.sz.kingdee.net 的机器,执行备份(假设备份路径为 /bak_data,建议备份前检查下 整个目录的数据大小和剩余磁盘空间是否足够)。
查看对应目录下的文件:
查看目录文件大小:
执行备份(本次举例,备份到本机上)
# cp -fr /var/gpaas/gpaas/pvc-48e39e19-887c-4331-b765-db1f375aaf39_devops_pvc-fastdfs-data/ /bak_data
备份完后,检查备份后的数据目录:
注意: 其它行的数据也需依次进行备份。
2.3.2 harbr-system命名空间(如组件未安装,可忽略)
此命名空间下,包含5组pvc所对应的pv的数据需要备份。涉及的第三方组件包含:harbor
a) 先查找命名空间 harbr-system下的对应的所有 pv的数据,用如下命令执行:
# kubectl get pvc -n harbor-system --no-headers | awk '{system ("kubectl get pv " $3 " -o jsonpath='[{.spec.hostPath.path},{.spec.nodeAffinity.required.nodeSelectorTerms[0].matchExpressions[0].values[0]}]' ");print "" }'
执行后,得出来的结果如图:
结果说明: 第一列:pv对应的主机磁盘路径; 第二列:pv所在的主机IP(hostname),中间以逗号分隔。
b) 分别备份上一步骤中的数据目录(注意所在主机和数据路径,将整个目录备份,目录名中有所属的组件名称)。备份过程参考3.1章节。
3. 数据恢复
3.1 轻轨线CI/CD k8s集群数据恢复
3.1.1. 恢复devops命名空间 集群对象
先创建devops命名空间
# kubectl create ns devops
执行导入1.1步骤里 导出的 devops命名空间下的文件(yaml文件执行导入没有先后顺序):
# kubectl apply -f xxx.yaml
3.1.2. 恢复harbor-system命名空间 集群对象(如之前组件未安装,可忽略)
先创建harbor-system命名空间
# kubectl create ns harbor-system
执行导入1.1步骤里 导出的 harbor-system命名空间下的文件(yaml文件执行导入没有先后顺序):
# kubectl apply -f xxx.yaml
3.1.3. 恢复kce-system命名空间(如gPaaS容器服务已恢复,此步省略)
先创建kce-system命名空间
# kubectl create ns kce-system
执行导入1.1步骤里 导出的 kce-system 命名空间下的文件(yaml文件执行导入没有先后顺序):
# kubectl apply -f xxx.yaml
3.2 轻轨线CI/CD 数据库恢复
执行如下命令即可恢复已备份的轻轨线CI/CD数据库(cicd_bak.sql为备份的轻轨线CI/CD数据库文件)。gPaaS命名空间默认为 kce-system。
# kubectl exec -i db-mysql-0 -n $gPaaS命名空间 -- mysql -u root -p"$gPaaS mysql 密码" <gpaas_bak.sql
3.3 第三方组件的数据恢复
恢复方式:将之前备份的数据逐个恢复到各个第三方组件服务中。
前置条件: 第三方组件服务都已正常启动,即第三方组件所对应的pv都已重新绑定。
3.3.1 恢复devops下第三方组件的数据
重新在现k8s集群 查找命名空间 devops下的对应的所有 pv的数据,用如下命令执行:
# kubectl get pvc -n devops --no-headers | awk '{system ("kubectl get pv " $3 " -o jsonpath='[{.spec.hostPath.path},{.spec.nodeAffinity.required.nodeSelectorTerms[0].matchExpressions[0].values[0]}]' ");print "" }'
新结果的格式如下(由于pv是重新绑定的,所以pv的路径和所在主机会变化):
例如 第一行数据(属于fastdfs服务)
/var/data/gpaas/pvc-0f222777-ec37-49ba-896d-6b71e7a411c1_devops_pvc-fastdfs-data,v-k8s-container4.sz.kingdee.net
需要恢复数据时,先登录到 hostname(或者ip)为v-fusion-test1.sz.kingdee.net的机器上,为了避免文件写锁定,操作步骤如下:
将对应的第三方组件服务先停止(通过容器服务界面上操作)。
将新目录下的数据先清除。
# rm -r /var/data/gpaas/pvc-0f222777-ec37-49ba-896d-6b71e7a411c1_devops_pvc-fastdfs-data/*
然后再将之前 对应目录的备份数据(目录结尾名一致,此处为 devops_pvc-fastdfs-data)进行恢复。
# \cp -fr /bak_data/pvc-48e39e19-887c-4331-b765-db1f375aaf39_devops_pvc-fastdfs-data/* /var/data/gpaas/pvc-0f222777-ec37-49ba-896d-6b71e7a411c1_devops_pvc-fastdfs-data
最后再将服务进行启用即可(通过容器服务界面上操作)。
其它行的数据参考上述步骤依次进行恢复。
3.3.2. 恢复harbor-system的harbor服务的数据(如组件未安装,可忽略)
参考 3.3.1的步骤 进行恢复数据。
4. 验证
使用如下命令看pod状态是否都是正常.
# kubectl get pod -owide -A
容器服务上正常登录,正常操作轻轨线的功能。
5. 常见问题
Q1:对版本有哪些要求?
A: 此备份/恢复 方案基于轻轨线2.9.9,如果不是这个版本,建议先升级到此版本。
Q2:如果不升级到轻轨线的2.9.9的版本会如何?
A: 有些资源的格式会不一样。如1.1.2 章节里面ingress的文件个数,可酌情处理。
Q3:备份数据后,又搭建了一个新集群,新集群的IP和老集群的IP不同,此种情况如何处理?
A:先按照方案正常操作,操作完毕后,需要手动再更改相关配置的IP。
变更策略:将如图所示中的IP(172.18.5.20,为gPaaS控制台变更前的IP),变更为新IP(gPaaS控制台变更后的IP):
服务配置:
gitlab服务:
pipeline-web:
pipeline:
kdpm-console:
kdcc-console:
kcar-console:
cicd-console:
容器配置:(注:更改了容器配置后,其相应的服务需要重启才能生效)
fastdfs-configmap:
pipline:
front-url: https://172.18.5.20/pipeline-web/
kdpm-web:
kdcc-web:
kcar-web:
cicd-web:
数据库配置
宿主机上 执行更改ip的命令, gPaaS命名空间默认为kce-system。
# kubectl exec db-mysql-0 -n $gPaaS命名空间 --mysql -uroot -p"$gPaaS mysql 密码";
修改dt_srv表的url的地址。
执行如下命令,注意修改 “新ip”为新gPaaS控制台的ip。
> update cloudform.dt_srv t set t.url=replace(url,'172.18.5.20','新ip') where t.sn in ('pipeline','kdpm','kcch','kcar','kdcc','cicd');
修改代码扫描中用到的新k8s集群的连接配置信息。注意修改参数值后,并重启kdcc_console服务。
其中“172.17.8.96:6443”为老的集群的apiserver地址。
update kdcc.kube_config t set t.k8s_host=replace(t.k8s_host,'172.17.8.96:6443','新k8s apiserver地址'),t.k8s_client_certificate_data='新k8s集群客户端证书',
t.k8s_client_key_data='新k8s集群客户端证书密钥'
where t.namespace='devops' and status='1' and t.id=1;
连接配置信息可以在k8s master主机上获取。
# cat /root/.kube/config
修改dt_sev_external表(如果gitlab使用的不是cicd自带的gitlab服务,此步骤忽略)
update cloudform.dt_srv_external t set t.srv_url=replace(t.srv_url,'172.18.5.20','新ip ') where t.sn='kcch' and t.status=1 and id=19;
轻轨线CI/CD数据备份和恢复方案
本文2024-09-23 01:09:08发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144102.html