基于 GitHub 搭建自有应用仓库

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. └── ...

第四步:上传应用

上传应用到 KubeSphere 支持两种方式,第一种方法是直接将上述生成的 tgz 文件上传到企业空间下的应用模板,请参考 应用商店

第二种方法将上述的 Github 仓库作为应用仓库导入到 KubeSphere 中。以下介绍第二种方法。

第五步:添加应用仓库

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

1、使用企业空间管理员的账号,进入企业空间,进入 企业空间管理 → 应用仓库,点击 创建应用仓库

然后输入示例仓库 https://raw.githubusercontent.com/FeynmanZhou/helm-repo-example/master 点击验证通过后再点击确定。

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

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

2、使用普通用户的账号,进入企业空间下的任意一个项目中,进入 「应用负载」 → 「应用」,点击 部署新应用 → 来自应用模板,然后选择上一步添加的 GitHub repo,即可看到该仓库中的应用。

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

自动化上传

上述第二〜三步可以自动化,解放手工操作并减少人工错误。大体流程如下:

  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(人工或自动)