首页 > 其他分享 >一次非典型的gitlab镜像库(registry服务)故障排除

一次非典型的gitlab镜像库(registry服务)故障排除

时间:2024-01-16 14:58:02浏览次数:23  
标签:opt gitlab 非典型 xxx rails registry var

现象

公司内机房一次停电与服务器重启后,有人反应gitlab内的CI无法执行了。

查看CI作业日志发现是registry镜像库访问返回了503错误。

Error response from daemon: login attempt to http://registry.xxx.com/v2/ failed with status: 503 Service Unavailable

从本机执行docker login发现果然同样异常。

 

查询镜像库的日志 /var/logs/gitlab/registry/current 文件发现,确实有大量503日志,但是日志中并没有特别具体的原因。

从gitlab页面上查看各项目的镜像库,发现所有的镜像列表都变为空了;但确认硬盘/var/opt/gitlab/gitlab-rails/shared/registry目录中,所有的镜像文件都存在。

 

试探

网络查询类似的报错,有外国网友说修改/etc/gitlab/gitlab.rb中的registry["storagedriver_health_enabled"]为false即可。

 

修改后,执行gitlab-ctl reconfigure 和 gitlab-ctl restart后,果然 docker login可以了。

 

但是进入gitlab页面发现所有的镜像列表还是为空, 执行CI作业docker push还是失败。

也就是说,问题是出现在storage上,但是将storage的健康检查关闭,仅仅是无视了问题,并没有解决这个问题。

 

线索

继续查询官方文档,在https://docs.gitlab.cn/14.0/ee/administration/packages/container_registry.html中找到一个说明,

通过gitlab.rb中的该选项可以开启镜像库服务registry的DEBUG功能。

开启
registry['debug_addr'] = "localhost:5001"

后,执行:
curl "localhost:5001/debug/health" 

 

通过curl访问health后,终于得到了一个具体的错误信息:

curl "localhost:5001/debug/health"
{"storagedriver_filesystem":"filesystem: stat /var/opt/gitlab/gitlab-rails/shared/registry: permission denied"}

  

由此可以初步判定,gitlab进程内部会通过stat命令访问 /var/opt/gitlab/gitlab-rails/shared/registry 这个目录,判断是否可用。

执行stat的时候碰到了权限问题。但是究竟是什么问题呢?

 

从 /var/opt/gitlab/gitlab-rails/shared/registry 开始一层层进行追查,由于目录内的内容都是由gitlab进程生产和管理的,一般情况下文件所有用户和权限设置都是OK的。

经过全局备份后,尝试对该目录进行 chmod -R 777 发现仍然报错。

 

破案

这就有意思了,如果/var/opt/gitlab/gitlab-rails/shared/registry 开始往下都变成777还不行,那一定是上层目录出了问题。

不停的向上层目录查看,翻到 /var/opt/gitlab这一层的时候终于发现问题:/var/opt/gitlab/gitlab-rails居然是个软链接,链接到一个 /data/xxx/xxx/xxx/xxx/gitlab-rails目录上。

 

咨询运维小哥才发现,原来是他为了加一个新的4T硬盘,把原来的gitlab-rails目录给链接到这个新硬盘的挂载点上了。

查询一层一层查询 /data/xxx/xxx/xxx/xxx/ 权限发现果然gitlab相关用户组及用户是无法访问的。

修改/data/xxx/xxx/xxx/xxx/ 每一级的权限后问题消失。

 

疑问

此时仍然有个谜团还没有解决,按照运维小哥所说,加装挂载大硬盘已经有一段时间了(具体时间都记不清了),

为何一直没有出问题,直到最近一次停电重启后才发生问题呢?

 

总结

gitlab的registry服务是CI的基础服务,但是其启动日志等并不是很详细,出问题后几乎没有什么帮助。

好在其提供了DEBUG的接口,并在官方文档中有所说明,这才能找到问题的具体原因。

另外,像git服务器这种公司级的关键性服务器,其运维操作一定要规范化,

任何操作一定要有【方案 - 评审 - 执行 - 记录】的完整可回溯文档,出问题后才能节省排查的时间。

 

特此记录。

 

 

