Docker和Helm学习以及图解DockerRegistry与CharMuseum关系

本文介绍了在云原生时代,如何从yum/rpm的传统管理模式转变为使用镜像库和制品库管理软件,特别关注了镜像仓库(包括本地和云仓库)、制品库(如Helm包)与Kubernetes(K8S)的集成,以及Helm的作用和部署。
摘要由CSDN通过智能技术生成

前言
在裸机和虚机时代,(Linux上)我们会使用yum+rpm来管理软件的安装包。到了云原生时代,我们使用“制品库+镜像库”来管理软件。区别在于前者直接安装在裸机或虚机上,而后者是运行在一个个容器中。

    什么是镜像库?什么是制品库?

    通常我们将应用制作成镜像,然后以容器的方式运行,这里的镜像类似于应用的“模板”,容器就是镜像的“运行实例”,要统一管理这些镜像,就需要“镜像仓库”。一个完整的应用或系统可以由多个基础容器组成(一般都会有前台应用、后端服务和底层关系型数据库),我们将这些基础容器的编排过程抽象成一批yaml文件,然后打包成“制品”,然后由K8S调度。要管理这些制品,就需要制品库。

    镜像库和制品库,以及他们与K8S是什么关系呢?先看下方图片:

图1 镜像库&制品库与K8S的关系
下面我们逐个分析图中的组件。

镜像仓库
镜像仓库分为2种:本地仓库和云仓库。

本地仓库(图1中local)
如果想把应用限制在公司内部使用,可以将这些镜像存储在本地仓库中。“本地仓库”这个概念是相对于云仓库的。

    我们通过“docker pull”拉取过来的镜像默认存放在本机的/var/lib/docker路径(可在配置文件中修改)下,但这并不是“本地仓库”,因为你pull过来的镜像还不能被其他节点共享。想要被共享,就需要创建本地仓库。我们可以使用docker官方提供的registry搭建本地仓库,搭建过程比较简单,拿来测试非常方便。

    如果是企业级仓库,或者是对权限有要求的场景,可以使用 Habor 搭建本地仓库。它包含了registry,提供了Web管理界面(HaborUI),也集成了LDAP、定时调度等组件,功能全面,但是部署相对复杂,需要专业人士维护。这里给大家一张 Harbor架构 - 简书 图,其中的Docker Distribution就是registry。

图2 Habor2.0架构
本地仓库搭建好后,需要在内网环境中每个节点上的/etc/docker/daemon.json中配置好仓库地址,就可以通过“docker pull”命令拉取本地仓库的镜像了。同样,开发人员编写好Dockerfile、生成镜像之后,就可以将镜像push到本地仓库local中(图1中上方“docker push”环节)。

云仓库(图1中Cloud Registry)
当我们的镜像可以对外公开时,就可以选择存储到云仓库中,如DockerHub、阿里云镜像仓库,等等。我们也可以从这些可信源拉取镜像到本地运行。这些仓库一般都是由专业公司维护的,随取随用。我们可以在本地仓库中进行设置,定期将云仓库中的镜像同步到本地仓库中。

    如果想自己建立“云仓库”,与互联网上所有开发者共享,就可以在“本地仓库”基础上暴露服务端口即可。

注意:云仓库对安全性要求较高,要做好相应的安全、审核策略。

制品库
“制品”这个概念,我们可以理解为是一系列应用或组件的组合,是能支撑某个业务目标的完整解决方案。

            如前面提到的Habor,除了包含registry组件外,还包含了Redis、Postgre、HaborUI等等组件,如果我们一个个组件单独部署,势必会存在一些集成问题,部署效率也低。在K8S时代,就为我们提供了相应的解决方案:使用K8S专用的包管理工具helm,就可以完成Habor的一键部署。简单来说 ,helm包是由一堆yaml文件组成,作用是以模板+参数的方式将K8S的各种资源和容器镜像进行编排,然后提交给K8S进行调度。当helm包很多时,就需要仓库对这些包进行管理。目前常用的helm仓库是chartmuseum,部署也很方便,在docker环境下一条指令即可完成部署,如:

docker run -d
–restart=always
–name helmRegistry
-p 8899:8080
-e DEBUG=1
-e STORAGE=local
-e STORAGE_LOCAL_ROOTDIR=/charts
-v /home/charts:/charts
chartmuseum/chartmuseum:latest
说明:建议参考专业的文档来完成部署,本文不赘述。

在实践中是如何使用的呢?

    如图1所示(左下角“helm package”分支),当各组件的镜像都制作完成之后,开发人员就可以编写Chart.yaml和Value.yaml等文件,执行“helm package”生成Helm包 xxx.tgz。随后执行“helm cm-push”(也有helm push,这个是插件需要自己安装)将这个包推送到chartmuseum 中。此后,这个包就可以被多个K8S集群中共享。如Harbor的例子,集群A要安装Harbor,只需要在集群A的某个节点上执行“helm install”(前提是配置了helm仓库),这是节点就会到仓库中先拉取helm包,由K8S解析,根据这个包中指定的镜像信息,再到docker本地仓库中拉取镜像、启动。

    这里给出Habor的helm包结构,帮助大家理解:

图3 harbor-helm-1.8.0
说明:

一些常用的开源组件都有helm包,不需要我们自行编写。

我们在项目中只需要仿照这些开源组件的helm包,编写业务应用的helm。

    图中所示helm有v2和v3两个版本,区别是v2版本多了个Tiller服务端,由它负责与K8S进行交互。由于这种方式存在种种弊端,Helm3应运而生。它去掉了Tiller,由helm通过http协议直接与K8S的ApiServer交互,实现资源的调度。

HaborUI
最后再聊聊图1中的HaborUI。这是Habor自带的Web端,我们可以在这上面配置docker的镜像仓库和helm仓库,实现对镜像和制品库的展示和管理。
————————————————
版权声明:本文为CSDN博主「程序员柒叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/evilstar2015/article/details/125533726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值