Middle
¿Cómo usar plantillas Helm?
sobes.tech AI
Respuesta de la IA
Las plantillas de Helm permiten generar dinámicamente manifiestos de Kubernetes basados en valores y funciones definidos.
Componentes principales de la plantilla:
- Plantillas (Templates): archivos YAML de manifiestos con sintaxis incorporada de Go template.
- Valores (Values): archivos YAML o parámetros de línea de comandos que contienen datos para rellenar las plantillas.
- Funciones (Functions): funciones integradas o personalizadas de Go template para lógica de procesamiento de valores y generación de cadenas.
Ejemplo de plantilla básica deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-{{ .Chart.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: {{ .Values.service.port }}
Ejemplo de archivo de valores values.yaml:
replicaCount: 1
image:
repository: nginx
tag: latest
service:
port: 80
Uso de ayudantes (helpers) para bloques de código reutilizables, generalmente en el archivo _helpers.tpl:
{{/*
Etiquetas comunes
*/}}
{{- define "mychart.labels" -}}
helm.sh/chart: {{ include "mychart.chart" . }}
{{ include "mychart.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Etiquetas de selector
*/}}
{{- define "mychart.selectorLabels" -}}
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Llamada a helper en la plantilla:
labels:
{{ include "mychart.labels" . | nindent 4 }}
Funciones principales del template de Helm en Go, frecuentemente usadas:
| Función | Descripción | Ejemplo |
|---|---|---|
include |
Inserta el contenido de otra plantilla. | {{ include "my.helper" . }} |
nindent |
Indenta la salida multilínea. | `{{ .Values.multiline |
quote |
Encierra la cadena en comillas. | `{{ .Values.someString |
default |
Establece un valor predeterminado. | `{{ .Values.replicas |
required |
Rechaza si falta un valor. | {{ required "Se requiere una contraseña de base de datos!" .Values.database.password }} |
toJson |
Convierte datos a cadena JSON. | `{{ .Values.config |
toYaml |
Convierte datos a cadena YAML. | `{{ .Values.config |
Control de espacios: - después de {{ y antes de }} elimina espacios en blanco.
{{- range .Values.items }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end -}}
Lógica condicional y bucles:
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
...
{{- end }}
{{- range $key, $value := .Values.configMapData }}
{{ $key }}: {{ $value | quote }}
{{- end }}
Pruebas de plantillas:
helm lint mychart # Verificación básica de sintaxis
helm template mychart --values mychart/values.yaml # Renderizado de plantilla con valores