Pods y PodTemplates
Esta parte de la Guía de Mejores Prácticas discute el formato de las secciones Pod y PodTemplate en los manifiestos de chart.
La siguiente lista (no exhaustiva) de recursos utilizan PodTemplates:
- Deployment
- ReplicationController
- ReplicaSet
- DaemonSet
- StatefulSet
Imágenes
Una imagen de contenedor debe usar un tag fijo o el SHA de la imagen. No debe
usar los tags latest, head, canary, u otros tags diseñados para ser
flotantes.
Las imágenes pueden definirse en el archivo values.yaml para facilitar el
cambio de imágenes.
image: {{ .Values.redisImage | quote }}
Una imagen y un tag pueden definirse en values.yaml como dos campos separados:
image: "{{ .Values.redisImage }}:{{ .Values.redisTag }}"
ImagePullPolicy
helm create establece el imagePullPolicy en IfNotPresent por defecto
haciendo lo siguiente en su deployment.yaml:
imagePullPolicy: {{ .Values.image.pullPolicy }}
Y en values.yaml:
image:
pullPolicy: IfNotPresent
De manera similar, Kubernetes establece por defecto el imagePullPolicy en
IfNotPresent si no está definido. Si desea un valor diferente a IfNotPresent,
simplemente actualice el valor en values.yaml a su valor deseado.
Los PodTemplates Deben Declarar Selectores
Todas las secciones de PodTemplate deben especificar un selector. Por ejemplo:
selector:
matchLabels:
app.kubernetes.io/name: MyName
template:
metadata:
labels:
app.kubernetes.io/name: MyName
Esta es una buena práctica porque establece claramente la relación entre el recurso y el pod.
Pero esto es aún más importante para recursos como Deployment. Sin esto, se utiliza el conjunto completo de etiquetas para seleccionar los pods coincidentes, y esto causará problemas si usa etiquetas que cambian, como versión o fecha de lanzamiento.