在上一篇文章中我们介绍安装了helm和tiller server,两者用来作为k8s应用包管理的客户端提供命令行工具,以及作为服务端提供最终安装部署功能。这里我们介绍安装chartmuseum和helmpush,chartmuseum作为chart的私有仓库,helmpush作为插件工具来实现将chart推送到chart repo。当然作为chart repo,也不一定用chartmuseum,只要是web server就好,不过chartmuseum也属于helm项目,所以我们选择chartmuseum,这里对于chartmuseum采用linux systemd安装方式。另外,把chart推送到chart repo也不一定用helmpush,甚至用原始的curl https命令就好。同样helmpush也是属于helm项目的插件,所以我们选择使用它。对于实际应用,请根据自己的需求来选择chart repo和推送工具。
安装chartmuseum
对于chartmuseum我们利用之前文章介绍安装harbor时候的nfs存储,把chartmuseum的storage放在nfs上,所以我们这里会把chartmuseum安装在nfs的client所在的机器上。
nfs server创建共享目录
mkdir -p opt/share/helm-chartsls opt/share|grep helm

nfs client查看共享目录
ls mnt/share|grep helm

copy二进制文件
这里请提前下载好chartmuseum binary,我们使用0.9.0版本,下载有时候会很慢,甚至断掉,请科学上网或者搭个梯子。
cp chartmuseum usr/bin/whereis chartmuseumchartmuseum --version

创建配置目录:
在这里我们创建chartmuseum的配置目录,同时开启chartmusemu的双向ssl认证。所以请提前制作好相关证书,可以参考以前文章里制作docker server ssl证书。
mkdir -p etc/chartmuseumcp chartmuseum-server.crt etc/chartmuseumcp chartmuseum-server.key etc/chartmuseumcp ca.crt etc/chartmuseumls /etc/chartmuseum

创建配置文件:
chartmuseum的配置项有很多,这里不逐一介绍,有兴趣的同学可以看一下chartmuseum的配置文档。chartmuseum的github地址:
https://github.com/helm/chartmuseum
touch etc/chartmuseum/chartmuseum.confcat > etc/chartmuseum/chartmuseum.conf << EOFPORT="--port=4321"STORAGE="--storage=local"STORAGE_LOCAL_DIR="--storage-local-rootdir=/mnt/share/helm-charts"TLS_CERT="--tls-cert=/etc/chartmuseum/chartmuseum-server.crt"TLS_KEY="--tls-key=/etc/chartmuseum/chartmuseum-server.key"TLS_CA="--tls-ca-cert=/etc/chartmuseum/ca.crt"AGRS="--debug"EOFsource etc/chartmuseum/chartmuseum.conf

创建systemd unit文件
touch /usr/lib/systemd/system/chartmuseum.servicecat > usr/lib/systemd/system/chartmuseum.service <<EOF[Unit]Description=Helm Chartmuseum ServiceAfter=network.target network-online.targetWants=network-online.target[Service]Type=simpleEnvironmentFile=-/etc/chartmuseum/chartmuseum.confExecStart=/usr/bin/chartmuseum \$PORT \$STORAGE \$STORAGE_LOCAL_DIR \$TLS_CERT \$TLS_KEY \$TLS_CA \$AGRSRestart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.targetEOFsource /etc/chartmuseum/chartmuseum.confcat /usr/lib/systemd/system/chartmuseum.service


开启访问端口防火墙:
这里chartmuseum使用4321端口,所以请打开4321port的firewall,可以参考以前文章打开防火墙(例如docker安装文章里的开启docker server的访问端口防火墙)。
reload服务,设置开机启动并开启服务
systemctl daemon-reloadsystemctl enable chartmuseumsystemctl start chartmuseumsystemctl status chartmuseum

curl访问chartmuseum
curl https://172.20.11.41:4321/index.yaml \--cacert etc/chartmuseum/ca.crt \--key etc/chartmuseum/chartmuseum-server.key \--cert /etc/chartmuseum/chartmuseum-server.crt

用helm删除old repo并添加新的repo:
这里helm需要和chartmuseum通讯,而我们的chartmuseum开启了双向ssl认证,所以添加repo的时候需要指定client端相应的ca file,key file,cert file(请提前制作好相关证书并放置在相应目录里,可以参考以前文章里制作docker server ssl证书)。
helm repo listhelm repo remove localhelm repo listhelm repo add chart-repo https://172.20.11.41:4321/ --debug \--key-file /opt/sw/helm/chartmuseum-client.key \--cert-file /opt/sw/helm/chartmuseum-client.crt \--ca-file /opt/sw/helm/ca.crthelm repo list


安装helmpush
helmpush为二进制可执行文件,所以这里直接下载binary放到$PATH路径下可运行就好。
下载并copy二进制文件:
请提前下载安装包,这里我们使用0.7.1版本,在github下载有时候会很慢,甚至断掉,要科学上网或者搭个梯子。
mkdir -p /opt/sw/helm/helm-pushcp helm-push_0.7.1_linux_amd64.tar.gz /opt/sw/helm/helm-push/tar -xzvf /opt/sw/helm/helm-push/helm-push_0.7.1_linux_amd64.tar.gzcp ./bin/helmpush /usr/bin/whereis helmpush

查看helmpush帮助命令
helmpush --help

设置hemlpush环境变量:
helmpush是需要和chartmuseum通讯的,而我们的chartmuseum开启了双向ssl认证。所以在使用helmpush的时候需要指定client端相应的ca file,key file,cert file(请提前制作好相关证书并放置在相应目录里,可以参考以前文章里制作docker server ssl证书)。另外由上面的helmpush的帮助命令可以看到helmpush默认的ca,key,cert由环境变量$HELM_REPO_CA_FILE,$HELM_REPO_CERT_FILE,$HELM_REPO_KEY_FILE决定。我们这里将这些环境变量设置在/etc/profile里,这样就都可以被加载到了。
vi /etc/profilesource /etc/profileecho $HELM_REPO_CA_FILEecho $HELM_REPO_CERT_FILEecho $HELM_REPO_KEY_FILE


目前先写到这里,下一篇文章里我们继续介绍使用helm来发布k8s应用release。





