文章目录
https://helm.sh/zh/docs/intro/using_helm/
概念
Helm 是 Kubernetes 的包管理器
-
Chart
代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序、工具、服务所需的所有资源定义 -
Release
运行在 Kubernetes 集群中的 chart 的实例 -
Repository
是用来存放和共享 charts 的地方
cli命令
# 查找到公开可用的charts
helm search hub <chart>
# 从你所添加的仓库中查找chart
helm search repo <chart>
chart
- chart安装、删除
# 下载、不安装
helm pull <chartrepo/chartname>
# 安装一个 helm 包
helm install <release> <chartname> # 从 chart 仓库安装
helm install <release> <chartname.tgz> # 从 tgz 安装
# 追踪 release 的状态
helm list
helm status <release>
# 升级
helm upgrade
# 回滚
helm rollback
# 移除指定 release
helm uninstall <release>
- 制作chart
helm create <chartname>
# 打 tgz 包
helm package <chartname>
Chart 文件结构
chartname/
Chart.yaml # 包含了chart信息的YAML文件
charts/ # 包含chart依赖的其他chart
templates/ # 模板目录, 当和values 结合时,可生成有效的Kubernetes manifest文件
_helpers.tpl # 可复用的辅助模板
deployment.yaml # Kubernetes deployment模板
service.yaml # Kubernetes service模板
configmap.yaml
templates/NOTES.txt # 可选: 包含简要使用说明的纯文本文件
values.yaml # chart 默认的配置值
values.schema.json # 可选: 一个使用JSON结构的values.yaml文件
crds/ # 自定义资源的定义
LICENSE # 可选: 包含chart许可证的纯文本文件
README.md # 可选: 可读的README文件
Chart.yaml
必输
apiVersion: chart API 版本 (必需)
name: chart名称 (必需)
version: 语义化2 版本(必需)
dependencies: # # chart 依赖列表
- name: apache
version: 1.2.3
repository: https://example.com/charts
- name: mysql
version: 3.2.1
repository: https://another.example.com/charts
......
charts/ 依赖文件
helm dependency update
会使用你的Chart.yaml dependencies 依赖文件下载所有你指定的chart到你的charts/目录。
charts/
apache-1.2.3.tgz
mysql-3.2.1.tgz
templates/ 模板文件
所有模板文件存储在chart的 templates/ 文件夹。 当Helm渲染chart时,它会通过模板引擎遍历目录中的每个文件。
apiVersion: v1
kind: ReplicationController
metadata:
name: deis-database
namespace: deis
labels:
app.kubernetes.io/managed-by: deis
spec:
replicas: 1
selector:
app.kubernetes.io/name: deis-database
template:
metadata:
labels:
app.kubernetes.io/name: deis-database
spec:
serviceAccount: deis-database
containers:
- name: deis-database
image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }}
imagePullPolicy: {{ .Values.pullPolicy }}
ports:
- containerPort: 5432
env:
- name: DATABASE_STORAGE
value: {{ default "minio" .Values.storage }}
values.yaml 模板值
Values通过模板中.Values对象可访问的values.yaml文件
当用户提供自定义value时,这些value会覆盖chart的values.yaml文件中value。
imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "s3"
values.schema.json 模板值验证
crds/
Kubernetes的 CustomResourceDefinition(CRD)自定义资源类型。
Helm渲染chart流程
Helm渲染chart
把values.yaml导入模板,通过模板引擎遍历目录中的每个文件。渲染模板
收集模板的结果并发送给Kubernetes