Pular para o conteúdo principal
Versão: 3.19.0

Pods e PodTemplates

Esta parte do guia de boas práticas discute a formatação das seções Pod e PodTemplate nos manifestos de charts.

A seguinte lista (não exaustiva) de recursos utiliza PodTemplates:

  • Deployment
  • ReplicationController
  • ReplicaSet
  • DaemonSet
  • StatefulSet

Imagens

Uma imagem de container deve usar uma tag fixa ou o SHA da imagem. Não deve usar as tags latest, head, canary, ou outras tags flutuantes.

Imagens podem ser definidas no arquivo values.yaml para facilitar a troca de imagens.

image: {{ .Values.redisImage | quote }}

Uma imagem e uma tag podem ser definidas no values.yaml como dois campos separados:

image: "{{ .Values.redisImage }}:{{ .Values.redisTag }}"

ImagePullPolicy

helm create define a imagePullPolicy como IfNotPresent por padrão, fazendo o seguinte no seu deployment.yaml:

imagePullPolicy: {{ .Values.image.pullPolicy }}

E no values.yaml:

image:
pullPolicy: IfNotPresent

Da mesma forma, o Kubernetes assume por padrão a imagePullPolicy como IfNotPresent se ela não for definida. Se você quiser um valor diferente de IfNotPresent, simplesmente atualize o valor em values.yaml para o valor desejado.

PodTemplates Devem Declarar Selectors

Todas as seções de PodTemplate devem especificar um selector. Por exemplo:

selector:
matchLabels:
app.kubernetes.io/name: MyName
template:
metadata:
labels:
app.kubernetes.io/name: MyName

Esta é uma boa prática porque torna explícita a relação entre o conjunto de workload e o pod.

Mas isto é ainda mais importante para conjuntos como Deployment. Sem isso, o conjunto inteiro de labels é usado para selecionar pods correspondentes, e isso pode falhar se você usar labels que mudam, como versão ou data de lançamento.