监控 Docker 注册表
大家读完觉得有意义记得关注和点赞!!!
目录
1 引言
1.1 注册表
1.2 集线器
1.3 Fedoro
2 设计
2.1 技术栈
2.2 指标源
2.2.1. 根据访问日志匹配度量模式
2.2.2 将 InfluxDB 格式的度量直接写入文件
3 实施
3.1 自定义模式
3.2 设置属性tag
3.3 选择限制
4 监控仪表板
4.1 关键指标
4.2 错误
4.3 上传/下载缓慢
4.4 请求来源(本地未命中)
4.5 日志详情
5 警报
6 总结和未来工作
引用
附录:配置文件
我们在私有云中运行自定义图像服务,该服务 最初基于 VMware/Harbor 0.4.5,此后在内部开发。 公开演示 PDF(Chinease 语言)提到了其中的一部分[2]。 然而,本文不是关于设计和 图像服务的实现(需要另一篇文章),但监控 系统。
1 引言
为了更好地理解监控系统,我们首先介绍架构概述。
1.1 注册表
Docker 注册表,现在称为 Docker Distribution,是官方组件 用于存储和分发 Docker 镜像。我们使用定制版本。2.6+
自定义部分支持透明地重定向请求 本地拉取未命中时,到远程中心/注册表(请求来源)。
图片来自 [2]。
1.2 集线器
Registry 提供镜像存储、推送/拉取 API 等功能,而 将更高级别的管理(如用户管理、身份验证管理)留给上层平台。 Harbor 就是这样的平台之一。
在我们的公司中,我们使用定制版本来满足我们的特定需求, 例如,跨区域映像同步、与 CI/CD 集成。
集线器的主要组件:
- API 和 UI 服务
- Jobservice - 执行图像同步作业
- 注册表 - 定制版本
- nginx - API/UI、jobservice、注册表之间的 L7 代理
每个 Hub 都以 HA 模式部署,架构如下:
图片来自 [2]。
我们每个区域都有一个中心,每个中心都有不同的服务 URL,例如 、 、 . 但是,对于图像服务,我们对所有区域都使用唯一的 URL:,这大大加快了推送/拉取性能。hub-1.example.com
hub-2.example.com
hub-N.example.com
hub.example.com
我们使用 gSLB 来实现这一目标。
1.3 Fedoro
图片来自 [2]。
Fedoro 是管理映像同步的中央服务。Fedoro 将不同区域的 Hub 设置为联合。它支持 Hub Management、Project Management 和 Sync Policy Management。
2 设计
2.1 技术栈
基于 TIG 的整体监控解决方案:Telegraf + Influxdb + Grafana。
2.2 指标源
我们主要通过两种方式收集指标:
2.2.1. 根据访问日志匹配度量模式
- API 状态
- 推/拉统计
- 平均推/拉带宽
2.2.2 将 InfluxDB 格式的度量直接写入文件
- 同步作业信息
- 请求源信息
3 实施
Docker 按不同的层拉取和推送镜像,因此目前我们只能获取层统计信息,而不是整个镜像。但根据我们的观察,每张图像大约有 3 层。
3.1 自定义模式
要设计 URI,我们需要定义自己的自定义 grok 模式。
请参考 [TODO] 什么是模式和自定义模式。
3.2 设置属性tag
将项目设置为标记属性
3.3 选择限制
Grafana:向表添加限制。例:SELECT * FROM test LIMIT 500
4 监控仪表板
4.1 关键指标
4.2 错误
4.3 上传/下载缓慢
4.4 请求来源(本地未命中)
4.5 日志详情
5 警报
6 总结和未来工作
引用
- Github:vmware/harbor
- 大浪:携程的容器化交付实践
- Github:Docker 注册表
- 什么是 Global Server Load Balancing (GSLB)?
附录:配置文件
- Nginx Conf:nginx.conf
- Telegraf 会议:hub_nginx.conf
- Grafana Conf: grafana.json