chartmuseum charts仓库

使用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:latest
    environment:
      CHART_MUSEUM_URL: http://chartmuseum:8080
    ports:
      - 3000:8080
  chartmuseum:
    image: harbor.jettech.com/library/chartmuseum:v0.7.1
    ports:
    - 8080:8080
    volumes:
    - /service/server/heml/charts/repos:/charts
    environment:
      PORT: 8080
      DEBUG: 1
      STORAGE: local
      STORAGE_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 std

ENV 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值