Helm 应用开发入门

KubeSphere 支持将应用以 Helm Chart 的形式上传部署到平台中,而 Nginx 是大家熟知的代理和负载均衡软件,比起 Traefik 来说功能更加强大,本篇文档就以 Nginx 的 Helm Chart 文件为例,介绍 Chart 的基本规则,演示如何通过 Helm Chart 应用开发规范准备一个应用并上传部署到 KubeSphere 平台。

准备 Helm 客户端工具

KubeSphere 已在 Installer 部署的机器上默认安装了 Helm 客户端工具,若您的个人环境还没有安装 Helm 客户端工具,请参考 Helm 安装文档

准备本地仓库

执行下列命令,在本地创建目录作为本地仓库。

  1. $ mkdir helm-repo
  2. $ cd helm-repo

创建应用

执行 helm create 创建一个名为 nginx 的文件夹且默认生成一个 nginx 基本的 yaml 文件模板和目录,通常情况下不建议修改生成的一级目录下文件和目录的命名。

  1. $ helm create nginx
  2. $ tree nginx/
  3. nginx/
  4. ├── charts
  5. ├── Chart.yaml
  6. ├── templates
  7. ├── deployment.yaml
  8. ├── _helpers.tpl
  9. ├── ingress.yaml
  10. ├── NOTES.txt
  11. └── service.yaml
  12. └── values.yaml
  13. 2 directories, 7 files

Chart.yaml 是用于描述 Chart 的基本信息,包括名称、API 和应用版本等,其中 appVersion 字段与 version 字段无关。这是一种指定应用程序版本的方法详见 Chart.yaml 文件

Chart.yaml 文件示例:

  1. apiVersion: v1
  2. appVersion: "1.0"
  3. description: A Helm chart for Kubernetes
  4. name: nginx
  5. version: 0.1.0

包含在 chart 内的默认 values 文件必须命名 values.yaml,可以为 chart 及其任何依赖项提供值。通过 values.yaml 文件提供的值可以从.Values模板中的对象访问。在部署 Helm Chart 类型的应用到 Kuberntes 运行环境时,支持在 UI 界面可以对 values.yaml 进行编辑配置。

values.yaml:

  1. # Default values for test.
  2. # This is a YAML-formatted file.
  3. # Declare variables to be passed into your templates.
  4. replicaCount: 1
  5. image:
  6. repository: nginx
  7. tag: stable
  8. pullPolicy: IfNotPresent
  9. nameOverride: ""
  10. fullnameOverride: ""
  11. service:
  12. type: ClusterIP
  13. port: 80
  14. ingress:
  15. enabled: false
  16. annotations: {}
  17. # kubernetes.io/ingress.class: nginx
  18. # kubernetes.io/tls-acme: "true"
  19. path: /
  20. hosts:
  21. - chart-example.local
  22. tls: []
  23. # - secretName: chart-example-tls
  24. # hosts:
  25. # - chart-example.local
  26. resources: {}
  27. # We usually recommend not to specify default resources and to leave this as a conscious
  28. # choice for the user. This also increases chances charts run on environments with little
  29. # resources, such as Minikube. If you do want to specify resources, uncomment the following
  30. # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  31. # limits:
  32. # cpu: 100m
  33. # memory: 128Mi
  34. # requests:
  35. # cpu: 100m
  36. # memory: 128Mi
  37. nodeSelector: {}
  38. tolerations: []
  39. affinity: {}

可根据 Helm 应用开发规范 编辑 nginx 目录下文件,编辑好后保存。

生成索引文件(可选)

在 KubeSphere 中,若添加 HTTP 或 HTTPS 协议的仓库,则需要预先在对象存储中上传索引文件 index.yaml,该文件由 Helm 客户端工具生成。若添加 S3 协议的仓库,在上传应用到仓库时将自动在对象存储中生成索引文件。在 nginx 上一级目录执行以下命令生成索引文件:

  1. $ helm repo index .
  2. $ ls
  3. index.yaml nginx

打包应用

回到 nginx 上级目录,执行打包命令,将生成一个 tgz 格式的压缩文件,即 nginx 应用配置包:

  1. $ helm package nginx
  2. $ ls
  3. nginx nginx-0.1.0.tgz

至此,应用配置包就已经准备完毕。

上传应用

接下来就可以通过开发者来上传应用到平台进一步测试、上传和部署应用到 KubeSphere 中。