使用harbor作为chart仓库实现内网部署

使用harbor作为chart仓库实现内网部署

制作好的chart包可以传到chart仓库进行共享,chart仓库可以是公有仓库或者使用Harbor搭建的私有仓库。

本文使用的环境信息:

root@master1:~# kubectl get node
NAME      STATUS   ROLES           AGE   VERSION
master1   Ready    control-plane   22d   v1.28.2
master2   Ready    control-plane   22d   v1.28.2
master3   Ready    control-plane   22d   v1.28.2
worker1   Ready    <none>          22d   v1.27.1# helm 版本
root@master1:/tmp# helm version
version.BuildInfo{Version:"v3.15.2", GitCommit:"1a500d5625419a524fdae4b33de351cc4f58ec35", GitTreeState:"clean", GoVersion:"go1.22.4"}# harbor版本
root@master1:~# helm ls -n harbor
NAME    NAMESPACE     REVISION UPDATED                                 STATUS          CHART           APP VERSION
harbor  harbor        2        2024-07-13 15:36:40.772521934 +0800 CST deployed        harbor-1.15.0   2.11.0

关于chart仓库

chart仓库介绍

chart仓库是打包的chart存储和分享的位置。chart仓库由chart包和包含了仓库中所有chart索引的特殊文件index.yaml。 通常描述chart的index.yaml也托管在同一个服务器上作为来源文件。

基于OCI的注册中心

从Helm 3开始,可以使用具有 OCI支持的容器注册中心来存储和共享chart包。从Helm v3.8.0开始,默认启用OCI支持。

以下是几种chart可以使用的托管容器注册中心,都支持OCI,例如:

  • Amazon ECR
  • Azure Container Registry
  • Docker Hub
  • Google Artifact Registry
  • IBM Cloud Container Registry
  • JFrog Artifactory

同样的,harbor作为是一款云原生制品仓库,可以存储和管理容器镜像、Helm Chart 等 Artifact,同样启用了OCI支持。

本文使用harbor作为chart仓库。

上传chart到harbor

如果Harbor版本低于2.8,安装harbor时需要启用chartmuseum。

harbor启用helm chart仓库(harbor 2.8之前)

默认新版 harbor 不会启用 chart repository service,如果启用安装方式要添加一个参数 --with-chartmuseum

$ ./install.sh --with-chartmuseum

如果是后期修改配置文件,可以使用 ./prepare --with-chartmuseum 后,再 docker-compose up -d

启用后Harbor中有独立的Helm Charts页面。Charts支持UI上传、helm push两种上传chart的方式。

Harbor2.8(包括)之后管理Helm Charts

harbor版本大于等于2.8,按照下面的命令直接推送chart即可。Harbor中Charts与Image保存在相同目录下,没有单独的页面。

# 登录helm仓库
root@master1:~/harbor# helm registry login harbor.test.com --insecure
Username: admin
Password:
Login Succeeded# 提前在harbor中创建号harbor项目。上传不再支持UI界面,必须使用helm push
root@master1:~/hello# ls
app.py  Dockerfile  my-hello  my-hello-1.0.tgz
root@master1:~/hello# helm push my-hello-1.0.tgz oci://harbor.test.com/library/
Error: failed to do request: Head "https://harbor.test.com/v2/library/my-hello/blobs/sha256:0db1fb6272f773572edb9ebad8c7fb902a76166bf14d896d3790f2a82f524838": tls: failed to verify certificate: x509: certificate signed by unknown authority
# 加--insecure-skip-tls-verify跳过tls验证
root@master1:~/hello# helm push my-hello-1.0.tgz oci://harbor.test.com/library/ --insecure-skip-tls-verify
Pushed: harbor.test.com/library/my-hello:1.0
Digest: sha256:b3d7820d0e46450992aefb7480c49afe9aa345c296813b021eeb9034aa362ab3# 下载chart执行下面命令,命令可以从harbor界面复制
helm pull oci://harbor.test.com/library/my-hello --version 1.0 -insecure-skip-tls-verify

这样就实现了上篇文章中构建的chart上传到harbor仓库。

修改第三方chart重新打包推送到harbor

