This chart is designed to make it easier for you to build and maintain Helm charts.
It provides utilities that reflect best practices of Kubernetes chart development, making it faster for you to write charts.
A few tips for working with Common:
common.fullname.unique).
They may trigger unwanted upgrades or have other side effects.In this document, we use RELEASE-NAME as the name of the release.
common.fullnameThe common.fullname template generates a name suitable for the name: field
in Kubernetes metadata. It is used like this:
name: 
The following different values can influence it:
# By default, fullname uses '-. This
# overrides that and uses the given string instead.
fullnameOverride: "some-name"
# This adds a prefix
fullnamePrefix: "pre-"
# This appends a suffix
fullnameSuffix: "-suf"
# Global versions of the above
global:
  fullnamePrefix: "pp-"
  fullnameSuffix: "-ps"
Example output:
---
# with the values above
name: pp-pre-some-name-suf-ps
---
# the default, for release "happy-panda" and chart "wordpress"
name: happy-panda-wordpress
Output of this function is truncated at 54 characters, which leaves 9 additional characters for customized overriding. Thus you can easily extend this name in your own charts:
  -my-stuff
common.fullname.uniqueThe common.fullname.unique variant of fullname appends a unique seven-character
sequence to the end of the common name field.
This takes all of the same parameters as common.fullname
Example template:
uniqueName: 
Example output:
uniqueName: release-name-fullname-jl0dbwx
It is also impacted by the prefix and suffix definitions, as well as by
.Values.fullnameOverride
Note that the effective maximum length of this function is 63 characters, not 54.
common.metadataThe common.metadata helper generates the metadata: section of a Kubernetes
resource.
This takes three objects:
It generates standard labels, annotations, hooks, and a name field.
Example template:
---
Example values:
bio:
  name: example
  labels:
    first: matt
    last: butcher
    nick: technosophos
  annotations:
    format: bio
    destination: archive
  hook: pre-install
pet:
  nameOverride: Zeus
Example output:
metadata:
  name: release-name-metadata
  labels:
    app: release-name-metadata
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: metadata-0.1.0
    first: "matt"
    last: "butcher"
    nick: "technosophos"
  annotations:
    "destination": "archive"
    "format": "bio"
    "helm.sh/hook": "pre-install"
---
metadata:
  name: Zeus
  labels:
    app: release-name-metadata
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: metadata-0.1.0
  annotations:
Most of the common templates that define a resource type (e.g. common.configmap
or common.job) use this to generate the metadata, which means they inherit
the same labels, annotations, nameOverride, and hook fields.
common.labelizecommon.labelize turns a map into a set of labels.
Example template:
Example output:
first: "1"
second: "2"
third: "3"
common.labels.standardcommon.labels.standard prints the standard set of labels.
Example usage:
Example output:
app: release-name-labelizer
heritage: "Tiller"
release: "RELEASE-NAME"
chart: labelizer-0.1.0
common.hookThe common.hook template is a convenience for defining hooks.
Example template:
Example output:
"helm.sh/hook": "pre-install,post-install"
common.chartrefThe common.chartref helper prints the chart name and version, escaped to be
legal in a Kubernetes label field.
Example template:
chartref: 
For the chart foo with version 1.2.3-beta.55+1234, this will render:
chartref: foo-1.2.3-beta.55_1234
(Note that + is an illegal character in label values)
common.port and common.port.stringcommon.port takes a port in either numeric or colon-numeric (“:8080”) syntax
and converts it to an integer.
common.port.string does the same, but formats the result as a string (in quotes)
to satisfy a few places in Kubernetes where ports are passed as strings.
Example template:
port1: 
port2: 
port3: 
portString: 
Example output:
port1: 1234
port2: 4321
port3: 8080
portString: "1234"
Kubernetes defines a variety of resource kinds, from Secret to StatefulSet.
We define some of the most common kinds in a way that lets you easily work with
them.
The resource kind templates are designed to make it much faster for you to define basic versions of these resources. They don’t allow you to modify every single aspect of the definition, but they provide access to the general information.
Often times, using these templates will require you to set up a special context for the template with something like this:
"top" should always point to the root context (.) or a facsimile.
In general, the library is designed with the idea that most information is passed directly from the values.
common.serviceThe common.service template receives the top level context and a service
definition, and creates a service resource.
Example template:
---
The above template defines two services: a web service and a mail service. Note
that the common.service template defines two parameters:
top: The global context (usually .)service: A service definition. In the example above, it is passed directly
from the values.Example values:
# Define a mail service
mailService:
  suffix: "-mail"    # Appended to the fullname of the service (optional)
  labels:            # Appended to the labels section. (optional)
    protocol: mail
  ports:             # Composes the 'ports' section of the service definition.
    - name: smtp
      port: 22
      targetPort: 22
    - name: imaps
      port: 993
      targetPort: 993
  selector:          # This REPLACES the default selector. (optional)
    protocol: mail
