概述
目前随着 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
|
参考资料
- Harbor权威指南
警告
本文最后更新于 2022年2月26日,文中内容可能已过时,请谨慎参考。