极狐GitLab 如何在 helm 中恢复数据
本文作者:徐晓伟
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。
本文主要讲述了如何在极狐GitLab 恢复 GitLab 历史备份数据
文档
- 恢复 极狐GitLab 安装实例
本实例数据恢复
如果当前 极狐GitLab 实例数据被误删、实例异常,可通过历史备份进行数据恢复
记下数据库客户端的当前副本数,供后续重启使用
# -n gitlab-test:代表命名空间
# release=my-gitlab:代表 helm 安装 gitlab 时的名称
# -lapp=sidekiq:代表 sidekiq-all-in-1-v2 Deployment,默认 1 个副本
# -lapp=webservice:代表 webservice-default Deployment,默认 2 个副本
# -lapp=prometheus:代表 prometheus-server Deployment,默认 1 个副本
kubectl -n gitlab-test get deploy -lapp=sidekiq,release=my-gitlab -o jsonpath='{.items[].spec.replicas}{"\n"}'
kubectl -n gitlab-test get deploy -lapp=webservice,release=my-gitlab -o jsonpath='{.items[].spec.replicas}{"\n"}'
kubectl -n gitlab-test get deploy -lapp=prometheus,release=my-gitlab -o jsonpath='{.items[].spec.replicas}{"\n"}'
停止数据库的客户端,防止锁干扰恢复过程
kubectl -n gitlab-test scale deploy -lapp=sidekiq,release=my-gitlab --replicas=0
kubectl -n gitlab-test scale deploy -lapp=webservice,release=my-gitlab --replicas=0
kubectl -n gitlab-test scale deploy -lapp=prometheus,release=my-gitlab --replicas=0
查看 Toolbox pod
kubectl -n gitlab-test get pods -lrelease=my-gitlab,app=toolbox
# manual-backup-1-xxx:代表个人备份的 pod,无需关注
# my-gitlab-toolbox-backup-xxx-xxx:代表定时任务备份的 pod,无需关注
# my-gitlab-toolbox-xxx-xxx:代表 Toolbox pod 容器,需要记录此名称,用于后续使用
[root@anolis-7-9 ~]# kubectl -n gitlab-test get pods -lrelease=my-gitlab,app=toolbox
NAME READY STATUS RESTARTS AGE
manual-backup-1-9db78 0/1 Completed 0 46h
my-gitlab-toolbox-5b7c4f8c6b-zccrv 1/1 Running 0 8m46s
my-gitlab-toolbox-backup-28393980-f9m8h 0/1 Completed 0 3h3m
[root@anolis-7-9 ~]#
直接使用备份数据的 URL 链接恢复数据(推荐)
备份数据目录
[root@anolis-7-9 ~]# ll -h /gitlab-test/my-gitlab-minio-pv/gitlab-backups/
total 11M
-rw-rw-r-- 1 1000 1000 5.1M Dec 25 14:18 1703484999_2023_12_25_16.7.0-ee_gitlab_backup.tar
-rw-r--r-- 1 1000 1000 5.1M Dec 27 09:38 1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar
[root@anolis-7-9 ~]#
使用 httpd 创建静态资源服务
使用其他方式创建静态资源服务也可以
docker run \--restart=always \-itd \--privileged=true \--name 2.4.48 \-p 180:80 \-v /gitlab-test/my-gitlab-minio-pv/gitlab-backups/:/usr/local/apache2/htdocs/ \-v /etc/localtime:/etc/localtime \-d httpd:2.4.48
查看静态资源
-
访问 httpd