# Define a web service
webService:
  suffix: "-www"
  labels:
    protocol: www
  ports:
    - name: www
      port: 80
      targetPort: 8080
  extraSelector:     # This IS APPENDED TO the default selector (optional)
    protocol: www
The most important part of a service definition is the ports object, which
defines the ports that this service will listen on. Most of the time,
selector is computed for you. But you can replace it or add to it.
The output of running the above values through the earlier template is:
apiVersion: v1
kind: Service
metadata:
  name: release-name-service-mail       # note '-mail' is the suffix.
  labels:
    provides: release-name-service-mail # this is automatically generated
    app: release-name-service           # app is not given the suffix.
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: service-0.1.0
    protocol: "mail"
spec:
  ports:
  - port: 22
    targetPort: 22
    name: smtp
  - port: 993
    targetPort: 993
    name: imaps
  selector:
    protocol: mail
---
apiVersion: v1
kind: Service
metadata:
  name: release-name-service-www
  labels:
    provides: release-name-service-www
    app: release-name-service
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: service-0.1.0
    protocol: "www"
spec:
  ports:
  - port: 80
    targetPort: 8080
    name: www
  selector:
    provides: release-name-service-www  # 'provides' is the default selector.
    protocol: www
common.pod.simpleThe common.pod.simple template defines a basic pod. Underneath the hood,
it uses common.podspec.simple.
The simple pod template takes two objects:
top: The global context (usually .)pod: A pod definition.It is designed to be easily used from a values file.
Example template:
---
The above declares two pods, passing both pods data directly from the values
file. Here are the values for two pods. Note that the minimalPod has only
one property: image. All others are optional.
Example values:
minimalPod:       # The only required field is image.
  image: nginx    # This will be resolved to nginx:latest
regularPod:
  image: alpine         # image is combined with tag.
  tag: "3.5"
  command: "sleep"
  args: ["900"]
  labels:               # This is an abritrary list of labels, appended to regular labels.
    task: "sleeper"
  annotations:
    foo: bar
  hook: "pre-install"   # Formatted as a helm hook and merged into the annotations
  volumeMounts:         # Define volume mounts and volumes.
    - mountPath: "/cache"
      name: "cache-volume"
  volumes:
    - name: "cache-volume"
      emptyDir: {}
  imagePullSecrets:     # Add imagePullSecrets if image needs them.
    - name: "dockerhub-secret"
  ports:
    - name: web
      containerPort: 8080
  env:
    - name: "ENV_VAR"
      value: "1"
    - name: "ENV_VAR2"
      value: "2"
    - name: "PASSWORD"
      valueFrom:
        secretKeyRef:
          name: "some-secret-out-there"
          key: "password"
  persistence:      # See notes on persistence.
    enabled: true
    mounts:         # If a persistence section is specified, there must be at least one mount
      - suffix: "-cache"
        path: "/cache"
      - suffix: "-data"
        path: "/var/run/data"
  livenessProbe:    # probes are passed in as-is
    httpGet:
      path: /
      port: http
    initialDelaySeconds: 120
    timeoutSeconds: 5
  readinessProbe:
    httpGet:
      path: /
      port: http
    initialDelaySeconds: 5
    timeoutSeconds: 1
  resources:        # resources are passed in as-is
    requests:
      memory: 512Mi
