基于Helm安装Harbor镜像仓库

1.使用Helm安装Harbor 创建Harbor的Namespace。 kubectl create namespace harbor 添加Harbor的Helm仓库 helm repo add harbor https://helm.goharbor.io helm repo update

1.使用Helm安装Harbor

创建Harbor的Namespace。

kubectl create namespace harbor

添加Harbor的Helm仓库

helm repo add harbor https://helm.goharbor.io
helm repo update

生成Helm的harbor的配置文件values.yaml

helm show values harbor/harbor > values.yaml

编辑values.yaml,主要考虑修改的一下几个部分:

  • 1.Ingress,域名和ssl证书的secret。
    • certSource: secret
    • tls.secretName: "harbor-wanna1314y-top-ssl"
  • 2.StorageClass(很多个地方)
  • 3.镜像仓库secret
  • 4.副本数。
  • 5.ingress的className(ingress.className)配置为nginx。
  • 6.如果通过了反向代理访问harbor,那么需要配置externalURL设置为域名。

下面是修改之后的Harbor的Chart配置文件:harbor-values-ukxd.yaml

需要注意的是:如果配置了externalURL属性,那么必须和expose.ingress.host.core保持一致。不然登录时会提示账号密码错误,控制台报错403,提示{"errors":[{"code":"FORBIDDEN","message":"CSRF token invalid"}]}

执行Harbor配置文件,创建Harbor资源。

helm install harbor harbor/harbor -n harbor -f values.yaml

如果后续需要更新配置的话,可以使用如下的命令执行。

helm upgrade harbor harbor/harbor -n harbor -f values.yaml

可以通过如下的命令,查看,都需要用到哪些镜像文件。

cat values.yaml | grep -C 2 repository

可以使用如下的命令,去删除Harbor相关资源

# 卸载harbor
helm uninstall harbor -n harbor

# 删掉PVC
kubectl delete pvc --all -n harbor

可以把这些镜像pull到本地,并上传到私有的镜像仓库。

docker pull goharbor/nginx-photon:v2.12.0
docker pull goharbor/harbor-portal:v2.12.0
docker pull goharbor/harbor-core:v2.12.0
docker pull goharbor/harbor-jobservice:v2.12.0
docker pull goharbor/registry-photon:v2.12.0
docker pull goharbor/harbor-registryctl:v2.12.0
docker pull goharbor/trivy-adapter-photon:v2.12.0
docker pull goharbor/harbor-db:v2.12.0
docker pull goharbor/redis-photon:v2.12.0
docker pull goharbor/harbor-exporter:v2.12.0

docker tag goharbor/nginx-photon:v2.12.0 127.0.0.1:84/goharbor/nginx-photon:v2.12.0
docker tag goharbor/harbor-portal:v2.12.0 127.0.0.1:84/goharbor/harbor-portal:v2.12.0
docker tag goharbor/harbor-core:v2.12.0 127.0.0.1:84/goharbor/harbor-core:v2.12.0
docker tag goharbor/harbor-jobservice:v2.12.0 127.0.0.1:84/goharbor/harbor-jobservice:v2.12.0
docker tag goharbor/registry-photon:v2.12.0 127.0.0.1:84/goharbor/registry-photon:v2.12.0
docker tag goharbor/harbor-registryctl:v2.12.0 127.0.0.1:84/goharbor/harbor-registryctl:v2.12.0
docker tag goharbor/trivy-adapter-photon:v2.12.0 127.0.0.1:84/goharbor/trivy-adapter-photon:v2.12.0
docker tag goharbor/harbor-db:v2.12.0 127.0.0.1:84/goharbor/harbor-db:v2.12.0
docker tag goharbor/redis-photon:v2.12.0 127.0.0.1:84/goharbor/redis-photon:v2.12.0
docker tag goharbor/harbor-exporter:v2.12.0 127.0.0.1:84/goharbor/harbor-exporter:v2.12.0

docker push 127.0.0.1:84/goharbor/nginx-photon:v2.12.0
docker push 127.0.0.1:84/goharbor/harbor-portal:v2.12.0
docker push 127.0.0.1:84/goharbor/harbor-core:v2.12.0
docker push 127.0.0.1:84/goharbor/harbor-jobservice:v2.12.0
docker push 127.0.0.1:84/goharbor/registry-photon:v2.12.0
docker push 127.0.0.1:84/goharbor/harbor-registryctl:v2.12.0
docker push 127.0.0.1:84/goharbor/trivy-adapter-photon:v2.12.0
docker push 127.0.0.1:84/goharbor/harbor-db:v2.12.0
docker push 127.0.0.1:84/goharbor/redis-photon:v2.12.0
docker push 127.0.0.1:84/goharbor/harbor-exporter:v2.12.0

需要注意的是:harbor-jobservice依赖harbor-core服务,harbor-core依赖db服务,因此可能会启动失败,得在db启动好之后kill掉重启。

如果db启动不成功,原因是database "postgres" does not exist的话,可以手动进入pg,去创建db。

psql -U postgres -d template1

# 创建db
CREATE DATABASE postgres;

接着,使用域名去打开Harbor,进入到如下的页面。

2f64ec43d9183ca09a31e57d138c30b7.png

使用账号admin,密码Harbor12345去登录Harbor,登录Harbor后记得修改密码。

登录之后,可以进入到下面的页面。

346990c015fd7fad668afdb18bbb7432.png

2. Harbor自动同步其他镜像仓库

Harbor可以配置自动同步其他的Habor(或者其他)仓库的镜像,可以进行仓库的迁移等工作。(同步期间很耗费CPU和内存资源)

需要在"仓库管理"处新增仓库地址,并填写对应的账号密码。

d60c80ac61db61a325f7b26aa96d9570.png

接着,需要在"复制管理"中"新建规则"。

158a46f6265cbf58f3890e92314d4dca.png

选择触发模式,我们这里直接选择手动的方式,接着就可以选择对应的复制任务,并点击复制按钮。

90f143ee65a76c2f8400441b4a1de9f0.png

如果遇到同步期间,出现PGSQL数据库挂掉的情况,原因在于机器的CPU和内存压力可能都会很大,导致PG的响应比较慢,导致探针也认为PG已经挂掉了,但是实际上只是PG很慢,并没有挂掉,可以将K8S当中配置的PG的探针去掉,别让K8S将PG去杀掉,不然同步一直不会成功。

Comment