惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

陈少文的网站

容器化部署 Hermes Agent 部署 JuiceFS CSI Driver 使用 A2A Gateway 打通多 OpenClaw Loggie 部署与配置 OpenClaw 运维 - 让飞轮转起来 你也可以这样落地 AI Agent - SOPS 篇 AGFS 文件系统性能测试 面向 AI Agent 的文件系统 - AGFS OpenViking 使用与 OpenClaw 集成 如何远程给OpenClaw发送消息 容器化部署 OpenClaw 使用 Skills 和 MCP 扩展 OpenClaw OpenClaw 安装与配置 LVM 日常运维 MinIO 基础设施选型与优化 容器部署 ClickHouse 容器化部署 Redis 容器部署中间件 容器部署多节点 FoundationDB 及运维 使用 HAProxy 代理 MinIO 及性能测试 多机多盘 MinIO 集群在不同纠删码配置下的性能测试 多机多盘 minio 集群不同纠删码配置在 IPoIB 下的性能测试 MinIO 多节点多盘部署与运维 Cursor 之下,何以立足 你也可以这样落地 AI Agent - MCP 篇 阿里云 eRDMA 测试及 PD 分离应用部署 你也可以这样落地 AI Agent - 运维事件篇 常见的几种 LLM Agent 架构 你也可以这样落地 AI Agent - 案例篇 ext4、xfs、zfs、btrfs 在 RAID6 下的性能测试 RAID 下 ZFS 运维操作 RAID 下 XFS 运维操作 RAID 下 Btrfs 运维操作 xfs 在各种 RAID 下的性能测试 RAID 存储技术 使用 LLaMA-Factory 微调 Qwen3 模型 vLLM 部署 PD 分离应用 使用 lmcache 能显著改善模型推理的 TTFT 什么是 Prefix Cache NVIDIA RTX 5090 推理测试 什么是模型量化 Kubernetes 基础环境要求 如何升级 Kubernetes 节点的 cgroup 版本 在服务器上使用 claude-code 常用 NPU 运维及故障处理 NVIDIA DCGM 使用指南 如何清理僵尸进程 使用 VLLM Benchmark 进行模型性能测试 眼看他拔地起,眼看他化作泥 - KubeSphere 在 Kubernetes 集群部署 Dragonfly history 命令使用 AI 相关论文 在服务器上使用 Gemini CLI Ascend DMI 工具使用指南 Kubernetes 下开源的 GPU 虚拟化项目 FoundationDB 数据备份与恢复 认知觉醒 给 Node Exporter 添加抓取凭证 部署 smokeping-prober 探测网络质量 Opscli 支持 MCP 提供 Cline\Cursor 集成 kube-proxy 异常导致节点上的 Pod 无法访问 Service 为什么 NFS Over RDMA 比 NFS 的 FIO 大块读性能好很多 3FS 关键技术和设计 DeepSeek 3FS 运维指南 容器化部署 DeepSeek 3FS 存储系统 3FS 的一些性能测试 在 Kubernetes 中使用 Fluid 挂载 3FS 存储及性能测试 NFS Over RDMA kubectl logs 无法查看 Pod 日志报错 NotFound 使用 Dante 提供 SOCKS5 转发 使用 Calico 限制 Pod 的带宽 分布式计算框架 Ray 以 Qwen 为例,学习大模型的结构 NVIDIA 环境变量配置 Ascend 环境变量配置 Fluid 下的 Juicefs 企业版维护 使用 vLLM 进行模型推理 使用 Nerdctl 构建多架构镜像 使用 vLLM 应用验证推理节点 AI 应用开发技术栈 在 Kubernetes 部署 Jumpserver 跳板机 使用 Ops 项目查看并监控集群事件 使用 Fluid 和 S3FS 对接 S3 存储及性能测试 使用 Fluid 对接 S3 存储及性能测试 使用 TensorBoard 可视化 PyTorch 训练过程 使用 PyTorch 在 MNIST 数据集训练模型 Ubuntu 切换指定版本的内核 MPI 通信原语及 Python 编程使用 Ops 发布 v1.0.0 版本 常见的几种网络拓扑结构 RDMA 技术 SR-IOV 技术 InfiniBand 网络及常用命令 使用 Fluid 对接 OBS 存储及性能测试 使用 Iceberg 和 Spark 在 Kubernetes 上处理数据 GPU 主机如何开启 GDS 什么是 Token 什么是 FLOPs 什么是 PD 分离 Kubernetes 下的 DLRover 工作流程分析
镜像管理工具 -- Harbor
2019-09-12 · via 陈少文的网站