The minimalPod section defines a pod with the minimum number of fields, while
the regularPod defines many of the common attributes.
The persistence section has the following behavior:
enabled is true, this will use PVCs. If false, it will use emptyDir.volumeMount and volume sections are generated from the mounts
data.common.fullname plus suffix.persistence is present, at least one mount must be provided.The result of running the above values through the template is this:
apiVersion: v1
kind: Pod
metadata:
  name: release-name-pod
  labels:
    app: release-name-pod
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: pod-0.1.0
  annotations:
spec:
  containers:
    -
      image: "nginx:latest"
      imagePullPolicy: ""
---
apiVersion: v1
kind: Pod
metadata:
  name: release-name-pod
  labels:
    app: release-name-pod
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: pod-0.1.0
    task: "sleeper"
  annotations:
    "foo": "bar"
    "helm.sh/hook": "pre-install"
spec:
  containers:
    -
      image: "alpine:3.5"
      imagePullPolicy: ""
      resources:
        requests:
          memory: 512Mi
      command: ["sleep"]
      args:
        - "900"
      env:
        - name: ENV_VAR
          value: "1"
        - name: ENV_VAR2
          value: "2"
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              key: password
              name: some-secret-out-there
      ports:
        - containerPort: 8080
          name: web
      volumeMounts:
        - name: release-name-pod-cache
          path: /cache
        - name: release-name-pod-data
          path: /var/run/data
      livenessProbe:
        httpGet:
          path: /
          port: http
        initialDelaySeconds: 120
        timeoutSeconds: 5
      readinessProbe:
        httpGet:
          path: /
          port: http
        initialDelaySeconds: 5
        timeoutSeconds: 1
  imagePullSecrets:
    - name: dockerhub-secret
  volumes:
    - name: release-name-pod-cache
      persistentVolumeClaim:
        claimName: release-name-pod-cache
    - name: release-name-pod-data
      persistentVolumeClaim:
        claimName: release-name-pod-data
common.podspec.simple and common.container.simpleTwo helper templates, common.podspec.simple and common.container.simple, are
used by all of the kinds that require pod specs.
common.jobThe common.job.simple template creates a new Job resource. It is highly optimized
for single-run jobs. Jobs are given names that will not collide, so any
Helm update/install operation will create a new instance of this job, even if it had done so
allready.
Jobs can also be easily created as hooks.
Jobs created with common.job.simple are not easy for Helm to delete, and
a helm delete operation may not delete jobs created this way because the
job name is recreated on each run.
Example template:
Example values:
someJob:
  image: alpine
  tag: "3.5"
  command: "sleep"
  args: ["900"]
  labels:               # This is an abritrary list of labels, appended to regular labels.
    task: "sleeper"
  hook: "pre-upgrade"   # Formatted as a helm hook and merged into the annotations
  restartPolicy: "Never"
(Note that most of the values supported for common.podspec.simple are also
supported for jobs)
Example output:
apiVersion: batch/v1
kind: Job
metadata:
  name: release-name-job-bagwwdi    # Notice the appended random suffix
  labels:
    app: release-name-job
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: job-0.1.0
    task: "sleeper"
  annotations:
    "helm.sh/hook": "pre-upgrade"
  spec:
    template:
      metadata:
        name: release-name-job-bagwwdi
        labels:
          app: release-name-job
          heritage: "Tiller"
          release: "RELEASE-NAME"
          chart: job-0.1.0
      spec:
        containers:
          -
            image: "alpine:3.5"
            imagePullPolicy: ""
            command: ["sleep"]
            args:
              - "900"
        restartPolicy: "Never"
