पाठ 8 / 25

Scaffolding with helm create

Generate a starter chart and understand the Deployment template it produces.

A starter chart to learn from

helm create NAME generates a working chart for a generic web app: a Deployment, Service, ServiceAccount, optional Ingress and HorizontalPodAutoscaler, a NOTES.txt, a connection test under templates/tests/, and _helpers.tpl with named templates for names and labels. It is a good learning tool and a reasonable starting point, but trim what you do not need: unused templates and values become confusing configuration surface. Read the generated Deployment closely; it shows most templating patterns you will use: values lookups (.Values.replicaCount), helpers (include "shop-api.fullname" .), defaults (default .Chart.AppVersion), conditional blocks (if not .Values.autoscaling.enabled) and YAML embedding with toYaml and nindent.

Excerpt of the generated deployment.yaml

Replicas are omitted when the HPA manages scaling; the image tag falls back to appVersion.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "shop-api.fullname" . }}
  labels:
    {{- include "shop-api.labels" . | nindent 4 }}
spec:
  {{- if not .Values.autoscaling.enabled }}
  replicas: {{ .Values.replicaCount }}
  {{- end }}
  selector:
    matchLabels:
      {{- include "shop-api.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "shop-api.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          ports:
            - containerPort: {{ .Values.service.port }}
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

A furnished show flat

helm create hands you a furnished show flat. It is useful for seeing how rooms fit together, but you will move out the furniture you never use rather than dust it for years.

त्वरित जाँच: Why does the generated template wrap `replicas` in `if not .Values.autoscaling.enabled`?

  • Replicas are not allowed in Deployments
  • To speed up rendering
  • Because Helm cannot set integers
  • So the HorizontalPodAutoscaler, not Helm, controls the replica count when autoscaling is on
Answer

So the HorizontalPodAutoscaler, not Helm, controls the replica count when autoscaling is on — If Helm kept setting replicas, every upgrade would fight the HPA's chosen count.