标签:opt,gitlab,非典型,xxx,rails,registry,var
From: https://www.cnblogs.com/csliwei/p/17967628

相关文章

  • 如何在Linux上搭建本地Docker Registry并实现远程连接
    Hello,大家好我是咕噜铁蛋!当今,Docker已成为了广受欢迎的容器化解决方案。我们需要掌握Docker相关的技能,其中之一就是如何在Linux上搭建本地DockerRegistry并实现远程连接。我也通过科技手段整理了些,今天我将详细介绍如何在Linux上搭建本地DockerRegistry,并实现远程连接,......
  • 配置jenkins利用gitlab webhook提交自动触发打包
    1、jenkins安装gitlab插件2、gitlab对应的项目生成访问令牌3、jenkins配置api_token此处的api_token就是刚才gitlab生成的访问令牌4、jenkins项目上配置webhook点击“高级”展开拉到最底下生成项目token5、gitlab配置webhook进入gitlab项目的设置--webhook输入je......
  • 删除Azure Container Registry中tag为null的容器镜像
    删除AzureContainerRegistry中tag为null的容器镜像近几年容器技术的蓬勃发展,越来越多的客户开始在Azure中使用AKS,ACR等容器相关的Azure服务,来满足其不断发展的业务使用需求。但随着时间的推移和业务复杂性的增长,很多客户都会发现,ACR中的某些Repo内,显示的清单计数和实际的清单数量......
  • gitlab升级
    升级环境:操作系统:Centos7.6gitlab版本:gitlab-ce-14.9.0升级至gitlab-ce-15.0.5参考文档:https://docs.gitlab.com/ee/update/index.html#upgrade-paths注意事项:升级期间gitlab会停止对外服务,做任何系统升级前都需要提前做好数据备份,避免升级失败导致数据丢失。1、数据备份执行如下......
  • 使用 Docker Compose 部署 Docker Registry
    在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,DockerRegistry成为了我们的救星。DockerRegistry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署DockerRegistry,您可以轻松地构建、存储和分享自己的Docker镜像。本文将详细介绍如何使用DockerCompose快......
  • rpm安装gitlab
    安装环境:操作系统:Centos7.6gitlab版本:gitlab-ce-14.91、开始安装从官网(https://packages.gitlab.com/gitlab/gitlab-ce)下载rpm安装包直接复制命令进行下载即可wget--content-dispositionhttps://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-14.9.5-ce.0.el7.x......
  • kubernetes部署gitlab
    1.部署镜像地址:ExploreDocker'sContainerImageRepository|DockerHubgithub地址:sameersbn/docker-gitlab:DockerizedGitLab(github.com)PostgreSQL:OmnibusGitLab附带的PostgreSQL版本|极狐GitLab环境变量介绍:sameersbn/docker-gitlab:DockerizedGitLab(gith......
  • 技术文档 | 在Jenkins及GitlabCI中集成OpenSCA,轻松实现CI/CD开源风险治理
    插播:OpenSCA-cli现支持通过homebrew以及winget安装:Mac/Linuxbrewinstallopensca-cliWindowswingetinstallopensca-cli总有小伙伴问起如何在CI/CD中集成OpenSCA,文档它这不就来啦~若您解锁了其他OpenSCA的用法,也欢迎向项目组来稿,将经验分享给社区的小伙伴们~Jenkins在Jenk......
  • 技术文档 | 在Jenkins及GitlabCI中集成OpenSCA,轻松实现CI/CD开源风险治理
    ​插播:OpenSCA-cli现支持通过homebrew以及winget安装:Mac/Linuxbrewinstallopensca-cliWindowswingetinstallopensca-cli总有小伙伴问起如何在CI/CD中集成OpenSCA,文档它这不就来啦~若您解锁了其他OpenSCA的用法,也欢迎向项目组来稿,将经验分享给社区的小伙伴们~Je......
  • 搭建gitlab
    搭建GitLab(yum安装)一、安装gitlabepel源vi/etc/yum.repos.d/gitlab.repo输入以下内容[gitlab-ce]name=gitlab-cebaseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/Repo_gpgcheck=0Enabled=1gpgcheck=0重新创建元数据缓存yumcleanall&&yummak......