轻轨线CI/CD数据备份和恢复方案

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

轻轨线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数据备份和恢复方案

1. 概述本节描述 轻轨线 CI/CD服务的数据备份和迁移方案。注意: 因为轻轨线CICD是基于 gPaaS容器服务之上的,所以在操作之前,先将gP...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息