当前位置: 首页 > news >正文

kubernetes 案例:基于 Helm 部署 Harbor

 

 

kubernetes 案例:基于 Helm 部署 Harbor

 

https://goharbor.cn/docs/2.13.0/install-config/harbor-ha-helm/
https://artifacthub.io/packages/helm/harbor/harbor

实现流程
使用helm将harbor部署到kubernetes集群
使用ingress发布到集群外部
使用 PVC 持久存储

 

范例:默认安装

#安装前准备
#ingress controller 基于nginx实现
#metallb
#SC名称为sc-nfs,并设为默认的SC

 

[root@master1 ~]# kubectl get sc
NAME               PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
sc-nfs (default)   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  6d7h

 

[root@master1 ~]# kubectl get ingressclasses.networking.k8s.io  
NAME    CONTROLLER             PARAMETERS   AGE
nginx   k8s.io/ingress-nginx   <none>       4d19h

 

#添加仓库配置

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

helm repo list

#在repo中搜索

helm search repo harbor

#下载Chart,查看内容

helm pull harbor/harbor

[root@master1 helm]# ls -l harbor-1.19.1.tgz  
-rw-r--r-- 1 root root 54222 May 30 22:51 harbor-1.19.1.tgz

 

tar tf harbor-1.19.1.tgz 

#使用默认安装,第一个harbor表示repo仓库名,第二个harbor表示chart名,此方式如果没有配置默认的
SC,会因为缺少持久化存储配置导致pending

helm install myharbor harbor/harbor

#修改ingressClass

kubectl edit ingress myharbor-ingress 

spec: #添加下面一行ingressClassName: nginx

 

[root@master1 helm]# kubectl get ingress    
NAME               CLASS   HOSTS                ADDRESS        PORTS     AGE
myharbor-ingress   nginx   core.harbor.domain   192.168.3.10   80, 443   94s

 

#域名解析core.harbor.domain --> 192.168.3.10

 

#默认值,用户名密码admin/Harbor12345
#浏览器访问默认域名

https://core.harbor.domain/

 

#卸载

helm uninstall myharbor

 

范例:定制安装

#安装前准备
#ingress controller 基于nginx实现
#metallb
#SC名称为sc-nfs

 

#定制配置
#生成配置文件

helm show values harbor/harbor > harbor-values.yaml

#修改配置文件

vim harbor-values.yaml

 

expose:type: ingresstls:  enabled: true    certSource: autoingress:  hosts:    core: harbor.ming.org     #指定harbor访问的域名    notary: notary.org   #公证人,用于Docker image 签名和认证,开发者在发布镜像后
使用 Notary 进行签名,并发布签名信息。运维团队在拉取镜像时使用 Notary 来验证镜像的签名,确保其
没有被篡改  controller: default  className: "nginx"                      #新版用法,添加此行,指定ingress  annotations:     kubernetes.io/ingress.class: "nginx"  #添加此行,指定ingress,旧版使用
ipFamily:ipv4:  enabled: trueipv6:  enabled: false
externalURL: https://harbor.ming.org   #指定harbor访问的域名,和前面域名要一致
# 持久化存储配置部分,如果设置storageclass是默认值,下面可不修改
persistence:enabled: true resourcePolicy: "keep"persistentVolumeClaim:                # 定义Harbor各个组件的PVC持久卷  registry:                           # registry组件(持久卷)    storageClass: "sc-nfs"            # 前面创建的StorageClass,其它组件同样配置,如
果设置默认storageClass,可以不用配置    accessMode: ReadWriteMany         # 卷的访问模式,需要修改为ReadWriteMany    size: 5Gi  chartmuseum:                        # chartmuseum组件(持久卷)    storageClass: "sc-nfs"    accessMode: ReadWriteMany    size: 5Gi  jobservice:    jobLog:      storageClass: "sc-nfs"         #如果设置默认storageClass,可以不用配置      accessMode: ReadWriteOnce      size: 1Gi    scanDataExports:      storageClass: "sc-nfs"      accessMode: ReadWriteOnce      size: 1Gi  database:                            # PostgreSQl数据库组件    storageClass: "sc-nfs"             #如果设置默认storageClass,可以不用配置    accessMode: ReadWriteMany    size: 2Gi  redis:    # Redis缓存组件    storageClass: "sc-nfs"           #如果设置默认storageClass,可以不用配置    accessMode: ReadWriteMany    size: 2Gi  trivy:         # Trity漏洞扫描    storageClass: "sc-nfs"           #如果设置默认storageClass,可以不用配置    accessMode: ReadWriteMany    size: 1Gi
harborAdminPassword: "123456"

 

#创建名称空间(可选)

