Helm Chart 是 Helm 的包格式,它是一个预配置的资源集合,用于在 Kubernetes 上部署和管理应用程序。一个 Chart 可以被认为是 Kubernetes 资源的“配方”,它包含了部署应用所需的所有资源定义,如 Deployments、Services、PersistentVolumeClaims 等。
Chart 结构通常包括以下文件和目录:
Chart.yaml
:Chart 的描述文件,包含了 Chart 的名称、版本、描述等信息。values.yaml
:配置文件,默认值的集合,用户可以在这里设置用来覆盖 Chart 中默认配置的参数。templates/
:模板目录,包含 Kubernetes 资源的模板文件,这些文件描述了如何生成 Kubernetes 清单文件(YAML)。charts/
:依赖目录,可以存放 Chart 所依赖的其他 Charts。templates/NOTES.txt
:安装说明文件,可以包含 Chart 安装后的使用说明。templates/tests/
:测试文件目录,包含 Helm Chart 安装后可以运行的测试。使用场景:
helm test
命令来测试 Chart 是否按预期工作。假设你正在创建一个 Web 应用的 Helm Chart。
Chart.yaml 示例:
apiVersion: v2
name: my-web-app
description: A Helm chart for Kubernetes
version: 0.1.0
appVersion: "1.16.0"
values.yaml 示例:
replicaCount: 2
image:
repository: nginx
pullPolicy: IfNotPresent
tag: "stable"
service:
type: LoadBalancer
port: 80
templates/deployment.yaml 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.nameOverride | default .Chart.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Values.nameOverride | default .Chart.Name }}
template:
metadata:
labels:
app: {{ .Values.nameOverride | default .Chart.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
templates/service.yaml 示例:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.nameOverride | default .Chart.Name }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: 80
selector:
app: {{ .Values.nameOverride | default .Chart.Name }}
在这个简单的例子中,我们创建了一个 Chart,其中包含了一个部署和一个服务。在 values.yaml
中定义了默认值,这些值在 templates/deployment.yaml
和 `templates/service
.yaml中被引用。用户可以轻松更改
values.yaml` 文件中的值,或者在安装 Chart 时通过命令行参数覆盖这些值。