目录

Harbor系列-00-Helm部署

概述

目前随着 Kubernetes 在各个企业的流行,用 Helm Chart 把 Harbor 部署到 Kubernetes 集群上已经变成非常稳定和常规的做法了,本文主要针对部署过程中的一些问题讨论一下。

Helm仓库处理

1
2
3
4
5
6
# 添加Harbor的Helm仓库
helm repo add harbor https://helm.goharbor.io
helm repo update
helm search repo harbor --versions
# 拉取到本地
helm pull harbor/harbor --version 1.8.2

Harbor 的 Helm Charts 也更新迭代的比较快,因此类似 search 这样的命令应该要多用,确认好需要的 Harbor 的版本,才会下载对应的 Helm Charts。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# helm search repo harbor --versions
NAME          	CHART VERSION	APP VERSION	DESCRIPTION
harbor/harbor 	1.10.0       	2.6.0      	An open source trusted cloud native registry th...
harbor/harbor 	1.9.4        	2.5.4      	An open source trusted cloud native registry th...
harbor/harbor 	1.9.3        	2.5.3      	An open source trusted cloud native registry th...
harbor/harbor 	1.9.2        	2.5.2      	An open source trusted cloud native registry th...
harbor/harbor 	1.9.1        	2.5.1      	An open source trusted cloud native registry th...
harbor/harbor 	1.9.0        	2.5.0      	An open source trusted cloud native registry th...
harbor/harbor 	1.8.3        	2.4.3      	An open source trusted cloud native registry th...
harbor/harbor 	1.8.2        	2.4.2      	An open source trusted cloud native registry th...

安装命令

1
2
# 正常的安装,不修改任何参数
helm install harbor -n harbor --create-namespace harbor/harbor

参数解释

Harbor 的所有组件的所有参数加起来是非常多的,下面针对 1.8.2 的 Harbor Helm Charts 解释几个生产环境的重要的参数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
expose:
  # 生产环境建议用ingress,用NodePort不太方便
  type: ingress
  tls:
    # 这里说的很清楚了,如果不是ingress类型的话,如果开启了tls,在正常使用的时候,必须带上端口,在使用上是不够优雅的
    enabled: true
  ingress:
    hosts:
      # 这个域名是重要的,因为会用于签名域名的写入
      core: core.harbor.domain
  loadBalancer:
    # 前提是有一个LoadBalancer的IP
    IP: ""
# 这个域名很重要,将会在tls的模式下写入到Header头,校验身份的时候需要用到
externalURL: https://core.harbor.domain
persistence:
  # 数据库这些PVC一定要注意
  resourcePolicy: "keep"
  imageChartStorage:
    type: filesystem
    filesystem:
      rootdirectory: /storage
    # 可以用s3
    s3:
      region: us-west-1
      bucket: bucketname
database:
  # 生产环境为了高可用,建议用external,这样数据库的高可以用可以自行规划
  type: internal
  # 这里需要填写高可用PostgreSQL的信息
  external:
    host: "192.168.0.1"
    port: "5432"
    username: "user"
    password: "password"
    coreDatabase: "registry"
    notaryServerDatabase: "notary_server"
    notarySignerDatabase: "notary_signer"
redis:
  # 生产环境为了高可用,建议用external,这样数据库的高可以用可以自行规划
  type: internal
  # 这里需要填写高可用Redis的信息
  external:
    # support redis, redis+sentinel
    # addr for redis: <host_redis>:<port_redis>
    # addr for redis+sentinel: <host_sentinel1>:<port_sentinel1>,<host_sentinel2>:<port_sentinel2>,<host_sentinel3>:<port_sentinel3>
    # 这里需要按照redis+sentinel的方式书写
    addr: "192.168.0.2:6379"
    # The name of the set of Redis instances to monitor, it must be set to support redis+sentinel
    sentinelMasterSet: ""

部署结果

下面的部署结果是,使用了外部的 PostgreSQL 和 Redis,并且采用 Ingress,以及禁止了 notary 的条件下的部署结果,因此可以看到部署的工作负载,是没有 Nginx/PostgreSQL/Redis/Notary。

1
2
3
4
5
6
7
8
9
# k get pods
NAME                                  READY   STATUS    RESTARTS   AGE
harbor-chartmuseum-75d79dbc9c-55tf9   1/1     Running   0          4h54m
harbor-core-6799b75b5-cjcdz           1/1     Running   0          4h54m
harbor-exporter-5f6c58c8c6-nzv8n      1/1     Running   0          4h54m
harbor-jobservice-667fdfcc68-9b55v    1/1     Running   2          4h54m
harbor-portal-7cbd596969-h4k2r        1/1     Running   0          4h54m
harbor-registry-5559d777d-j9f8h       2/2     Running   0          4h54m
harbor-trivy-0                        1/1     Running   0          4h54m

参考资料

  1. Harbor权威指南
警告
本文最后更新于 2022年2月26日,文中内容可能已过时,请谨慎参考。