使用静态资源 URL 恢复数据
kubectl -n gitlab-test exec my-gitlab-toolbox-5b7c4f8c6b-zccrv -it -- backup-utility --restore -f http://172.25.25.32:180/1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar
成功示例
[root@anolis-7-9 ~]# kubectl -n gitlab-test exec my-gitlab-toolbox-5b7c4f8c6b-zccrv -it -- backup-utility --restore -f http://172.25.25.32:180/1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar
Defaulted container "toolbox" out of: toolbox, certificates (init), configure (init)
Downloading from http://172.25.25.32:180/1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar
############################################################################################################################################################ 100.0%
Unpacking backup
2023-12-27 12:28:10 +0800 -- Restoring database ...
2023-12-27 12:28:10 +0800 -- Be sure to stop Puma, Sidekiq, and any other process that
connects to the database before proceeding. For Omnibus
installs, see the following link for more information:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installationsBefore restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.
Do you want to continue (yes/no)? yes
Removing all tables. Press `Ctrl-C` within 5 seconds to abort
2023-12-27 12:28:32 +0800 -- Cleaning the database ...
2023-12-27 12:28:35 +0800 -- done
Restoring PostgreSQL database gitlabhq_production ... ERROR: must be owner of extension pg_trgm
ERROR: must be owner of extension btree_gist
ERROR: must be owner of extension pg_trgm
SETset_config
------------
...
[DONE]
Source backup for the database ci doesn't exist. Skipping the task
2023-12-27 12:28:53 +0800 -- Restoring database ... done
2023-12-27 12:28:53 +0800 -- Deleting backup and restore PID file ... done
2023-12-27 12:29:08 +0800 -- Restoring repositories ...
{"command":"restore","gl_project_path":"xuxiaowei-com-cn.wiki","level":"info","msg":"started restore","pid":65,"relative_path":"@groups/19/58/19581e27de7ced00ff1ce50b2047e7a567c76b1cbaebabe5ef03f7c3017bb5b7.wiki.git","storage_name":"default","time":"2023-12-27T04:29:08.837Z"}
...
2023-12-27 12:29:09 +0800 -- Restoring repositories ... done
2023-12-27 12:29:09 +0800 -- Deleting backup and restore PID file ... done
Restoring artifacts ...
done
Restoring packages ...
Restoring pages ...
[root@anolis-7-9 ~]#
恢复副本数量
- 使用上述命令记录的副本数进行副本恢复
kubectl -n gitlab-test scale deploy -lapp=sidekiq,release=my-gitlab --replicas=1
kubectl -n gitlab-test scale deploy -lapp=webservice,release=my-gitlab --replicas=2
kubectl -n gitlab-test scale deploy -lapp=prometheus,release=my-gitlab --replicas=1
复制备份数据到容器 Toolbox pod 内进行数据恢复(不推荐)
不推荐的原因:如果备份数据过大(例如:超过 10G),可能会存在没有复制完成的情况,导致无法解压备份数据,无法恢复
复制备份数据到容器 Toolbox pod 内
-
查看历史备份数据
[root@anolis-7-9 ~]# ll -h /gitlab-test/my-gitlab-minio-pv/gitlab-backups/ total 11M -rw-rw-r-- 1 1000 1000 5.1M Dec 25 14:18 1703484999_2023_12_25_16.7.0-ee_gitlab_backup.tar -rw-r--r-- 1 1000 1000 5.1M Dec 27 09:38 1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar [root@anolis-7-9 ~]# -
复制到容器 Toolbox pod 内的 /srv/gitlab/tmp/backups 目录
[root@anolis-7-9 ~]# kubectl -n gitlab-test cp /gitlab-test/my-gitlab-minio-pv/gitlab-backups/1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar my-gitlab-toolbox-5b7c4f8c6b-zccrv:/srv/gitlab/tmp/backups Defaulted container "toolbox" out of: toolbox, certificates (init), configure (init) [root@anolis-7-9 ~]# [root@anolis-7-9 ~]# kubectl -n gitlab-test exec -it my-gitlab-toolbox-5b7c4f8c6b-zccrv ls /srv/gitlab/tmp/backups kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. Defaulted container "toolbox" out of: toolbox, certificates (init), configure (init) 1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar gitlab-shell [root@anolis-7-9 ~]#
恢复数据
-
使用
容器内/srv/gitlab/tmp/backups目录下的部分文件名, 格式:<timestamp>_<version>kubectl -n gitlab-test exec my-gitlab-toolbox-5b7c4f8c6b-zccrv -it -- backup-utility --restore -t 1703640824_2023_12_27_16.7.0-ee -
也可以使用
file:///<path>指定文件路径绝对路径kubectl -n gitlab-test exec my-gitlab-toolbox-5b7c4f8c6b-zccrv -it -- backup-utility --restore -t file:///home/git/1703640824_2023_12_27_16.7.0-ee_gitlab_backup.tar
成功示例
[root@anolis-7-9 ~]# kubectl -n gitlab-test exec my-gitlab-toolbox-5b7c4f8c6b-zccrv -it -- backup-utility --restore -t 1703640824_2023_12_27_16.7.0-ee
Unpacking backup
2023-12-27 12:38:22 +0800 -- Restoring database ...
2023-12-27 12:38:22 +0800 -- Be sure to stop Puma, Sidekiq, and any other process that
connects to the database before proceeding. For Omnibus
installs, see the following link for more information:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installationsBefore restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.
Do you want to continue (yes/no)? yes
Removing all tables. Press `Ctrl-C` within 5 seconds to abort
2023-12-27 12:41:21 +0800 -- Cleaning the database ...
2023-12-27 12:41:23 +0800 -- done
Restoring PostgreSQL database gitlabhq_production ... ERROR: must be owner of extension pg_trgm
ERROR: must be owner of extension btree_gist
ERROR: must be owner of extension pg_trgm
SETset_config
------------
...
[DONE]
Source backup for the database ci doesn't exist. Skipping the task
2023-12-27 12:41:37 +0800 -- Restoring database ... done
2023-12-27 12:41:37 +0800 -- Deleting backup and restore PID file ... done
2023-12-27 12:41:52 +0800 -- Restoring repositories ...
{"command":"restore","gl_project_path":"xuxiaowei-com-cn.wiki","level":"info","msg":"started restore","pid":236,"relative_path":"@groups/19/58/19581e27de7ced00ff1ce50b2047e7a567c76b1cbaebabe5ef03f7c3017bb5b7.wiki.git","storage_name":"default","time":"2023-12-27T04:41:52.584Z"}
...
2023-12-27 12:41:53 +0800 -- Restoring repositories ... done
2023-12-27 12:41:53 +0800 -- Deleting backup and restore PID file ... done
Restoring artifacts ...
done
Restoring packages ...
Restoring pages ...
[root@anolis-7-9 ~]#
恢复副本数量
- 使用上述命令记录的副本数进行副本恢复
kubectl -n gitlab-test scale deploy -lapp=sidekiq,release=my-gitlab --replicas=1
kubectl -n gitlab-test scale deploy -lapp=webservice,release=my-gitlab --replicas=2
kubectl -n gitlab-test scale deploy -lapp=prometheus,release=my-gitlab --replicas=1
问题
自定义 toolbox Deployment hostAliases
问题
2023-12-27 11:48:42 +0800 -- Restoring repositories ... done
2023-12-27 11:48:42 +0800 -- Deleting backup and restore PID file ... done
Restoring artifacts ...
[Error] ERROR: [Errno -2] Name or service not known
ERROR: Connection Error: Error resolving a server hostname.
Please check the servers address specified in 'host_base', 'host_bucket', 'cloudfront_host', 'website_endpoint'sync existing of artifacts failed
command terminated with exit code 1
解决方案
kubectl -n gitlab-test edit deployments.apps my-gitlab-toolbox
# 添加 MinIO 对象储存的 host 解析hostAliases:- hostnames:- minio.test.helm.xuxiaowei.cnip: 172.25.25.32
信任 MinIO 对象储存域名证书
问题
Restoring artifacts ...
[Error] ERROR: SSL certificate verification failure: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)sync existing of artifacts failed
command terminated with exit code 1
解决办法
kubectl -n gitlab-test edit deployments.apps my-gitlab-toolbox
containers:# 不验证证书- args:- /bin/bash- -c- cp -v -r -L /etc/gitlab/.s3cfg $HOME/.s3cfg && echo "check_ssl_certificate=false" >> $HOME/.s3cfg && while sleep 3600; do :; done
号外号外!
极狐GitLab 正在推出DevSecOps 成熟度测评!链接:https://gitlab.cn/devsecops-assessment/ 测评非常全面并提供了可靠建议,即使不付费买产品,对自己想要落地 DevSecOps 的用户具有很高的参考意义!快来动手试试吧!