kubectl create namespace harbor

 

#安装Harbor,指定release为myharbor,可以自动创建namespace

helm install myharbor -f harbor-values.yaml harbor/harbor -n harbor --create-namespace
#查看

helm list -n harbor

 

[root@master1 helm]# kubectl get svc -n harbor
NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
myharbor-core         ClusterIP   10.101.229.163   <none>        80/TCP              3m2s
myharbor-database     ClusterIP   10.110.223.99    <none>        5432/TCP            3m2s
myharbor-jobservice   ClusterIP   10.99.18.34      <none>        80/TCP              3m2s
myharbor-portal       ClusterIP   10.98.188.235    <none>        80/TCP              3m2s
myharbor-redis        ClusterIP   10.98.78.247     <none>        6379/TCP            3m2s
myharbor-registry     ClusterIP   10.111.62.135    <none>        5000/TCP,8080/TCP   3m2s
myharbor-trivy        ClusterIP   10.98.6.183      <none>        8080/TCP            3m2s

 

[root@master1 helm]# kubectl get ingress   -n harbor                             
NAME               CLASS   HOSTS             ADDRESS        PORTS     AGE
myharbor-ingress   nginx   harbor.ming.org   192.168.3.10   80, 443   5m2s

 

[root@master1 helm]# kubectl get pod -n harbor -o wide                           
NAME                                   READY   STATUS    RESTARTS         AGE    IP             NODE        NOMINATED NODE   READINESS GATES
myharbor-core-5d7949f87-ldp95          1/1     Running   11 (8m37s ago)   48m    10.244.2.100   node2.org   <none>           <none>
myharbor-core-749dbf66c4-bmmj5         0/1     Running   0                4s     10.244.2.103   node2.org   <none>           <none>
myharbor-database-0                    1/1     Running   0                6m7s   10.244.2.102   node2.org   <none>           <none>
myharbor-jobservice-7cd9fc494d-z69w9   1/1     Running   3 (2m55s ago)    21m    10.244.1.110   node1.org   <none>           <none>
myharbor-portal-7d66b7896d-gqdmg       1/1     Running   0                48m    10.244.2.99    node2.org   <none>           <none>
myharbor-redis-0                       1/1     Running   0                76m    10.244.1.107   node1.org   <none>           <none>
myharbor-registry-746f87566c-fnr52     2/2     Running   0                48m    10.244.1.109   node1.org   <none>           <none>
myharbor-trivy-0                       1/1     Running   0                76m    10.244.1.106   node1.org   <none>           <none>

 

[root@master1 helm]# kubectl get pvc -n harbor 
NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
data-myharbor-redis-0               Bound    pvc-a27b7cb0-7573-434c-aef6-f0854a9be208   1Gi        RWO            sc-nfs         <unset>                 77m
data-myharbor-trivy-0               Bound    pvc-724b3ecf-af2f-4d77-b1ef-311fe5c16df3   5Gi        RWO            sc-nfs         <unset>                 77m
database-data-myharbor-database-0   Bound    pvc-bbf96c51-1c43-46b8-b14b-e2f956672d19   1Gi        RWO            sc-nfs         <unset>                 77m
myharbor-jobservice                 Bound    pvc-e8c92c54-393d-4239-bbaa-0ace5e34e530   1Gi        RWO            sc-nfs         <unset>                 77m
myharbor-registry                   Bound    pvc-7c9331a0-bb5b-4cf1-911d-367d609fb42d   5Gi        RWO            sc-nfs         <unset>                 77m

 

root@master1 helm]# kubectl get pv -n harbor 
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                       STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-293c769e-5435-4eab-ac98-82ed4a481378   5Gi        RWO            Delete           Bound    default/myharbor-registry                   sc-nfs         <unset>                          95m
pvc-2bb036fa-e565-4347-ab16-f56f61e90424   1Gi        RWO            Delete           Bound    default/database-data-myharbor-database-0   sc-nfs         <unset>                          95m
pvc-2e6411c2-39fd-4b31-a42c-074f28db0782   1Gi        RWO            Delete           Bound    default/myharbor-jobservice                 sc-nfs         <unset>                          95m
pvc-43a9bdcf-d837-4d0f-ac04-830dc0988136   5Gi        RWO            Delete           Bound    default/data-myharbor-trivy-0               sc-nfs         <unset>                          95m
pvc-724b3ecf-af2f-4d77-b1ef-311fe5c16df3   5Gi        RWO            Delete           Bound    harbor/data-myharbor-trivy-0                sc-nfs         <unset>                          77m
pvc-7c9331a0-bb5b-4cf1-911d-367d609fb42d   5Gi        RWO            Delete           Bound    harbor/myharbor-registry                    sc-nfs         <unset>                          77m
pvc-9a264bad-82c1-41fe-aa8a-a30b31e599b9   1Gi        RWO            Delete           Bound    default/data-myharbor-redis-0               sc-nfs         <unset>                          95m
pvc-a27b7cb0-7573-434c-aef6-f0854a9be208   1Gi        RWO            Delete           Bound    harbor/data-myharbor-redis-0                sc-nfs         <unset>                          77m
pvc-bbf96c51-1c43-46b8-b14b-e2f956672d19   1Gi        RWO            Delete           Bound    harbor/database-data-myharbor-database-0    sc-nfs         <unset>                          77m
pvc-e8c92c54-393d-4239-bbaa-0ace5e34e530   1Gi        RWO            Delete           Bound    harbor/myharbor-jobservice                  sc-nfs         <unset>                          77m

 

 

 

 

