GitHub 是流行的代码仓库,可以直接托管静态文件,利用这个特性可以搭建应用仓库。

基于 GitHub 搭建自有应用仓库

根据 Helm 官方指南 编写应用,同时可浏览 Kubesphere 应用仓库已有的应用作为参考:官方应用位于 src/qingcloud 目录下,测试应用位于 src/experimental 目录下。

前提条件

创建一个 GitHub 仓库,比如创建一个示例仓库 https://github.com/FeynmanZhou/helm-repo-example,所有的应用包都可以存放在此处。

第一步:开发应用

1、参考 官方文档 安装 Helm 客户端。

2、打开命令行工具,初始化 Helm 客户端:

  1. helm init --client-only

3、根据 Helm 官方文档 创建应用。下面我们创建一个名为 mychart 的示例应用。

在命令行窗口初始化一个应用:

  1. cd helm-repo-example
  2. helm create mychart

此时会看到 Helm 工具帮我们生成了一个基于 Nginx 的应用(以模板文件组织):

  1. helm-repo-example/
  2. └── mychart/
  3. ├── Chart.yaml
  4. ├── values.yaml
  5. ├── templates/
  6. ├── Notes.txt # 用户执行 helm install 安装应用时显示的文字
  7. ├── deployment.yaml # 对应 k8s deployment(部署)的模板文件
  8. └── service.yaml # 对应 k8s service(服务)的模板文件
  9. └── ...

4、然后根据实际需要进行修改和开发。

第二步:打包应用

1、开发完成后,在目录 helm-repo-example 下把应用打包(准备上传):

  1. helm package mychart

2、打包完成后的目录结构如下:

  1. helm-repo-example/
  2. └── mychart-0.1.0.tgz # 可部署的应用包
  3. ├── mychart/
  4. ├── Chart.yaml
  5. ├── templates/
  6. └── service.yaml # 对应 k8s service(服务)的模板文件
  7. └── ...

第三步:打包应用

1、在目录 helm-repo-example 下利用 helm 命令生成索引文件 index.yaml:

  1. helm repo index .

2、最后的目录结构如下:

  1. helm-repo-example/
  2. ├── index.yaml # 可部署的应用包
  3. ├── mychart-0.1.0.tgz # 可部署的应用包
  4. ├── mychart/
  5. ├── Chart.yaml
  6. ├── templates/
  7. └── service.yaml # 对应 k8s service(服务)的模板文件
  8. └── ...

第四步:上传应用

把上面产生的所有文件都提交到 GitHub 仓库里,此处默认上传到 master 分支。

第五步:添加应用仓库

如果是第一次部署,把 GitHub 示例仓库 https 地址添加到 KubeSphere 就可以使用了。

以下简单说明如何将该 GitHub 仓库作为应用仓库添加至 KubeSphere,详见 添加应用仓库

1、在 「平台管理」→ 「平台设置」 的应用仓库下,点击添加应用仓库,输入示例仓库 https://raw.githubusercontent.com/FeynmanZhou/helm-repo-example/master 点击验证通过后再点击确定。

基于 GitHub 搭建自有应用仓库 - 图1

提示:获取 GitHub 仓库中文件的 Raw 地址可参考如下截图。

基于 GitHub 搭建自有应用仓库 - 图2

2、点击 「应用模板」,即可看到该仓库中的应用已成功导入至 KubeSphere,点击进入应用即可一键部署至指定项目中。

基于 GitHub 搭建自有应用仓库 - 图3

3、以下已成功将 mychart 应用部署至项目中,关于如何部署应用可参考 一键部署应用

基于 GitHub 搭建自有应用仓库 - 图4

自动化上传

上述第二〜四步可以自动化,解放手工操作并减少人工错误。可以利用现有的 CICD 工具(如 Jenkins)或开源平台(如 Travis CI)实现。大体流程如下:

  1. # 下载代码
  2. git clone https://github.com/FeynmanZhou/helm-repo-example
  3. # 拉取分支
  4. git fetch
  5. git checkout app/mychart
  6. # 初始化
  7. helm init --client-only
  8. # 打包
  9. helm package mychart
  10. # 更新索引
  11. helm repo index .
  12. # 提交
  13. git commit -a -m "[CI Build] Upload App"
  14. git push origin HEAD:app/mychart
  15. # Merge PR(人工或自动)