Helm 开发者指南
您可以上传应用的 Helm Chart 至 KubeSphere,以便具有必要权限的租户能够进行部署。本教程以 NGINX 为示例演示如何准备 Helm Chart。
安装 Helm
如果您已经安装 KubeSphere,那么您的环境中已部署 Helm。如果未安装,请先参考 Helm 文档安装 Helm。
创建本地仓库
执行以下命令在您的机器上创建仓库。
mkdir helm-repo
cd helm-repo
创建应用
使用 helm create
创建一个名为 nginx
的文件夹,它会自动为您的应用创建 YAML 模板和目录。一般情况下,不建议修改顶层目录中的文件名和目录名。
$ helm create nginx
$ tree nginx/
nginx/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml
Chart.yaml
用于定义 Chart 的基本信息,包括名称、API 和应用版本。有关更多信息,请参见 Chart.yaml 文件。
该 Chart.yaml
文件的示例:
apiVersion: v1
appVersion: "1.0"
description: A Helm chart for Kubernetes
name: nginx
version: 0.1.0
当您向 Kubernetes 部署基于 Helm 的应用时,可以直接在 KubeSphere 控制台上编辑 values.yaml
文件。
该 values.yaml
文件的示例:
# 默认值仅供测试使用。
# 此文件为 YAML 格式。
# 对要传入您的模板的变量进行声明。
replicaCount: 1
image:
repository: nginx
tag: stable
pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: ""
service:
type: ClusterIP
port: 80
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
path: /
hosts:
- chart-example.local
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# 通常不建议对默认资源进行指定,用户可以去主动选择是否指定。
# 这也有助于 Chart 在资源较少的环境上运行,例如 Minikube。
# 如果您要指定资源,请将下面几行内容取消注释,
# 按需调整,并删除 'resources:' 后面的大括号。
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations: []
affinity: {}
请参考 Helm 规范对 nginx
文件夹中的文件进行编辑,完成编辑后进行保存。
创建索引文件(可选)
要在 KubeSphere 中使用 HTTP 或 HTTPS URL 添加仓库,您需要事先向对象存储上传一个 index.yaml
文件。在 nginx
的上一个目录中使用 Helm 执行以下命令,创建索引文件。
helm repo index .
$ ls
index.yaml nginx
备注
-
如果仓库 URL 是 S3 格式,您向仓库添加应用时会自动在对象存储中创建索引文件。
-
有关何如向 KubeSphere 添加仓库的更多信息,请参见导入 Helm 仓库。
打包 Chart
前往 nginx
的上一个目录,执行以下命令打包您的 Chart,这会创建一个 .tgz 包。
helm package nginx
$ ls
nginx nginx-0.1.0.tgz
上传您的应用
现在您已经准备好了基于 Helm 的应用,您可以将它上传至 KubeSphere 并在平台上进行测试。
另请参见
反馈
这篇文章对您有帮助吗?
通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知
感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。