#云原生征文# *Helm搭建Harbor镜像仓库,这些坑我都帮你踩了 原创 精华

键客李大白
发布于 2022-5-21 16:27
浏览
1收藏

从业务场景看Harbor部署

如果没有特殊说明,将默认在kubernetes集群的master节点操作。

安装Helm

​ helm是命令行客户端工具,主要用于 Kubernetes 应用中的 chart 的创建、打包、发布和管理。
下载helm二进制包

$ wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
$ tar zxvf helm-v3.7.2-linux-amd64.tar.gz
$ cd linux-amd64/
$ cp  helm  /usr/local/bin/
``

**查看helm版本**

```shell
$ helm version
version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"clean", GoVersion:"go1.16.5"}

注:不同版本的helm查看版本命令有些区别,可以通过-h参数查看helm的参数。

添加Harbor 官方Helm Chart仓库

$ helm repo add harbor  https://helm.goharbor.io
"harbor" has been added to your repositories
$ helm repo  list                  # 查看添加的Chart
NAME  	URL                     
harbor	https://helm.goharbor.io

下载Chart包到本地

​ 因为需要修改的参数比较多,在命令行直接helm install比较复杂,我就将Chart包下载到本地,再修改一些配置,这样比较直观,也比较符合实际工作中的业务环境。

$ helm search repo harbor         # 搜索chart包
NAME         	CHART VERSION	APP VERSION	DESCRIPTION                                       
harbor/harbor	1.8.2        	2.4.2      	An open source trusted cloud native registry th...
$ helm pull harbor/harbor   # 下载Chart包
$ tar zxvf harbor-1.8.2.tgz   # 解压包

#云原生征文# *Helm搭建Harbor镜像仓库,这些坑我都帮你踩了-鸿蒙开发者社区

创建命名空间

​ 创建harbor命名空间,将Harbor相关的服务都部署在该命名空间中。

$ kubectl create namespace harbor

创建存储类(StorageClass)

​ Harbor的database和redis组件是为有状态服务,需要对Harbor数据做持久化存储。

本处基于NFS创建StorageClass存储类,NFS服务器和共享目录为:

  • NFS服务器地址: 192.168.2.212
  • NFS共享目录:/data/nfs/harbor
$ vim harbor-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: harbor-storageclass
  namespace: harbor
provisioner: example.com/nfs    # 指定外部存储供应商
$ kubectl apply  -f harbor-storageclass.yaml
$ kubectl -n harbor  get storageclass
NAME                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
harbor-storageclass   example.com/nfs   Delete          Immediate           false                  5s

修改values.yaml配置

重点!重点!重点! 踩坑最多的地方来了!

$ cd harbor    
$ ls
cert  Chart.yaml  conf  LICENSE  README.md  templates  values.yaml
$ vim  values.yaml
expose:
  type: nodePort         # 我这没有Ingress环境,使用NodePort的服务访问方式。   
  tls:
    enabled: false    # 关闭tls安全加密认证(如果开启需要配置证书)
...
externalURL: http://192.168.2.11:30002   # 使用nodePort且关闭tls认证,则此处需要修改为http协议和expose.nodePort.ports.http.nodePort指定的端口号,IP即为kubernetes的节点IP地址

# 持久化存储配置部分
persistence:
  enabled: true   # 开启持久化存储
  resourcePolicy: "keep"
  persistentVolumeClaim:        # 定义Harbor各个组件的PVC持久卷部分
    registry:          # registry组件(持久卷)配置部分
      existingClaim: ""
	  storageClass: "harbor-storageclass"           # 前面创建的StorageClass,其它组件同样配置
      subPath: ""
      accessMode: ReadWriteMany          # 卷的访问模式,需要修改为ReadWriteMany,允许多个组件读写,否则有的组件无法读取其它组件的数据
      size: 5Gi
    chartmuseum:     # chartmuseum组件(持久卷)配置部分
      existingClaim: ""
      storageClass: "harbor-storageclass"
      subPath: ""
      accessMode: ReadWriteMany
      size: 5Gi
    jobservice:    # 异步任务组件(持久卷)配置部分
      existingClaim: ""
      storageClass: "harbor-storageclass"    #修改,同上
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
    database:        # PostgreSQl数据库组件(持久卷)配置部分
      existingClaim: ""
      storageClass: "harbor-storageclass"
      subPath: ""
      accessMode: ReadWriteMany
      size: 1Gi
    redis:    # Redis缓存组件(持久卷)配置部分
      existingClaim: ""
      storageClass: "harbor-storageclass"
      subPath: ""
      accessMode: ReadWriteMany
      size: 1Gi
    trivy:         # Trity扫描插件(持久卷)配置部分
      existingClaim: ""
      storageClass: "harbor-storageclass"
      subPath: ""
      accessMode: ReadWriteMany
      size: 5Gi
...
harborAdminPassword: "Harbor12345"   # admin初始密ma,不需要修改
...
metrics:
  enabled: true         # 是否启用监控组件(可以使用Prometheus监控Harbor指标,具体见本专栏文章),非必须操作
  core:
    path: /metrics
    port: 8001
  registry:
    path: /metrics
    port: 8001
  jobservice:
    path: /metrics
    port: 8001
  exporter:
    path: /metrics
    port: 8001
###以下的trace为2.4版本的功能,不需要修改。

#云原生征文# *Helm搭建Harbor镜像仓库,这些坑我都帮你踩了-鸿蒙开发者社区

扩展:

如果不希望安装最新的版本,可以通过以下命令修改镜像版本号来安装指定的版本。

$ sed  -i   /tag/s/v2.4.2/v2.3.5/g  values.yaml    

执行helm install安装Harbor

$ helm install  harbor  .  -n harbor           # 将安装资源部署到harbor命名空间
NAME: harbor
LAST DEPLOYED: Mon Apr 11 23:32:18 2022
NAMESPACE: harbor
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for Harbor deployment to complete.
Then you should be able to visit the Harbor portal at http://192.168.2.11:30002
For more details, please visit https://github.com/goharbor/harbor

服务验证

​ 安装完成后,需要验证相关组件的服务是否正常!

$ kubectl -n harbor get pod -owide

可以看到各个组件的服务都正常!可以登录Harbor UI界面了。

登录Harbor UI界面

查看组件服务

# kubectl -n harbor get  svc
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
harbor                 NodePort    10.101.62.113    <none>        80:30002/TCP,4443:30004/TCP   5m39s

使用kubernetes任一节点主机IP和30002端口即可访问UI管理界面。

【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
Helm搭建Harbor镜像仓库,这些坑我都帮你踩.md 7.03K 10次下载
已于2022-5-21 16:28:54修改
4
收藏 1
回复
举报
回复
    相关推荐