基础知识和控制结构
- 模板基础:
- Helm Templates 使用 Go 模板语言。
- 它们定义了 Kubernetes 资源的配置文件,通常是 YAML 格式。
- Templates 可以包含静态内容和动态插入的值。
- Values 文件:
values.yaml
文件用于存储配置值,这些值在模板中被引用。- 可以通过命令行参数或不同的
values.yaml
文件覆盖这些值。
- 控制结构:
- 条件判断: 使用
if-else
结构根据条件输出不同的配置。 - 循环: 使用
range
来遍历列表或字典。 - 变量和函数: 支持定义局部变量和使用内置函数。
- 条件判断: 使用
使用技巧
- 参数化: 尽可能使模板参数化,以便通过不同的
values.yaml
文件重用。 - 模板函数: 利用 Helm 提供的模板函数,如
include
或default
。 - 维护清晰结构: 将复杂模板分解为更小的、可重用的片段。
- 注释: 在模板中添加注释,说明复杂的逻辑或重要的配置项。
使用案例
案例 1: 基本的 Deployment 模板
文件结构:
deployment.yaml
– 包含 Kubernetes Deployment 的定义。values.yaml
– 定义了一些默认的配置值。
deployment.yaml 示例:
代码语言:javascript复制apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.app.name }}
spec:
replicas: {{ .Values.app.replicas }}
template:
metadata:
labels:
app: {{ .Values.app.name }}
spec:
containers:
- name: {{ .Values.app.name }}
image: "{{ .Values.app.image }}"
ports:
- containerPort: {{ .Values.app.port }}
values.yaml 示例:
代码语言:javascript复制app:
name: myapp
image: myapp:1.0.0
replicas: 3
port: 80
案例 2: 使用条件和循环
目的:
- 根据不同的配置,启用或禁用某些 Kubernetes 资源。
模板示例:
代码语言:javascript复制{{ if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Values.app.name }}-ingress
spec:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ $.Values.app.name }}
port:
number: {{ $.Values.app.port }}
{{- end }}
{{ end }}
values.yaml 片段:
代码语言:javascript复制ingress:
enabled: true
hosts:
- host: example.com
- host: another.com
这些案例展示了 Helm Templates 的基本用法和一些常见的高级技巧。通过这些示例,你可以开始构建自己的 Helm Charts,并根据你的特定需求进行定制。