1. 搭建 Harbor 的要求

Harbor 硬件要求:

  • CPU,最少 2 核,4 核更好
  • Mem,最少 4 GB,8 GB 更好
  • Disk,最少 40 GB,160 GB 更好

Docker 版本要求:

  • 17.06.0 以上

在 Kubernetes 上搭建 Harbor ,可以参考文档,使用 Helm 搭建 harbor

2. Harbor 提供的功能

Harbor 是在 Docker Registry 的基础之上,进行了企业级扩展。Harbor 提供的功能包括:

  • 基于角色的权限控制

  • 基于策略的镜像复制

  • 漏洞扫描

  • LDAP 认证

  • 镜像垃圾清理

  • Notary 镜像签名

  • 操作日志

  • RESTful API

  • Chart 包的管理

3. Harbor 集成的组件

3.1 Clair

Clair 是 CoreOS 开源的镜像漏洞扫描工具。

Clair 的原理是,首先对镜像进行特征的提取,再将这些特征匹配 CVE 漏洞库。Clair 是以静态的方式,按照镜像 layer 层级,进行扫描的。

3.2 Notray

在构建镜像时,通常会基于一些基础镜像,添加符合应用场景的镜像层,得到新的镜像。为了防止在构建过程中,非法植入恶意镜像层,便有了内容信任(Content Trust)机制,用以保证镜像层来源可信。

Notary 是一套镜像的签名工具, 用来保证镜像层在 pull、push、transfer 过程中的一致性和完整性。避免中间人攻击,阻止非法的镜像更新和运行。

镜像层的创建者可以对镜像层做数字签名,生成摘要,保存在 Notary 服务中。开启 Content Trust 机制之后,未签名的镜像无法被拉取。

通过设置环境变量,可以开启 Content Trust 机制:

export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://notary.harbor.chenshaowen.com

推、拉镜像时,要求镜像层有签名:

1
2
3
docker pull core.harbor.chenshaowen.com/shaowenchen/devops-python-sample:31

Error: remote trust data does not exist for core.harbor.chenshaowen.com/shaowenchen/devops-python-sample: core.harbor.chenshaowen.com does not have trust data for core.harbor.chenshaowen.com/shaowenchen/devops-python-sample
1
2
3
4
5
6
7
8
docker push core.harbor.chenshaowen.com/shaowenchen/kube-apiserver:v1.15.3

The push refers to repository [core.harbor.chenshaowen.com/shaowenchen/kube-apiserver]
9b49e894f11a: Layer already exists
fe9a8b4f1dcc: Layer already exists
v1.15.3: digest: sha256:a21bcbcd23f7dbc6a331583645b56e639ec256cc6e2283a647ddd86505a4783e size: 741
Signing and pushing trust metadata
Enter passphrase for root key with ID dc948ea:

3.3 Docker Registry

Docker Registry 是 Docker 官方提供的镜像存储组件。

registry v2 拥有断点续传、镜像多层并发拉取等功能。

当 pull 一个镜像时,先进行认证,获取到 token 并授权通过,然后获取镜像的 manifest 文件,进行 signature 校验。校验完成之后,依据 manifest 包含的信息,拉取各层。拉取完成后,也需要先在本地进行校验。

当 push 一个镜像时,先将镜像各层并发推送至 registry ,推送完成后,再将镜像的 manifest 推至 registry。

