19|自托管构建:如何使用 Harbor 搭建企业级镜像仓库?
王炜
你好,我是王炜。
在上一节课,我带你学习了 Tekton 的基本概念以及如何使用 Tekton 构建镜像。这种方案最大的优势在于可以直接在 Kubernetes 集群中构建,我们不再需要单独为镜像构建付费。
但是,在之前的构建方案中,我们是将镜像推送到了 Docker Hub 镜像仓库。实际上,Docker Hub 也是一个收费的服务,对于免费用户来说,它限制每 6 小时最多拉取 200 次镜像,显然,这对团队来说是完全不够用的。
在这节课,我就带你学习如何使用 Harbor 来搭建企业级的镜像仓库,将它集成到我们上一节课创建的 Tekton Pipeline 流程中,最终替换 Docker Hub,进一步降低镜像存储的成本。此外,在安装 Harbor 的过程中,我还会首次介绍 Helm 工具的使用方法。
在开始今天的学习之前,你需要按照上一节课的内容准备好一个云厂商的 Kubernetes 集群,安装 Ingress-Nginx 和 Tekton,并配置好 Pipeline 和 GitHub Webook。
此外,在生产环境下,Harbor 一般都会开启 TLS,所以你还需要准备一个可用的域名。
下面,我们进入今天的实战环节。
安装 Helm
在我们之前的实践中,像是安装 Tekton 和 Ingress-Nginx 都是通过 Kubernetes Manifest 来完成的。实际上,安装 Kubernetes 应用并不只有一种方案,这里我们介绍第二种方案。Helm。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何使用Harbor搭建企业级镜像仓库,并将其集成到Tekton Pipeline流程中,以替换Docker Hub,降低镜像存储成本。首先介绍了安装Helm和Cert-manager的步骤,然后详细讲解了如何安装和配置Harbor,包括配置DNS解析和访问Harbor Dashboard的步骤。通过示例演示了如何将本地镜像推送到Harbor仓库。此外,还提供了Harbor的生产建议,包括确认PVC是否支持在线扩容、推荐使用S3存储镜像、使用外部数据库和Redis、开启自动镜像扫描和阻止漏洞镜像。文章以实际操作为主线,适合读者快速了解并实践。整体而言,本文内容丰富,涵盖了Harbor的安装、配置和生产建议,对于需要搭建企业级镜像仓库的读者具有实际指导意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- Noel ZHANGHarbor搭建过程中使用了大量的云厂商组件,而且还有数倍的运维工作。我不明白,为什么不直接用云厂商的镜像库。
作者回复: 是的,对小团队来说直接用云厂商的镜像仓库更好,全托管。 有一些团队可能会考虑存储成本和镜像扫描和安全性,Harbor 在这块做的挺不错的。
2023-01-30归属地:江苏24 - ghostwritten记录一次部署遇到的问题: 安装 Cert-manager指定了自己的email 我www.namesilo.com申请了geekcloudnative.com域名,分别为二级域名 `harbor.geekcloudnative.com` 和 `notary.geekcloudnative.com` 配置 A 记录,并指向自己的ip 但我的kubectl get certificate -A 的READY一直是False, NAMESPACE NAME READY SECRET AGE harbor harbor-secret-tls False harbor-secret-tls 29s harbor notary-secret-tls False notary-secret-tls 29s kubectl get certificate -n harbor harbor-secret-tls -oyaml显示 message: Issuing certificate as Secret does not exist, k logs cert-manager-5d595f9fdf-mnw9n -n cert-manager 发现 以下报错日志 error"="failed to perform self check GET request 'http://harbor.geekcloudnative.com/.well-known/acme-challenge/ldnFkzhB2euqIZdtrTo7-ryM492_HCrmpcnWOBH6TmI': Get \"http://harbor.geekcloudnative.com/.well-known/acme-challenge/ldnFkzhB2euqIZdtrTo7-ryM492_HCrmpcnWOBH6TmI\": dial tcp: lookup harbor.geekcloudnative.com on 172.16.253.166:53: no such host" 通过报错可以判断本地没有做域名解析。在/etc/hosts添加 <ip> harbor.geekcloudnative.com notary.geekcloudnative.com READY为false得到解决。
作者回复: 👍🏻很好的经验分享~
2023-02-01归属地:北京22 - 郑海成老师,不需要将证书保存在docker目录下,创建跟域名相同的子目录这个操作吗?我看精选留言第三条的朋友也遇到了
作者回复: 有具体的问题描述吗?
2023-02-24归属地:北京3 - Jichkubectl get certificate 我本地报 Issuing certificate as Secret does not exist
作者回复: 检查一下安装 Cert-manager 的步骤以及创建 ClusterIssuer 的步骤。
2023-01-29归属地:上海 - 橙汁在阿里云的k8s上使用cert-manager需要accesskey来验证域名归属和dns记录验证,文章里没看到 是域名的关系吗,后续跟课程也验证下
作者回复: 阿里云没试过,有经验可以分享吗
2023-01-27归属地:北京 - ghostwritten界面https可以登陆。但命令行登陆:docker login harbor.geekcloudnative.com -u admin -p Harbor12345 WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get "https://harbor.geekcloudnative.com/v2/": Get "https://core.harbor.domain/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry": dial tcp: lookup core.harbor.domain on 8.8.8.8:53: no such host2023-02-01归属地:北京3
收起评论