通过 Helm 部署 Harbor 实现高可用性
您可以经由 helm 在 Kubernetes 上部署 Harbor,以实现高可用性。这样,如果运行 Harbor 的某个节点变得不可用,用户也不会遇到服务中断。
先决条件
- Kubernetes 集群 1.10+
- Helm 2.8.0+
- 高可用性 Ingress 控制器(Harbor 不管理外部端点)
- 高可用性 PostgreSQL 9.6+(Harbor 不处理数据库 HA 的部署)
- 高可用性 Redis(Harbor 不处理 Redis HA 的部署)
- 请注意,Harbor 目前不支持 Redis 集群或基于 TLS 的连接。尽管目前正在进行启用基于 TLS 身份验证的工作。
- 可以在节点之间共享的 PVC 或外部对象存储
- 请参阅 架构,但为了允许 Harbor 扩展,每个功能/组件需要能够读取/写入共享持久卷。
架构
Harbor 的大多数组件现在都是无状态的。因此,我们可以简单地增加 Pod 的副本数,以确保组件分布到多个工作节点,并利用 K8S 的 “Service” 机制来确保跨 Pod 的连通性。
至于存储层,预计用户将为应用程序数据提供高可用性的 PostgreSQL 和 Redis 集群,以及用于存储镜像和 Chart 的 PVC 或对象存储。

下载 Chart
下载 Harbor helm chart
helm repo add harbor https://helm.goharbor.io
helm fetch harbor/harbor --untar
配置
在 values.yaml
中配置以下项目,或者可以在运行 helm install
期间通过 --set
标志设置它们
-
Ingress 规则
- 配置 Ingress URL
expose.ingress.hosts.core
。
- 配置 Ingress URL
-
外部 URL
- 配置 URL
externalURL
,这用于填充门户上显示的 docker/helm 命令以及返回给 docker 客户端的令牌服务 URL。
- 配置 URL
-
外部 PostgreSQL
- 将
database.type
设置为external
,并在database.external
部分填写信息。 - 需要创建一个空数据库,默认情况下数据库设置为
registry
,但这可以通过设置coreDatabase
来更改。
- 将
-
外部 Redis
- 将
redis.type
设置为external
,并在redis.external
部分填写信息。 - Harbor 在 2.1.0 中引入了 Redis
Sentinel
模式支持。要启用,请使用以下模式设置sentinelMasterSet
和host
<host_sentinel1>:<port_sentinel1>,<host_sentinel2>:<port_sentinel2>,<host_sentinel3>:<port_sentinel3>
。您还可以参考此指南,在 Redis 前面设置 HAProxy 以暴露单个入口点。 - 如先决条件中所述,Harbor 目前不支持 TLS 或 Redis 集群。
- 将
-
存储
- 建议使用支持跨节点以
ReadWriteMany
方式共享的StorageClass
来为存储镜像、Chart 和作业日志的卷提供配置,这允许扩展组件以满足需求。如果这种卷类型不是您的默认 storageClass,则需要在以下位置进行设置persistence.persistentVolumeClaim.registry.storageClass
persistence.persistentVolumeClaim.chartmuseum.storageClass
persistence.persistentVolumeClaim.jobservice.storageClass
.
- 如果使用这样的
StorageClass
,则需要为以下字段将关联的 accessMode 设置为ReadWriteMany
persistence.persistentVolumeClaim.registry.accessMode
persistence.persistentVolumeClaim.chartmuseum.accessMode
persistence.persistentVolumeClaim.jobservice.accessMode
- 或者,通过设置以下内容使用现有的 PVC 来存储数据
persistence.persistentVolumeClaim.registry.existingClaim
persistence.persistentVolumeClaim.chartmuseum.existingClaim
persistence.persistentVolumeClaim.jobservice.existingClaim
- 最后,如果您没有支持
ReadWriteMany
的 StorageClass,或者不想使用,则可以使用外部对象存储来存储镜像和 Chart,并将作业日志存储在数据库中。要启用外部对象存储,请将persistence.imageChartStorage.type
设置为您想要使用的值,并填写相应的部分,并将jobservice.jobLogger
设置为database
。- 注意:对于那些希望使用 S3 的用户,IRSA 支持正在上游进行中。
- AWS IAM 策略示例可在 上游 获得
- 建议使用支持跨节点以
-
副本数
- 将
portal.replicas
、core.replicas
、jobservice.replicas
、registry.replicas
、chartmuseum.replicas
设置为n
(n
>=2)。
- 将
安装
使用发布名称 my-release
安装 Harbor helm chart
Helm 2
helm install --name my-release harbor/
Helm 3
helm install my-release harbor/
在本页
贡献