在 registry 的存储目录下,能够找到两个文件夹:一个是 blobs,用于存储层级文件;另外一个是 repositories,以索引的方式保存了 registry 中镜像的元数据。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
tree -L 6
.
`-- docker
    `-- registry
        `-- v2
            |-- blobs
            |   `-- sha256
                   ...
            |       `-- ff
            `-- repositories
                |-- library
                |   `-- kube-proxy
                `-- shaowenchen
                    |-- devops-python-sample
                    |-- docker-robotframework
                    `-- zing-gallery

4. Kubernetes 中的 Harbor

上面是 Harbor 的架构图。下面根据 Kubernetes 中运行的 Pod 了解一下 Harbor 中的相关模块:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
kubectl get pod -n harbor

NAME                                           READY   STATUS    RESTARTS   AGE
harbor-harbor-chartmuseum-6b94bdff69-2n885     1/1     Running   2          96m
harbor-harbor-clair-5bd8f76d9c-crjqj           1/1     Running   6          96m
harbor-harbor-core-599747cd9b-vbhv5            1/1     Running   7          96m
harbor-harbor-database-0                       1/1     Running   2          96m
harbor-harbor-jobservice-54686b9f7-dpvms       1/1     Running   8          96m
harbor-harbor-notary-server-85b5587c5-tkntx    1/1     Running   1          96m
harbor-harbor-notary-signer-7b67669b7f-q2qkl   1/1     Running   2          96m
harbor-harbor-portal-64cff84747-tbmdp          1/1     Running   2          96m
harbor-harbor-redis-0                          1/1     Running   2          96m
harbor-harbor-registry-555c545d5b-gmzg5        2/2     Running   3          96m
  • chartmuseum, chart 存储,在挂载的 PV 中可以看到以文件目录形式存储的 chart 包。
  • clair,用于镜像安全扫描
  • core,核心功能控制
  • database,用于存储 projects、users、roles、images 等元数据。
  • jobservice,执行定时任务,提供 API 供外部提交任务及查询执行结果。
  • notary-server、notary-signer,实现 Docker Content Trust ,镜像签名。
  • portal,UI 页面入口
  • redis,缓存
  • registry,Docker 的原生 registry 组件

5. HA 方案

  • 多主复制

通过一个 LB ,将请求导向多个 Harbor 实例上。这种方式不能保证数据的一致性,在生产环境常会遇到问题。

  • 多实例,共享存储

同样是,通过一个 LB ,将请求导向多个 Harbor 实例。但是全部实例共享存储,只需要存储是高可用,那么整个 Harbor 集群也就高可用了。

6. Harbor 的一些问题

2022.07 新增

  • 任务队列慢

使用 Harbor 进行主从复制时,Harbor 的任务执行非常慢。如上图,日常推送不到 2K,而任务堆积了 5.7K,根本无法作为生产的同步方案使用。

主从 Harbor 的直接同步是不可行的,如果借助第三方工具或可一试。

  • Trivy 扫描不可用

我们采用的是 4C8GB 机器使用 docker compose 部署 Harbor。Harbor 有两种安全扫描自动触发方式:

- 上传镜像之后扫描。导致任务堆积,需要等十几个小时才能执行。

- 定时扫描。如上图,每次扫描时,内存不断增长,CPU 间歇性拉高,直至达到接近 98% 消耗,影响机器稳定性。而且,之前扫描过的镜像,第二次依然会扫描,无法控制资源消耗。

因此,建议采用外置的 Trivy 镜像安全扫描器,同时分散到多个实例进行扫描。

  • 任务执行机制缺陷

在基于 Kubernetes 的一个 Harbor 实例上,增加 Job Service 的副本数量不能显著提升任务的执行速度。

同时,在页面上取消的任务并不能马上取消,而是需要删掉 Redis 中的数据。如果采用的是无状态的 Redis,可以重启 Redis 取消任务。

7. 参考