👨🏻‍🎓博主介绍:大家好!我是李大白,一名运维容器运维工程师,热爱分享知识🌟 

🌈擅长领域:云原生、数据库、自动化运维

🙏🏻如果本文章对小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏!

🤝如果在文章描述时如有错,恳请各位大佬指正,在此感谢!!!

🍂 落叶而知秋,博闻而强识!

📕  精品专栏:Harbor大白话(企业级)



问题描述

在Harbor UI管理界面执行垃圾回收时出现报错:

【Harbor故障排查篇】Harbor jobservice组件异常问题处理_kubernetes


处理过程

查看Harbor各个组件的服务状态

[root@docker-man-01 harbor]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
chartmuseum /docker-entrypoint.sh Up (healthy) 9999/tcp
harbor-core /harbor/start.sh Up (healthy)
harbor-db /entrypoint.sh postgres Up (healthy) 5432/tcp
harbor-jobservice /harbor/start.sh Exit 1
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy) 80/tcp
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:8021->80/tcp
redis docker-entrypoint.sh redis ... Up 6379/tcp
registry /entrypoint.sh /etc/regist ... Up (healthy) 5000/tcp
registryctl /harbor/start.sh Up (healthy)

【Harbor故障排查篇】Harbor jobservice组件异常问题处理_云原生_02

可以看到harbor-jobservice异常退出状态,说明harbor-jobservice组件有问题。接下来查看这个组件的日志来进行进一步的分析。


获取harbor-jobservice组件的日志

从harbor-log日志组件中将harbor-jobservice的日志从容器提取到当前目录进行分析。也可以进容器harbor-log容器里面查看日志,但是容器里面无法使用vim打开日志文件,不好分析,可以将日志文件导出来。

[root@docker-man-01 harbor]# docker cp 
harbor-log:/var/log/docker/jobservice.log ./jobservice-1.log


Jobservice日志分析

ERROR: observer.write - MISCONF Redis is configured to save RDB snapshots, 
but it is currently not able to persist on disk.
Commands that may modify the data set are disabled,
because this instance is configured to report errors during writes if RDB snapshotting fails
(stop-writes-on-bgsave-error option).
Please check the Redis logs for details about the RDB error.
[FATAL] [/jobservice/main.go:81]: redis sub/pub chan error:
MISCONF Redis is configured to save RDB snapshots,
but it is currently not able to persist on disk.
Commands that may modify the data set are disabled,
because this instance is configured to report errors during writes if RDB snapshotting fails
(stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

【Harbor故障排查篇】Harbor jobservice组件异常问题处理_云原生_03

意思就是:

Redis配置为保存RDB快照,但它目前无法在磁盘上持久化。可能修改数据集的命令被禁用,因为此实例配置为在RDB快照失败时报告写入期间的错误(在bgsave error选项上停止写入)。有关RDB错误的详细信息,请查看Redis日志。

看来是Redis缓存组件有异常,需要进一步分析redis缓存组件的日志来排错。


获取Redis组件的日志

将redis缓存组件的日志也导出来进行分析。

[root@docker-man-01 harbor]# docker  cp   harbor-log:/var/log/docker/redis.log   ./redis.log

查看日志

[root@docker-man-01 harbor]#  vim + redis.log
832102 May 18 03:56:04 172.20.0.1 redis[25189]: 8:M 17 May 19:56:04.173 # Background saving error
832103 May 18 03:56:10 172.20.0.1 redis[25189]: 8:M 17 May 19:56:10.087 * 1 changes in 900 seconds. Saving...
832104 May 18 03:56:10 172.20.0.1 redis[25189]: 8:M 17 May 19:56:10.088 * Background saving started by pid 2038
832105 May 18 03:56:10 172.20.0.1 redis[25189]: 2038:C 17 May 19:56:10.089 # Failed opening the RDB file dump.rdb (in server root dir /var/lib/redis) for saving:
No space left on device #磁盘空间不足

【Harbor故障排查篇】Harbor jobservice组件异常问题处理_镜像_04

无法打开RDB文件转储。用于保存的rdb(在服务器根目录/var/lib/redis中):设备上没有磁盘空间。

清理磁盘空间

找到对应分区中占用磁盘较多的数据移走或者删除来释放磁盘空间。


重启Harbor控制台

[root@docker-man-01 harbor]# docker-compose down   #停止Harbor服务
[root@docker-man-01 harbor]# docker-compose up -d #启动Harbor

查看Harbor服务是否正常

[root@docker-man-01 harbor]# docker-compose  ps

服务正常,再到Harbor UI管理界面进行“垃圾清理”操作!可以成功,问题成功解决。


原因总结

从分析jobservice任务组件和Redis缓存组件的日志可以发现,主要原因是主机的磁盘空间不足,导致Redis缓存组件中的数据在做持久化rbd文件时失败,jobservice任务组件在执行“垃圾清理”任务时失败。