common.secretThe common.secret template generates Secret resources.
Configuration is very similar to common.configmap.
This accepts the following parameters:
.Files
object and placed into the map with the given key.Note that the base64-encoded objects are formatted at 80 columns (not counting the indent level)
Example template:
---
The above defines two secrets.
Example values:
bio:
  name: example
  items:
    first: matt
    last: butcher
    nick: technosophos
    bio: |-
      Matt is a software architect. He is the author of eight book, most recently
      "Go in Practice", which he co-authored with Matt Farina. Matt holds a Ph.D.
      in Philosophy from Loyola University Chicago, where he teaches in the
      Department of Computer Science.
  labels:
    format: bio
    destination: archive
  hook: pre-install
pet:
  items:
    zeus: cat
    athena: cat
    julius: cat
  files:
    one: file1.txt
Example output:
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: release-name-secret
  labels:
    app: release-name-secret
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: secret-0.1.0
    destination: "archive"
    format: "bio"
  annotations:
    "helm.sh/hook": "pre-install"
data:
  "bio": |-
    TWF0dCBpcyBhIHNvZnR3YXJlIGFyY2hpdGVjdC4gSGUgaXMgdGhlIGF1dGhvciBvZiBlaWdodCBib29
    LCBtb3N0IHJlY2VudGx5CiJHbyBpbiBQcmFjdGljZSIsIHdoaWNoIGhlIGNvLWF1dGhvcmVkIHdpdGg
    TWF0dCBGYXJpbmEuIE1hdHQgaG9sZHMgYSBQaC5ELgppbiBQaGlsb3NvcGh5IGZyb20gTG95b2xhIFV
    aXZlcnNpdHkgQ2hpY2Fnbywgd2hlcmUgaGUgdGVhY2hlcyBpbiB0aGUKRGVwYXJ0bWVudCBvZiBDb21
    dXRlciBTY2llbmNlLg==
  "first": |-
    bWF0dA==
  "last": |-
    YnV0Y2hlcg==
  "nick": |-
    dGVjaG5vc29waG9z
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: release-name-secret
  labels:
    app: release-name-secret
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: secret-0.1.0
  annotations:
data:
  "athena": |-
    Y2F0
  "julius": |-
    Y2F0
  "zeus": |-
    Y2F0
  "one": |-
    VGhpcyBpcyBhIGZpbGUuCg==
common.configmapThe common.configmap template produces ConfigMap resources.
This accepts the following parameters:
.Files
object and placed into the map with the given key.Example template:
---
The above will generate two ConfigMaps that accept data from the following values.
Example values:
bio:
  name: example
  items:
    first: matt
    last: butcher
    nick: technosophos
    bio: |-
      Matt is a software architect. He is the author of eight book, most recently
      "Go in Practice", which he co-authored with Matt Farina. Matt holds a Ph.D.
      in Philosophy from Loyola University Chicago, where he teaches in the
      Department of Computer Science.
  labels:
    format: bio
    destination: archive
  hook: pre-install
pet:
  items:
    zeus: cat
    athena: cat
    julius: cat
  files:
    one: file1.txt
Example output:
apiVersion: v1
kind: ConfigMap
metadata:
  name: release-name-configmap
  labels:
    app: release-name-configmap
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: configmap-0.1.0
    destination: "archive"
    format: "bio"
  annotations:
    "helm.sh/hook": "pre-install"
data:
  "bio": |-
    Matt is a software architect. He is the author of eight book, most recently
    "Go in Practice", which he co-authored with Matt Farina. Matt holds a Ph.D.
    in Philosophy from Loyola University Chicago, where he teaches in the
    Department of Computer Science.
  "first": |-
    matt
  "last": |-
    butcher
  "nick": |-
    technosophos
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: release-name-configmap
  labels:
    app: release-name-configmap
    heritage: "Tiller"
    release: "RELEASE-NAME"
    chart: configmap-0.1.0
  annotations:
data:
  "athena": |-
    cat
  "julius": |-
    cat
  "zeus": |-
    cat
  "one": |-
    This is a file.