chart仓库之创建-入库-使用(helm,helm-push,chartmuseum)
前言:
使用helm管理chart包,需要三个部门协作完成,都有哪三个部门呢?
1) 仓库,chartmuseum, 作为chart的存储仓库,一方面提供存储,一方面对外提供上传和下载, 其也包含两部分
服务器: 真正提供服务的;
客户端/命令行: 用来操作和设置服务器;
2)helm-push,专门用作上传chart包到仓库中
3) helm, 一方面可以访问仓库并从仓库中下载chart包,另一方面可以与自己的实际服务器tiller交互渲染chart包
一: chartmuseum的安装
0. 前言
chartmuseum的安装实际上是可以有多种方式的,常用的方式有
0. 前言
chartmuseum的安装实际上是可以有多种方式的,常用的方式有
- CLI,包括两种个,一种是完全源码安装,一种是手动下载二进制程序,然后直接放到系统目录下(本文选择的)
- Docker镜像方式的安装
-
chart包方式的安装。因为既然他最为一种自定义的chart包仓库,那么肯定是很helm合作的,所以他本身的安装也是可以利用helm安装
即helm的stable仓库中,是由chartmuseum的chart包的....
wxy:用这种方式的安装,应该就以为着是将其放到pod里面提供服务了吧....
官网文档/源码:https://github.com/helm/chartmuseum
1. 安装chartmuseum的命令行客户端
1). 首先windows上通过迅雷下载
https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum
2). 辗转拷贝到目标linux机器上
3). 安装
#chmod +x ./chartmuseum
#mv ./chartmuseum /usr/local/bin
#mv ./chartmuseum /usr/local/bin
4). 验证
#chartmuseum --version
#chartmuseum --version
2. 安装chartmuseum服务器
- 创建system 服务文件,即用systemctl来方便管理,文件中指定chartmuseum的配置文件
参考链接:https://www.jianshu.com/p/b31a091a4ef2
# vi /etc/systemd/system/chartmuseum.service [Unit] Description=chartmuseum Requires=network-online.target After=network-online.target [Service] EnvironmentFile=/etc/chartmuseum/chartmuseum.config User=root Restart=allways ExecStart=/usr/local/bin/chartmuseum $ARGS ExecStop=/usr/local/bin/chartmuseum step-down [Install] WantedBy=multi-user.target
- 配置启动参数
认证的账号和明码; 等等....
# vi /etc/chartmuseum/chartmuseum.config ARGS=\ --port=8080 \ --storage="local" \ --storage-local-rootdir="/var/lib/chartmuseum/chartstorage" \ ##helm chart包的底层存储介质为本地磁盘,路径为... --log-json \ --basic-auth-user=admin \ --basic-auth-pass="hengsheng123" \ --auth-anonymous-get ##可选,表示对于get操作,不需要认证
- 启动chartmuseum服务 # systemctl start chartmuseum # systemctl enable chartmuseum # systemctl status chartmuseum
- 向本地存储中添加chart包,创建索引,真正作为一个chart仓库对外提供服务
# cd /var/lib/chartmuseum/chartstorage
(2). 添加或删除chart包---
(3). 使用chartmuseum命令工具生成索引文件,之后也可以使用该命令重新生成一个索引文件到指定目录下,
helm客户端在访问仓库的时候就是使用改文件得到仓库中chart列表
# chartmuseum --gen-index --storage="local" --storage-local-rootdir="/var/lib/chartmuseum/chartstorage"
注: 目前还没确定这个命令是覆盖掉启动时配置的参数,还是增量设置,这个之后再研究
(4) 验证,找一个添加本仓库的helm客户端设备将创建的,详见下一个章节
# helm repo update
# helm search repo chartmuseum
# helm search repo chartmuseum
- 放开宿主机的安全策略
#systemctl stop firewalld.service
或者
#iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
之后,远程访问成功
【chart仓库(chartmuseum)的工作原理】
存储库索引文件称为index.yaml, 是根据storage中的chart包动态生成的,如果你想使用自己创建该文件,则自动生成的将被忽略;
注意: storage中的chart包必须是.tgz格式,否则storage backend不识别,即不会生成到index.yaml中。
存储库索引文件称为index.yaml, 是根据storage中的chart包动态生成的,如果你想使用自己创建该文件,则自动生成的将被忽略;
注意: storage中的chart包必须是.tgz格式,否则storage backend不识别,即不会生成到index.yaml中。
chartmuseum缺省会在内存类型的cache中存储index.yaml文件的内容,也可以通过设置将其offload到外部cache中。
一旦有index的请求过来,storage backend就会扫描当前storage中所有的chart包,然后和自己cache进行比对然后刷新并将内容返回给请求者。
当然,你也可以通过设置缓存间隔来周期性刷新index。他会基于storage中的包动态的更新。
当然,你也可以通过设置缓存间隔来周期性刷新index。他会基于storage中的包动态的更新。
--gen-index 这个命令参数可以扫描当前storage中的chart包,然后生成index.yaml并将其内容打印到标准输出上.
一旦index 文件重新生成,chartmuseum会在storage中保存一个状态文件称为 index-cache.yaml,用于cache优化。这个文件只在内部使用,但可以用于向simple storage迁移使用。
当有helm客户端执行 helm repo add chartmuseum http://localhost:8080 或者 helm repo update 时,实际都是向仓库发出了GET /index.yaml 请求
所以当你手动 add/remove 一个 .tgz 包 from storage时, 他会直接反映给 GET /index.yaml 操作中。
所以当你手动 add/remove 一个 .tgz 包 from storage时, 他会直接反映给 GET /index.yaml 操作中。
二。helm客户端的安装
3, 在源码包路径下新建一个目录叫做download,用来放置工具包,并解压
下载地址为:https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
0) # cd /home/wxy/helm-push/download
1) 解压工具包到目录下
# tar -xf helm-push_0.8.1_darwin_amd64.tar.gz
5,修改源码包中的安装脚本
0) 因为helm安装插件的命令是:
#helm plugin install /home/wxy/helm-push ----注意,这个一定要是绝对路径,实际上一般情况下这个往往是git路径
其原理是:
首先拉取源码包,然后读取/script/install_plugin.sh文件,最后安装
所以,因为网络的原因,为了让他不走寻常路,我们需要改一下这个文件
2)helm客户端查看(helm的安装见下另一个章节)
helm-push到的是"远端"仓库,所以,如果想在本地看的到,还需要本地刷新一些,获取远端仓库的索引文件
# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "chartmuseum" chart repository
Update Complete. ⎈ Happy Helming!⎈
【方式二】
https://www.cnblogs.com/Dev0ps/p/11258539.html
尽管我最开始实验没成功,我估计是因为plugin目录不对,换成/root/.local/share/helm/plugins,应该是对的
0. 这里安装的是helm v3
# tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
# mv linux-amd64/helm /usr/local/bin/helm
# helm version
# tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
# mv linux-amd64/helm /usr/local/bin/helm
# helm version
1,查看当前helm客户端可以与哪些仓库连接
# helm repo list
Error: no repositories to show
# helm repo list
Error: no repositories to show
2,将自建的chartmuseum仓库加入到helm的repo列表中
# helm repo add chartmuseum http://192.168.48.82:8080/ --username admin --password hengsheng123
"chartmuseum" has been added to your repositories
# helm repo list
NAME URL
chartmuseum http://192.168.48.82:8080/
# helm repo add chartmuseum http://192.168.48.82:8080/ --username admin --password hengsheng123
"chartmuseum" has been added to your repositories
# helm repo list
NAME URL
chartmuseum http://192.168.48.82:8080/
3. 更新远端仓库中的索引文件
# helm repo update
# helm repo update
4. 下载远程仓库中的chart包到本地(从argo的官方库中下载)
# helm pull argo/argo
【helm客户端中仓库信息的工作原理】
首先,一旦为helm客户端添加一个chart仓库, 则会在其本地创建一个该仓库chart包目录的索引文件,缺省在:/root/.cache/helm/repository 目录下~
一个xxx-index.yaml文件代表一个仓库,官方缺省仓库对应就是index.yaml文件
首先,一旦为helm客户端添加一个chart仓库, 则会在其本地创建一个该仓库chart包目录的索引文件,缺省在:/root/.cache/helm/repository 目录下~
一个xxx-index.yaml文件代表一个仓库,官方缺省仓库对应就是index.yaml文件
然后,对于download(pull命令)下来的chart包(.tgz格式),缺省也会放置在/root/.cache/helm/repository/目录下
最后,对于?????
三: helm-push工具的安装
helm-push的安装包含两部分:
1)负责安装的工具包(tar包),包含了安装脚本以及依赖,该脚本会去官方目录下载真正的源码进行呢编译然后安装;
2)真正的的业务源码包;
helm-push的安装包含两部分:
1)负责安装的工具包(tar包),包含了安装脚本以及依赖,该脚本会去官方目录下载真正的源码进行呢编译然后安装;
2)真正的的业务源码包;
【方式一】
1, 首先下载helm push的源码,直接在git hub上下载,下载地址是:
https://github.com/chartmuseum/helm-push
1, 首先下载helm push的源码,直接在git hub上下载,下载地址是:
https://github.com/chartmuseum/helm-push
这里源码的版本是:v0.8.1,这个很重要,因为后面会用到
2,找一个目录,然后解压,在这里,我的解压目录是/home/wxy/helm-push
3, 在源码包路径下新建一个目录叫做download,用来放置工具包,并解压
下载地址为:https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz
0) # cd /home/wxy/helm-push/download
1) 解压工具包到目录下
# tar -xf helm-push_0.8.1_darwin_amd64.tar.gz
注意:这个注意工具包和源码包不是一回事,他的内容是一些脚本和执行文件,可以看做是安装源码的工具
4,此时我的目录结构是这样的:
[root@node213 helm-push]# pwd
/home/wxy/helm-push
[root@node213 helm-push]# ll
...
drwxr-xr-x. 3 root root 93 4月 10 16:15 download
...
drwxr-xr-x. 2 root root 100 4月 10 16:07 scripts
...
[root@node213 helm-push]# ll download/
drwxr-xr-x. 2 root root 22 4月 10 16:15 bin
-rw-r--r--. 1 root root 9729851 4月 10 16:15 helm-push_0.8.1_linux_amd64.tar.gz
-rw-r--r--. 1 501 games 11357 12月 17 11:36 LICENSE
-rw-r--r--. 1 501 games 395 12月 17 11:52 plugin.yaml
[root@node213 helm-push]# pwd
/home/wxy/helm-push
[root@node213 helm-push]# ll
...
drwxr-xr-x. 3 root root 93 4月 10 16:15 download
...
drwxr-xr-x. 2 root root 100 4月 10 16:07 scripts
...
[root@node213 helm-push]# ll download/
drwxr-xr-x. 2 root root 22 4月 10 16:15 bin
-rw-r--r--. 1 root root 9729851 4月 10 16:15 helm-push_0.8.1_linux_amd64.tar.gz
-rw-r--r--. 1 501 games 11357 12月 17 11:36 LICENSE
-rw-r--r--. 1 501 games 395 12月 17 11:52 plugin.yaml
5,修改源码包中的安装脚本
0) 因为helm安装插件的命令是:
#helm plugin install /home/wxy/helm-push ----注意,这个一定要是绝对路径,实际上一般情况下这个往往是git路径
其原理是:
首先拉取源码包,然后读取/script/install_plugin.sh文件,最后安装
所以,因为网络的原因,为了让他不走寻常路,我们需要改一下这个文件
1)修改/script/install_plugin.sh文件,需要删除:
if [ "$(uname)" = "Darwin" ]; then
...
fi
...
fi
和
# Download with curl if possible
...
...
需要增加:
cp download/helm-push_${version}_linux_amd64.tar.gz releases/v${version}.tar.gz
cp download/helm-push_${version}_linux_amd64.tar.gz releases/v${version}.tar.gz
解析一下:原逻辑: 是构建一个下载路径,然后下载到releases目录下,再移动到对应的目录下
更改之后: 不再实时下载,而是将之前下载到本地的tar包直接复制到这条目录下
更改之后: 不再实时下载,而是将之前下载到本地的tar包直接复制到这条目录下
6,正式安装插件
#helm plugin install /home/wxy/helm-push
#helm plugin install /home/wxy/helm-push
坑:
# helm push -h
Error: fork/exec /root/.local/share/helm/plugins/helm-push/bin/helmpush: no such file or directory
[root@node213 wxy]# cd /root/.local/share/helm/plugins
[root@node213 plugins]# ll
lrwxrwxrwx. 1 root root 19 4月 10 16:06 helm-push -> /home/wxy/helm-push
# helm push -h
Error: fork/exec /root/.local/share/helm/plugins/helm-push/bin/helmpush: no such file or directory
[root@node213 wxy]# cd /root/.local/share/helm/plugins
[root@node213 plugins]# ll
lrwxrwxrwx. 1 root root 19 4月 10 16:06 helm-push -> /home/wxy/helm-push
原因: 因为之前有装过一回,但是安装后报错了,说tar包没获取到,但是软链接已经建立,所以再次安装说已经安装好了,就没理会
但是,就出现了错误,后来讲链接删除,重新安装,成功了,
另外,可以发现,helm的plugin目录对应的是/root/.local/share/helm/plugins,并不是网上有的说是/root/.helm/plugins/
并且,因为这个链接的存在,初始/home/wxy/helm-push目录还不能删除,所以我建议还是按照方式二来安装
但是,就出现了错误,后来讲链接删除,重新安装,成功了,
另外,可以发现,helm的plugin目录对应的是/root/.local/share/helm/plugins,并不是网上有的说是/root/.helm/plugins/
并且,因为这个链接的存在,初始/home/wxy/helm-push目录还不能删除,所以我建议还是按照方式二来安装
7,使用插件将chart包push 到仓库
# helm push argo chartmuseum
Pushing argo-0.7.3.tgz to chartmuseum...
Done.
# helm push argo chartmuseum
Pushing argo-0.7.3.tgz to chartmuseum...
Done.
8,验证push结果
1)http访问查看
curl http://192.168.48.213:8080
curl http://192.168.48.213:8080
1)http访问查看
curl http://192.168.48.213:8080
curl http://192.168.48.213:8080
2)helm客户端查看(helm的安装见下另一个章节)
helm-push到的是"远端"仓库,所以,如果想在本地看的到,还需要本地刷新一些,获取远端仓库的索引文件
# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "chartmuseum" chart repository
Update Complete. ⎈ Happy Helming!⎈
# helm search repo chartmuseum
NAME CHART VERSION APP VERSION DESCRIPTION
chartmuseum/argo 0.7.3 v2.6.1 A Helm chart for Argo Workflows
NAME CHART VERSION APP VERSION DESCRIPTION
chartmuseum/argo 0.7.3 v2.6.1 A Helm chart for Argo Workflows
wxy:搞了一下午,在没有网络的环境下,搭建了一个仓库,简直要喜极而泣了!!!!
【方式二】
https://www.cnblogs.com/Dev0ps/p/11258539.html
尽管我最开始实验没成功,我估计是因为plugin目录不对,换成/root/.local/share/helm/plugins,应该是对的
坑:
# helm push xxx
helm不认识push这个动作...
# helm push xxx
helm不认识push这个动作...