这里演示将harbor的官方chart从官方仓库下载后,修改镜像仓库地址,重新打包上传到私有仓库harbor,方便内部后续进行部署。

# 下载harbor官方的helm chart,这里可以换成其他chart进行测试
root@master1:~/harbor# helm repo add harbor https://helm.goharbor.io
root@master1:~/harbor# helm repo update
root@master1:~/harbor# helm pull harbor/harbor
root@master1:~/harbor# ls
harbor-1.15.0.tgz
root@master1:~/harbor# tar xf harbor-1.15.0.tgz
root@master1:~/harbor# cd harbor# 修改value.yaml中的镜像仓库为私有harbor
root@master1:~/harbor/harbor# ls
Chart.yaml  LICENSE  README.md  templates  values.yaml
root@master1:~/harbor/harbor# sed -i 's/repository: goharbor/repository: harbor.test.com\/harbor/g' values.yaml# 重新打包chart
root@master1:~/harbor/harbor# helm package .
Successfully packaged chart and saved it to: /root/harbor/harbor/harbor-1.15.0.tgz

将chart推送到harbor:

root@master1:~/harbor/harbor# helm push harbor-1.15.0.tgz oci://harbor.test.com/harbor --insecure-skip-tls-verify

拉取部署chart所需的容器镜像并重新打tag推送到harbor,该过程通过如下脚本进行:

# 脚本内容
root@master1:~/harbor# cat images-pull-push-2-harbor.sh
NAMESPACE="harbor"
kubectl get pods -n $NAMESPACE -o jsonpath="{range .items[*]}{.spec.containers[*].image}{'\n'}{end}" | sort |NAMESPACE="harbor"              # 命名空间
HARBOR_URL="harbor.test.com"    # harbor访问的域名
HARBOR_PROJECT="harbor"         # 镜像项目名称# 获取所有Pod的镜像
IMAGES=$(kubectl get pods -n $NAMESPACE -o jsonpath="{range .items[*]}{.spec.containers[*].image}{'\n'}{end}" | sort | uniq)# 登录Harbor
docker login $HARBOR_URL -u admin -p Harbor12345# 拉取镜像、重新tag并推送到Harbor
for IMAGE in $IMAGES; doIMAGE_NAME=$(echo $IMAGE | awk -F'/' '{print $NF}')NEW_TAG="$HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME"# 拉取原镜像docker pull $IMAGE# 重新tag镜像docker tag $IMAGE $NEW_TAG# 推送到Harbordocker push $NEW_TAG# 删除本地镜像docker rmi $IMAGEdocker rmi $NEW_TAG
done# 运行脚本
root@master1:~/harbor# sh images-pull-push-2-harbor.sh

最终在harbor的harbor项目下,同时存放了harbor的chart和部署所需的镜像。

chart部署验证

在另外一套k8s集群,验证上传到harbor的chart:

#下载chart
[root@k8s ~]# helm pull oci://harbor.test.com/harbor/harbor --version 1.15.0 --insecure-skip-tls-verify[root@k8s ~]# helm upgrade --install harbor harbor-1.15.0.tgz --namespace harbor --create-namespace \
>   --set expose.type=ingress \
>   --set expose.ingress.className=nginx \
>   --set expose.ingress.hosts.core=harbor.abc.com \
>   --set expose.ingress.hosts.notary=notary.abc.com \
>   --set externalURL=https://harbor.abc.com \
>   --set harborAdminPassword="Harbor12345" \
>   --set persistence.persistentVolumeClaim.registry.storageClass="openebs-hostpath" \
>   --set persistence.persistentVolumeClaim.jobservice.jobLog.storageClass="openebs-hostpath" \
>   --set persistence.persistentVolumeClaim.database.storageClass="openebs-hostpath" \
>   --set persistence.persistentVolumeClaim.redis.storageClass="openebs-hostpath" \
>   --set persistence.persistentVolumeClaim.trivy.storageClass="openebs-hostpath"

检查部署的harbor相关容器正常。