相关文章:
极狐GitLab 如何在 helm 中恢复数据
本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …...
Hololens2远程音视频通话与AR远程空间标注,基于OpenXR+MRTK3+WebRTC实现
Hololens2远程音视频通话与AR远程空间标注 使用Unity2021.3.21版本开发,基于OpenXRMRTK3.0WebRTC实现。 (1)通过视频获取视频帧的矩阵的方法可以参考:https://learn.microsoft.com/zh-cn/windows/mixed-reality/develop/advanced…...
2024年03月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析
本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(一共 15 个题目,每题 2 分,共 30 分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( ) A、小程序 B、计时器 C、操作系统 D、神话人物 答案…...
开发语言漫谈-C#
C#的#,字面上的意思就是,也就是把C再。微软只所以搞C#就是要抗衡Java。微软当时搞了个J,被Java告了,没办法了只能另取炉灶。从纯技术角度来看,C#设计非常优秀,可以覆盖所有领域,是几乎唯一的全栈…...
微信小程序用户登录授权指定(旧版本)
配置旧版本基础库2.12.3 实现效果 点击登录按钮即可直接登录,获取用户昵称和头像 点击获取头像昵称按钮则需要授权,才能成功登录 代码实现 my.xml <!-- 登录页面,调试基础库为2.20.2库 --> <view class"mylogin"><block w…...
电商技术揭秘十五:数据挖掘与用户行为分析
相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五:电商平台…...
云原生:5分钟了解一下Kubernetes是什么
在当今的云计算时代,容器化技术变得越来越重要。它能够帮助开发者更高效地部署和管理应用程序。而Kubernetes,作为容器编排领域的领军者,正逐渐成为企业构建和管理云原生应用的核心工具。 近期将持续为大家分享Kubernetes相关知识ÿ…...
【stm32】I2C通信协议
【stm32】I2C通信协议 概念及原理 如果我们想要读写寄存器来控制硬件电路,就至少需要定义两个字节数据 一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址 另一个字节就是这个地址下存储寄存器的内容 写入内容就是控制电路,读出内容就…...
《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021
《论文阅读》构建情感共识并利用未配对数据生成共情对话 ACL 2021 前言简介模型构架损失函数实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Constructing Emotion Consensus and Utilizing …...
xilinx fpga 程序固化(含sdk)
一、前言 xilinx 旗下的产品主要有包含有处理器的SOC系列,也有只有纯逻辑的fpga,两者的程序固化的方法并不相同,本文介绍含有处理器或者microblaze中有程序的固化。 二、固化流程 2.1 在sdk中固化 SDK中选择Xilinx Tools–Program FPGA&a…...
更高效、更简洁的 SQL 语句编写丨DolphinDB 基于宏变量的元编程模式详解
元编程(Metaprogramming)指在程序运行时操作或者创建程序的一种编程技术,简而言之就是使用代码编写代码。通过元编程将原本静态的代码通过动态的脚本生成,使程序员可以创建更加灵活的代码以提升编程效率。 在 DolphinDB 中&#…...
Python中的sort()与sorted()用法
Python中的sort()函数主要用于对列表(list)中的元素进行排序。它有两种形式:一种是列表的方法(即直接对列表对象调用),另一种则是内置的sorted()函数,它返回一个新的已排序列表,而不…...
15.队列集
1.简介 在使用队列进行任务之间的“沟通交流”时,一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集。FreeRTOS提供的队列集功能可以对多个队列进行“监听”,只要…...
Dubbo 集群容错
Dubbo 集群容错 假设我们运营一个大型的电子商务网站,它有大量的用户在任何时间都在进行购物、浏览商品、添加到购物车、结账等操作。为了处理这种高流量和高并发性的情况,我们可能已经设置了一个由多个服务器组成的计算机集群。 在这种情况下…...
杨辉三角形(蓝桥杯,acwing)
题目描述: 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N,请你输出数列中第一次出现…...
计算系数(acwing,数论)
题目描述: 给定一个多项式 (axby)^k,请求出多项式展开后 x^n*y^m 项的系数。 输入格式: 共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格…...
阿里面试题二
实在是太长了 重新开一篇吧 dubbo 服务暴露 Dubbo——服务调用、服务暴露、服务引用过程 - 简书 这两篇文章写的是极好 我现在查得资源强的可怕朋友们 服务降级 MockClusterInvoker 负载均衡策略 容错机制在哪里实现的源码 通信 NIO、BIO区别,NIO解决了什么…...
第9章 文件和内容管理
思维导图 9.1 引言 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理。它的重点在于保持文件和其他非结构化或半结构化信息的完整性,并使这些信息能够被访问。文件和非结构化内容也应是安全且高质量的。 确保文件和内容…...
【Erlang】【RabbitMQ】Linux(CentOS7)安装Erlang和RabbitMQ
一、系统环境 查版本对应,CentOS-7,选择Erlang 23.3.4,RabbitMQ 3.9.16 二、操作步骤 安装 Erlang repository curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash安装 Erlang package s…...
pe格式从入门到图形化显示(七)-导出表
文章目录 前言一、什么是Windows PE格式中的导出表?二、解析导出表并显示1.导出表的结构2.解析导出表3.显示导出表 前言 通过分析和解析Windows PE格式,并使用qt进行图形化显示 一、什么是Windows PE格式中的导出表? PE文件格式的导出表是P…...
关键词搜索和SEO优化有什么关系_常见的关键词搜索误区有哪些
<h2>关键词搜索和SEO优化有什么关系</h2> <p>在当前数字化时代,网站流量的获取和保持已成为每一个企业和个人的重要目标。在这其中,关键词搜索和SEO优化是两个密不可分的环节。它们之间的关系不仅丰富了我们的网站内容,还帮…...
从PolarCTF一道Crypto题,聊聊如何用SageMath秒解自定义群运算的离散对数问题
从PolarCTF一道Crypto题看SageMath在离散对数问题中的实战应用 1. 密码学竞赛中的非标准群运算挑战 在CTF密码学题目中,自定义群运算的离散对数问题(DLP)是常见的高频考点。近期PolarCTF竞赛中出现了一道典型题目,要求参赛者在非…...
视觉问答技术全解析:从原理到实践的LAVIS框架应用指南
视觉问答技术全解析:从原理到实践的LAVIS框架应用指南 【免费下载链接】LAVIS LAVIS - A One-stop Library for Language-Vision Intelligence 项目地址: https://gitcode.com/gh_mirrors/la/LAVIS 技术原理:机器如何"看懂"并"回答…...
3种Cookie管理方案对比:为什么本地导出才是开发者最佳选择?
3种Cookie管理方案对比:为什么本地导出才是开发者最佳选择? 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发和自动…...
Java 无人图书借阅系统设计与完整源码实现
以下是一个基于Java的无人图书借阅系统的设计与完整源码实现方案,涵盖系统架构、核心模块、数据库设计、关键代码实现及部署建议:一、系统架构设计1. 分层架构表现层:用户端:微信小程序(UniApp开发) H5页面…...
【课后习题答案】SystemVerilog for Verification 3rd Edition第五章(绿皮书第三版)
1 解答class MemTrans;// a. 8位logic类型的data_inlogic [7:0] data_in;// b. 4位logic类型的addresslogic [3:0] address;// c. 打印data_in和address的void函数function void print();$display("data_in 0x%h, address 0x%h", data_in, address);endfunction// …...
SDMatte多风格抠图作品集:从商品白底图到艺术创意合成
SDMatte多风格抠图作品集:从商品白底图到艺术创意合成 1. 开篇:当抠图遇上AI 还记得那些年用Photoshop一点一点抠图的痛苦经历吗?边缘总是处理不干净,头发丝永远抠不完整,遇到复杂背景更是让人抓狂。现在,…...
WindowsCleaner:3个步骤解决C盘爆红问题的终极指南
WindowsCleaner:3个步骤解决C盘爆红问题的终极指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否也经历过C盘突然变红、系统卡顿不堪的困扰&a…...
忍者像素绘卷镜像免配置部署:自动检测GPU型号并加载最优配置
忍者像素绘卷镜像免配置部署:自动检测GPU型号并加载最优配置 1. 产品概览:打破次元壁的像素艺术工作站 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,专为像素艺术创作而设计。它将传统漫画创作与现代AI技术相结合&#x…...
[模电]从PN结到实用电路:二极管的深度解析与设计指南
1. PN结:二极管的物理基础 想象一下把一块P型半导体和N型半导体紧密贴合在一起,就像把两块不同颜色的橡皮泥揉捏在一起。P型半导体里充满了带正电的"空穴"(可以理解为缺少电子的位置),而N型半导体则富含自由…...
