使用helm管理chart包,需要三个部门协作完成,都有哪三个部门呢?
1) 仓库,chartmuseum, 作为chart的存储仓库,一方面提供存储,一方面对外提供上传和下载, 其也包含两部分
服务器: 真正提供服务的;
客户端/命令行: 用来操作和设置服务器;
2)helm-push,专门用作上传chart包到仓库中
3) helm, 一方面可以访问仓库并从仓库中下载chart包,另一方面可以与自己的实际服务器tiller交互渲染chart包
安装
chartmuseum/ui
官方 https://github.com/chartmuseum/ui 推荐安装方式如下
git clone https://github.com/chartmuseum/ui.git
根据需要修改 docker-compose.yml 文件
[root@localhost ui]# cat docker-compose.yaml
version: '2.0'
services:ui:#build: ./image: harbor.jettech.com/library/chartmuseumui:latestenvironment:CHART_MUSEUM_URL: http://chartmuseum:8080ports:- 3000:8080chartmuseum:image: harbor.jettech.com/library/chartmuseum:v0.7.1ports:- 8080:8080volumes:- /service/server/heml/charts/repos:/chartsenvironment:PORT: 8080DEBUG: 1STORAGE: localSTORAGE_LOCAL_ROOTDIR: /charts
该配置文件主要信息如下:
构建了两个服务:ui 和 chartmuseum
ui 使用 build ./ 构建(docker build ./ ),即通过当前目录下的 Dockerfile 构建
ui 配置的后端接口路径是 http://chartmuseum:8080,其中 chartmuseum 是后台服务名,可以用IP代替
ui 启动在 3000 端口
chartmuseum 使用了 chartmuseum/chartmuseum:v0.7.1 版本
chartmuseum 暴露在 8080 端口
chartmuseum 将 chart 保存在本地 /service/server/heml/charts/repos:/charts 下。
chartmuseum 采用本地存储(local),存储路径是 /charts
启动
根据Docker 官方编排工具 docker-compose ,在 docker-compose.yaml 运行如下命令即可
docker-compose up
有错误的解决方案:
解决方案
分析错误日志,go.mod 没有找到,导致 go get 命令不能运行。其实是没有启用 go mod 。因此需要 在 Dockerfile 添加如下命令:# set Go env RUN go env -w GO111MODULE=auto
[root@localhost ui]# cat Dockerfile
#
# Stage 1
#
#FROM library/golang:1 as builder
FROM harbor.jettech.com/library/golang:1 as builder# set Go env
RUN go env -w GO111MODULE=auto# Godep for vendoring
RUN go get github.com/tools/godep# Recompile the standard library without CGO
RUN CGO_ENABLED=0 go install -a stdENV APP_DIR $GOPATH/src/github.com/chartmuseum/ui
RUN mkdir -p $APP_DIR
ADD . $APP_DIR# Compile the binary and statically link
RUN cd $APP_DIR && \GO111MODULE=auto CGO_ENABLED=0 godep go build -ldflags '-w -s' -o /chartmuseum-ui && \cp -r views/ /views && \cp -r static/ /static#
# Stage 2
#
FROM harbor.jettech.com/library/alpine:3.8
RUN apk add --no-cache curl cifs-utils ca-certificates \&& adduser -D -u 1000 chartmuseum
COPY --from=builder /chartmuseum-ui /chartmuseum-ui
COPY --from=builder /views /views
COPY --from=builder /static /static
USER 1000
ENTRYPOINT ["/chartmuseum-ui"]
[root@localhost ui]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97155833371a harbor.jettech.com/library/chartmuseum:v0.7.1 "/chartmuseum" 59 minutes ago Up 59 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp ui_chartmuseum_1
c11ba3126dae harbor.jettech.com/library/chartmuseumui:latest "/chartmuseum-ui" 59 minutes ago Up 59 minutes 0.0.0.0:3000->8080/tcp, :::3000->8080/tcp
- 向本地存储中添加chart包,创建索引,真正作为一个chart仓库对外提供服务
(1). 进入到存放chart包的路径下,可以手动放一些chart包,也可以通过某个helm-push工具(后面会说)
# cd /service/server/heml/charts/repos/
(2). 添加或删除chart包---
(3). 使用chartmuseum命令工具生成索引文件,之后也可以使用该命令重新生成一个索引文件到指定目录下,
helm客户端在访问仓库的时候就是使用改文件得到仓库中chart列表
#chartmuseum 工具可以在镜像中copy出来
[root@localhost ui]# docker cp 97155833371a:/chartmuseum chartmuseum
chartmuseum --gen-index --storage="local" --storage-local-rootdir=“/service/server/heml/charts/repos/"
加一个仓库:注意用的是后端8080这个不是前段3000
[root@localhost helm]# helm repo add chartmuseum http://172.16.10.1:8080
原理:
【chart仓库(chartmuseum)的工作原理】
存储库索引文件称为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中的包动态的更新。
--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 操作中。
【helm客户端中仓库信息的工作原理】
首先,一旦为helm客户端添加一个chart仓库, 则会在其本地创建一个该仓库chart包目录的索引文件,缺省在:/root/.cache/helm/repository 目录下~
一个xxx-index.yaml文件代表一个仓库,官方缺省仓库对应就是index.yaml文件
然后,对于download(pull命令)下来的chart包(.tgz格式),缺省也会放置在/root/.cache/helm/repository/目录下
chart仓库之创建-入库-使用(helm,helm-push,chartmuseum) - 爱码网
chartmuseum - WorldLink资源网
GitHub - chartmuseum/helm-push: Helm plugin to push chart package to ChartMuseum
第一种上传方式
helm push插件安装:
helm plugin install https://github.com/chartmuseum/helm-push
helm repo update的时候index-cache.yaml文件会更新,扫描下面必须是tgz格式的包更新到index-cache.yaml文件中。
[root@localhost repos]# ls /service/server/heml/charts/repos/
index-cache.yaml jettopro-eureka-0.1.0.tgz jettopro-eureka-0.2.0.tgz
此时search就可以看到了
[root@localhost helm]# helm search repo jettopro-eureka
NAME CHART VERSION APP VERSION DESCRIPTION
chartmuseum/jettopro-eureka 0.2.0 1.16.0 A Helm chart for Kubernetes
第二种上传方式API 需要后端chartmuseum端口开放出来
ChartMuseum的安装教程和基本配置_chartmuseum 安装_Li-boss的博客-CSDN博客
curl -X GET "chart=@mychart-0.1.0.tgz" http://localhost:8089/api/org1/repoa/charts
Helm | Chart仓库指南
helm package docs/examples/alpine/
$ mkdir fantastic-charts
$ mv alpine-0.1.0.tgz fantastic-charts/
$ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com
最后一条命令会用刚才创建的本地路径和远程仓库url构建一个index.yaml
文件放在给定的目录路径中。
现在你可以使用同步工具或手动上传chart和index文件到chart仓库中。如果使用的是Google Cloud Storage,使用gsutil客户端检查 示范工作流。针对于GitHub,你可以简单地将chart放在合适的目标分支中。
添加一个新的chart到已有仓库中
每次你想在仓库中添加一个新的chart时,你必须重新生成index。helm repo index
命令会完全无痕重建index.yaml
文件。只包括在本地找到的chart。
不过你可以使用--merge
参数增量添加新的chart到现有index.yaml
文件中(使用类似GCS的远程仓库时很有用)。执行 helm repo index --help
了解更多。
确保修订过的index.yaml
文件和chart都上传了,如果生成了源文件,也要上传。
与别人分享你的chart
准备好分享你的chart时,只需要告诉别人你的仓库地址就可以了。
他们会通过helm repo add [NAME] [URL]
命令将仓库添加到他们的客户端,并使用想引用仓库的任何名称。
helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
$ helm repo list
如果chart支持HTTP的基础验证,你也需要提供用户名和密码:
helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com --username my-username --password my-password $ helm repo list
注意: 如果不存在有效的index.yaml
就无法添加仓库
注意: 如果你的helm仓库使用了类似于自签名的证书,为了跳过CA认证,可以使用 helm repo add --insecure-skip-tls-verify ...
然后,你的用户就可以通过你的chart进行搜索。更新了仓库之后,他们可以使用helm repo update
命令获取最新的chart信息。
在内部 helm repo add
和 helm repo update
命令会检索index.yaml文件并将其存储在 $XDG_CACHE_HOME/helm/repository/cache/
目录中。这里是helm search
方法查找chart信息的位置。
总结
本文介绍了 Chartmuseum Web 客户端软件 Chartmuseum/Ui 及其安装。其中安装方式采用了docker-compose。且 ui 是使用 Dockerfile 编译的最新版本,chartmuseum 采用的是 chartmuseum/chartmuseum:v0.7.1 。
实际使用时,我们可以将 ui 和 chartmuseum 分别部署,且选用不同的可兼容版本。
假如我们临时编译一个 charmuseum-ui ,并采用 ghcr.io/helm/chartmuseum 最新版本搭建一个环境,可以通过如下命令完成:
# 编译 chartmuseum-ui(修改后的Dockferfile所在目录执行)
docker build .
# 启动 chartmuseum 后端
docker run --name chartmuseum -d -p 8080:8080 ghcr.io/helm/chartmuseum
# 启动前端 chartmuseum-ui
docker run --name chartmuseum-ui -d -p 3000:8080 -e CHART_MUSEUM_URL=http://localhost:8080 chartmuseum-ui