[root@k8s ~]# kubectl get pod -n harbor
NAME                                 READY   STATUS    RESTARTS        AGE
harbor-core-f647b8997-6sk6d          1/1     Running   1 (6m17s ago)   7m22s
harbor-database-0                    1/1     Running   0               7m22s
harbor-jobservice-6bc775ffb7-bcgn9   1/1     Running   2 (5m53s ago)   7m22s
harbor-portal-5d7876f8bf-wjxpn       1/1     Running   0               7m22s
harbor-redis-0                       1/1     Running   0               7m22s
harbor-registry-78988bfcc8-pbgwx     2/2     Running   0               7m22s
harbor-trivy-0                       1/1     Running   0               7m22s

测试安装chart正常,且会从harbor拉取镜像,这样就可以实现官方chart的内网部署。同理一切官方发布的chart都可以使用类似的过程修改重新打包后部署到自己的私有harbor仓库中。

相关资料

  1. Chart仓库指南
  2. 使用基于OCI的注册中心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react antd table拖拽

下载node包 npm install react-resizable -D npm install types/react-resizable --save-dev 定义一个公用组建 ResizableTable.tsx import { useEffect, useState } from "react"; import { Resizable } from "react-resizable"; import "./resize.s…

使用Python + Scrapy + Django构建企业级爬虫平台

引言 在大数据时代&#xff0c;信息就是力量。对于企业而言&#xff0c;掌握行业动态、竞品分析、市场趋势等关键数据&#xff0c;是决策制定的重要依据。然而&#xff0c;手动收集这些信息既费时又低效。因此&#xff0c;自动化数据采集变得至关重要。本文将向你展示如何使用…

专业条码二维码扫描设备和手机二维码扫描软件的区别?

条码二维码技术已广泛应用于我们的日常生活中&#xff0c;从超市结账到公交出行&#xff0c;再到各类活动的入场验证&#xff0c;条码二维码的便捷性不言而喻&#xff0c;而在条码二维码的扫描识别读取过程中&#xff0c;专业扫描读取设备和手机二维码扫描软件成为了两大主要工…

- vuex路由:

