使用Helm部署Harbor

Posted 品鉴初心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Helm部署Harbor相关的知识,希望对你有一定的参考价值。

使用Helm部署Harbor

Helm安装harbor

Harbor官网各版本部署文档有需要的同学可以关注下,本次安装使用Traefik暴露服务,存储使用nfs动态存储,证书使用自签证书,域名已做解析,当然你也可以使用本地host解析。

基本配置

$ helm repo add harbor https://helm.goharbor.io
$ helm search repo harbor/harbor --versions
$ helm pull harbor/harbor --version 1.7.2 --untar
expose:
   # 设置暴露服务的方式。这里选择 clusterIP 
  type: clusterIP
  tls:
    # 以secret的形式
    certSource: secret
    secret:
      # 如果你想使用自己的 TLS 证书和私钥,请填写这个 secret 的名称,这个 secret 必须包含名为 tls.crt 和 tls.key 的证书和私钥文件,如果没有设置则会自动生成证书和私钥文件。
      secretName: "tls-harbor"
      # 默认 Notary 服务会使用上面相同的证书和私钥文件,如果你想用一个独立的则填充下面的字段,注意只有类型是 ingress 的时候才需要。
      notarySecretName: "tls-harbor"

  clusterIP:
    # The name of ClusterIP service
    name: harbor
    # Annotations on the ClusterIP service
    annotations: 
    ports:
      # The service port Harbor listens on when serving with HTTP
      httpPort: 80
      # The service port Harbor listens on when serving with HTTPS
      httpsPort: 443
      # The service port Notary listens on. Only needed when notary.enabled
      # is set to true
      notaryPort: 4443

externalURL: https://harbor.devops.test.com

persistence:
  persistentVolumeClaim:
    registry:
      # 指定"storageClass",或者使用默认的 StorageClass 对象,设置成"-"禁用动态分配挂载卷
      storageClass: "managed-nfs-storage"
      # 存放镜像,根据自身需求设置存储大小,建议500Gi
      size: 10Gi
    chartmuseum:
      storageClass: "managed-nfs-storage"
    jobservice:
      storageClass: "managed-nfs-storage"
    database:
      storageClass: "managed-nfs-storage"
    redis:
      storageClass: "managed-nfs-storage"
    trivy: # 镜像漏扫
      storageClass: "managed-nfs-storage"

自签证书

关于自签证书生成,具体步骤可参考使用docker-compose部署最新版Harbor v2.3.2证书生成章节,这里不再重复叙述。

说明:如果后面需要更换证书,可直接将要更换的secret资源删除,然后再新创建即可,注意secret名字保持一致。

$ kubectl delete secret tls-harbor -n harbor
$ kubectl create secret tls tls-harbor --cert=tls.crt --key=tls.key -n harbor

部署harbor

$ kubectl create ns harbor
$ kubectl create secret tls tls-harbor --cert=tls.crt --key=tls.key -n harbor
$ cd harbor
$ helm install harbor -f wutf-values.yaml . -n harbor
# helm harbor
$ helm list -n harbor
# pod status
$ kubectl get pod -n harbor
# svc status
$ kubectl get svc -n harbor
# secret status
$ kubectl get secret -n harbor

访问 Harbor

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: harbor-dashboard-route
  namespace: harbor
spec:
  entryPoints:
  - websecure 
  routes:
  - match: Host(`harbor.devops.test.com`)  
    kind: Rule
    services:
      - name: harbor
        port: 443
  tls:
    secretName: tls-harbor
$ kubectl apply -f harbor-dashboard-route.yaml

最佳实践

创建用户

创建项目

不重启docker添加证书

在服务器上配置如下:

$ mkdir -p /etc/docker/certs.d/harbor.devops.test.com
$ cp tls.cert /etc/docker/certs.d/harbor.devops.test.com
$ cp tls.key /etc/docker/certs.d/harbor.devops.test.com
$ cp ca.crt /etc/docker/certs.d/harbor.devops.test.com
# 无需重启docker即可生效,无需添加 insecure-registries":["harbor.transsion.com"]
# 登入,账号是自己的域账号
$ docker login harbor.devops.test.com
# 登出
$ docker logout harbor.devops.test.com

镜像操作

# 拉取测试镜像busybox
$ docker pull busybox
# 更改标签
$ docker tag busybox harbor.devops.test.com/test/busybox:202207201642
# push image
$ docker push harbor.devops.test.com/test/busybox:202207201642
# pull image
$ docker pull harbor.devops.test.com/test/busybox:202207201642

参考文档

以上是关于使用Helm部署Harbor的主要内容,如果未能解决你的问题,请参考以下文章

k8s使用helm 3 部署harbor

Kubernetes部署高可用harbor(helm方式)

Kubernetes部署高可用harbor(helm方式)

[转帖]Helm 3 使用 harbor 作为仓库存储 charts

harbor helm仓库使用

Helm部署Harbor,实现高可用的镜像仓库(超详细分享)~后附踩坑记录