<p>I want to deploy multiple Deployments of Pods with different images, ports, etc. but with very similar other properties. So I want to declare a single <code>deployment.yaml</code> file that looks something like this</p>

<pre><code>{{- range .Values.types }}
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
...
{{- end }}

</code></pre>

<p>Where my <code>values.yaml</code> is </p>

<pre><code>types:
  - foo
  - bar
  - baz
</code></pre>

<p>However, this only spins up a single Kubernetes Deployment when I <code>helm install</code> because everything is in one template file. Any ideas on how to do this?</p>

Math is Hard
<p>Kubernetes generally uses YAML syntax, and that allows multiple "documents" to be in a single physical file with a <code>---</code> delimiter before each one.  Helm in turn generally operates by applying the templating to produce a plain-text file and in effect feeding it to <code>kubectl apply</code>.</p>

<p>The upshot of this is that if you start each Kubernetes object description with the <code>---</code> start-of-document delimiter, it should work:</p>

<pre><code>{{- range .Values.types }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
...
{{- end }}
</code></pre>