vuex vue的状态管理工具(状态就是数据的管理仓库 话语中级语法modules是vuex的高级用法。 react---redux(状态管理工具) vue2--vuex vue3--pinia(小菠萝) 核心概念(是有五个): 1.state:--存放数据 2.getters:计算属性的&#xff0c;通过筛选数组中大于2的&#xff0c;需要…

MySQL表操作(增删改查)

添加字段 ALTER TABLE 表名 ADD 字段名字 类型&#xff08;长度&#xff09;[COMMENT 注释] [自己给当前字段注释命名];修改字段 &#xff08;1&#xff09;仅仅修改指定字段的一些属性&#xff0c;不能重命名 ALTER TABLE 表名 字段名 新数据类型&#xff08;长度);&#x…

ssh升级

文章目录 ssh升级一、解包ssh、ssl二、更新安装ssl三、手动更新手动复制库文件四、创建符号链接五、更新库路径六、验证库文件七、设置库路径环境变量八、配置、编译、安装OpenSSH&#xff1a;意外&#xff1a;缺少 zlib 的开发库解决方法&#xff1a; 九、刷新ssh服务、查看ss…

力扣第九题

回文数 提示&#xff1a; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 代码展示&#…

用GPT 4o提高效率

**GPT-4o可以通过提高编程效率、优化工作流程、增强文档管理和知识分享等多方面帮助用户提升工作效率**。具体如下&#xff1a; 1. **代码生成与优化** - **快速原型开发**&#xff1a;程序员可以通过向GPT-4o描述需求或功能来生成初步的代码框架或关键函数&#xff0c;从而节省…

TCP流量控制是怎么实现的?

流量控制就是让发送方发送速率不要过快&#xff0c;让接收方来得及接收。利用滑动窗口机制就可以实施流量控制&#xff0c;主要方法就是动态调整发送方和接收方之间数据传输速率。 发送方维护一个窗口&#xff0c;表示可以发送但尚未被确认的数据量。接收方同样维护一个窗口&a…

C基础入门题:石头剪刀布

1.题目描述 石头剪子布&#xff0c;是一种猜拳游戏。起源于中国&#xff0c;然后传到日本、朝鲜等地&#xff0c;随着亚欧贸易的不断发展它传到了欧洲&#xff0c;到了近现代逐渐风靡世界。简单明了的规则&#xff0c;使得石头剪子布没有任何规则漏洞可钻&#xff0c;单次玩法…

网络安全法律框架更新:最新合规要求与企业应对策略

网络安全法律框架的最新更新 近期&#xff0c;中国的网络安全法律框架经历了重要的更新。2022年&#xff0c;《网络安全法》迎来了首次修改&#xff0c;这一修订主要是为了与《数据安全法》和《个人信息保护法》等新实施的法律进行衔接协调&#xff0c;完善法律责任制度&#x…

slf4j日志框架和logback详解

slf4j作用及其实现原理 SLF4J&#xff08;Simple Logging Facade for Java&#xff09;是一种日志框架的抽象层&#xff0c;它并不是一个具体的日志实现&#xff0c;而是一个接口或门面&#xff08;Facade&#xff09;&#xff0c;旨在为各种不同的日志框架提供一个统一的API。…

AI绘画Stable Diffusion 零基础入门 —AI 绘画原理与工具介绍,万字解析AI绘画的使用教程

大家好&#xff0c;我是设计师阿威 想要入门 AI 绘画&#xff0c;首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了&#xff0c;但在那时&#xff0c;生成的图像分辨率和内容都非常抽象。 直到近两年&#xff0c;AI 产出的图像…

防火墙nat基础实验

一&#xff0c;实验拓扑&#xff1a; 二&#xff0c;实验需求&#xff1a; 1&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的ht…

俄罗斯VK 平台广告投放的注意事项有哪些?

以下是为您制定适合 VK 平台的广告投放策略的一些建议&#xff1a; 市场调研 深入了解俄罗斯市场的需求、趋势和竞争情况。 分析目标受众的兴趣、行为和消费习惯&#xff0c;以确定最有潜力的细分市场。 明确目标 确定具体、可衡量的广告目标&#xff0c;例如增加品牌知名度…

Appium自动化测试系列: 2. 使用Appium启动APP(真机)

历史文章&#xff1a;Appium自动化测试系列: 1. Mac安装配置Appium_mac安装appium-CSDN博客 一、准备工作 1. 安卓测试机打开调试模式&#xff0c;然后使用可以传输数据的数据线连接上你的电脑。注意&#xff1a;你的数据线一定要支持传输数据&#xff0c;有的数据线只支持充…

蔚来汽车:拥抱TiDB,实现数据库性能与稳定性的飞跃

作者&#xff1a; Billdi表弟 原文来源&#xff1a; https://tidb.net/blog/449c3f5b 演讲嘉宾&#xff1a;吴记 蔚来汽车Tidb爱好者 整理编辑&#xff1a;黄漫绅&#xff08;表妹&#xff09;、李仲舒、吴记 本文来自 TiDB 社区合肥站走进蔚来汽车——来自吴记老师的演讲…

java数组之——了解十大排序算法(动画版)

详细的冒泡排序和快速排序请查看文章&#xff1a;java数组之冒泡排序、快速排序-CSDN博客https://blog.csdn.net/weixin_44554794/article/details/140361078 一、插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 八、计数排序 九、桶…

【2024_CUMCM】时间序列1

目录 概念 时间序列数据 时期和时点时间序列 数值变换规律 长期趋势T 季节趋势S 循环变动C 不规则变动I 叠加和乘积模型 叠加模型 相互独立 乘积模型 相互影响 注 spss缺失值填补 简单填补 五种填补方法 填补原则 1.随机缺失 2.完全随机缺失 3.非随机缺失…

半小时获得一张ESG入门证书【详细中英文笔记一】

前些日子&#xff0c;有朋友转发了一则小红书的笔记给我&#xff0c; 标题是《半小时获CFI官方高颜值免费证书 ESG认证》。这对考证狂魔的我来说&#xff0c;必然不能错过啊&#xff0c;有免费的羊毛不薅白不薅。 ESG课程的 CFI 官方网址戳这里&#xff1a;CFI 于是信心满满的…