website/content/en/docs/application-store/app-developer-guide/helm-specification.md
Sherlock113 de488994dd replace e.g. with for example
Signed-off-by: Sherlock113 <sherlockxu@yunify.com>
2021-06-01 16:24:01 +08:00

5.3 KiB

title keywords description linkTitle weight
Helm Specifications Kubernetes, KubeSphere, Helm, specifications Understand the chart structure and specifications. Helm Specifications 14420

Helm charts serve as a packaging format. A chart is a collection of files that describe a related set of Kubernetes resources. For more information, see the Helm documentation.

Structure

All related files of a chart is stored in a directory which generally contains:

chartname/
  Chart.yaml          # A YAML file containing basic information about the chart, such as version and name.
  LICENSE             # (Optional) A plain text file containing the license for the chart.
  README.md           # (Optional) The description of the app and how-to guide.
  values.yaml         # The default configuration values for this chart.
  values.schema.json  # (Optional) A JSON Schema for imposing a structure on the values.yaml file.
  charts/             # A directory containing any charts upon which this chart depends.
  crds/               # Custom Resource Definitions.
  templates/          # A directory of templates that will generate valid Kubernetes configuration files with corresponding values provided.
  templates/NOTES.txt # (Optional) A plain text file with usage notes.

Chart.yaml File

You must provide the chart.yaml file for a chart. Here is an example of the file with explanations for each field.

apiVersion: (Required) The chart API version. 
name: (Required) The name of the chart.
version: (Required) The version, following the SemVer 2 standard. 
kubeVersion: (Optional) The compatible Kubernetes version, following the SemVer 2 standard.
description: (Optional) A single-sentence description of the app.
type: (Optional) The type of the chart.
keywords:
  - (Optional) A list of keywords about the app.
home: (Optional) The URL of the app.
sources:
  - (Optional) A list of URLs to source code for this app.
dependencies: (Optional) A list of the chart requirements.
  - name: The name of the chart, such as nginx.
    version: The version of the chart, such as "1.2.3".
    repository: The repository URL ("https://example.com/charts") or alias ("@repo-name").
    condition: (Optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (for example, subchart1.enabled ).
    tags: (Optional)
      - Tags can be used to group charts for enabling/disabling together.
    import-values: (Optional)
      - ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items.
    alias: (Optional) Alias to be used for the chart. It is useful when you have to add the same chart multiple times.
maintainers: (Optional)
  - name: (Required) The maintainer name.
    email: (Optional) The maintainer email.
    url: (Optional) A URL for the maintainer.
icon: (Optional) A URL to an SVG or PNG image to be used as an icon.
appVersion: (Optional) The app version. This needn't be SemVer.
deprecated: (Optional, boolean) Whether this chart is deprecated.
annotations:
  example: (Optional) A list of annotations keyed by name.

{{< notice note >}}

  • The field dependencies is used to define chart dependencies which were located in a separate file requirements.yaml for v1 charts. For more information, see Chart Dependencies.
  • The field type is used to define the type of chart. Allowed values are application and library. For more information, see Chart Types.

{{</ notice >}}

Values.yaml and Templates

Written in the Go template language, Helm chart templates are stored in the templates folder of a chart. There are two ways to provide values for the templates:

  1. Make a values.yaml file inside of a chart with default values that can be referenced.
  2. Make a YAML file that contains necessary values and use the file through the command line with helm install.

Here is an example of the template in the templates folder.

apiVersion: v1
kind: ReplicationController
metadata:
  name: deis-database
  namespace: deis
  labels:
    app.kubernetes.io/managed-by: deis
spec:
  replicas: 1
  selector:
    app.kubernetes.io/name: deis-database
  template:
    metadata:
      labels:
        app.kubernetes.io/name: deis-database
    spec:
      serviceAccount: deis-database
      containers:
        - name: deis-database
          image: {{.Values.imageRegistry}}/postgres:{{.Values.dockerTag}}
          imagePullPolicy: {{.Values.pullPolicy}}
          ports:
            - containerPort: 5432
          env:
            - name: DATABASE_STORAGE
              value: {{default "minio" .Values.storage}}

The above example defines a ReplicationController template in Kubernetes. There are some values referenced in it which are defined in values.yaml.

  • imageRegistry: The Docker image registry.
  • dockerTag: The Docker image tag.
  • pullPolicy: The image pulling policy.
  • storage: The storage backend. It defaults to minio.

An example values.yaml file:

imageRegistry: "quay.io/deis"
dockerTag: "latest"
pullPolicy: "Always"
storage: "s3"

Reference

Helm Documentation

Charts