#使用用户名密码:admin/123456登录验证
#如果不改密码:默认是Habor12345
#域名解析将harbor.ming.org--》IP
#浏览器访问:
http://harbor.ming.org

 

d75ab5044c8eb81d5caacad5c4491619

 

c4d689ac81d17f90dd428489d2200d78

 

 

#删除

helm delete myharbor -n harbor

 

 

 

 

http://www.zskr.cn/news/1430973.html

相关文章:

  • NPN晶体管多谐振荡器:从RC定时到LED交替闪烁的电路设计与实践
  • 陕西 RAG 权重调整技术对于 GEO 优化的深度调查:企来客逆 RAG 技术升级真相揭示
  • Claude Code 迎来重磅更新!v2.1.156 v2.1.157 双版本发布:本地插件免市集加载、多 Worktree 自由切换与大波 Bug 修复
  • 从零打造可调光LED台灯:电路设计、仿真与焊接实战指南
  • 一个人写了一套店群矩阵自动化软件:我是如何干掉繁琐切号流程与并发内存泄漏的
  • 朱光亚与一个民族最深沉的精神底色(潜龙在渊)
  • 如何快速掌握MoviePilot批量重命名:完整操作指南与实战技巧
  • MapLibre GL JS第31课:添加实时数据
  • 039、卷积模块替换实验:GhostConv、DSConv、DynamicConv 的精度-速度权衡
  • Vue3日期时间选择器终极指南:如何在5分钟内构建现代化表单界面
  • Display Driver Uninstaller:彻底解决显卡驱动残留问题的系统管理员必备工具
  • 【新手保姆级教程】OpenClaw v2.7.8 一键安装教程,Windows 环境快速部署(包含安装包)
  • 拆解Linux 0.11的键盘驱动:从‘按回车’到‘读字符’的底层发生了什么?
  • Qt圆角窗口的两种实现方案详解
  • 基于波前编码的红外系统焦深延拓特性解析方案【附代码】
  • 实战测试10款降AI率工具:找到导师推荐的“无痕降AIGC”终极方案
  • 2026年Q2精选:德州宁津实木定制高评价服务商深度解析 - 2026年企业资讯
  • 2026兰州双向土工格栅厂家评测:兰州防水土工布厂家、兰州防水板、兰州隧道防水板、土工布批发、土工格栅价格、甘肃hdpe土工膜选择指南 - 优质品牌商家
  • 6款论文AI智能降重工具横评:AI率秒归安全区,学生党狂喜款
  • 钢化玻璃风斑检测仪厂家排行:钢化玻璃自爆缺陷检测仪、钢化玻璃风斑应力检测仪、防水板/止水带测厚仪、防水板止水带测厚仪选择指南 - 优质品牌商家
  • Win11美化党进阶指南:如何用StartAllBack只改任务栏,同时保留原生开始菜单的文件夹功能?
  • 隔振橡胶特性表征与橡胶悬架结构优化方案【附仿真】
  • 如何快速配置Jellyfin Android TV:5个专业技巧打造完美家庭影院体验
  • Agent+电子病历:病史整理、结构化录入与摘要生成如何落地
  • Mermaid Live Editor终极指南:免费在线图表编辑器的完整使用教程
  • HelloCard 网页贺卡生成器 —— 一个第一次发帖的萌新,用华为云码道(CodeArts)2 小时造了一张能转发的“网页祝福“
  • Steam游戏《Turing Complete》通关笔记:手把手教你从逻辑门到可编程CPU的完整搭建流程
  • 2类安全帽目标检测数据集(工业安全帽/安全帽)| 3000张YOLO安全生产监测数据集 适用于智慧工地、工业安防与目标检测研究
  • 27考研刘晓燕资源
  • BilibiliDown终极指南:三步快速下载B站高清视频的免费工具