Helm
Helm is a package manager for Kubernetes. We use two of it's features:
- Generating YAML files from templates
 - Having charts that require other charts for Gitops
 
Charts
Helm organizes configuration files into folders named Charts. Charts have a few key files:
- Chart.yaml which contains metadata about the chart (name etc...)
 - ./templates folder where the templates live
 - values.yaml a data file containing variables for a particular environment
 - requirements.yaml - charts can depend on other charts. This file lists those dependencies
 
Templates
Instead of having YAML files, Helm uses YAML templates. A Helm template file looks like this:
apiVersion: v1
kind: Service
metadata:
  name: {{ include "starter-kit.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "starter-kit.name" . }}
    helm.sh/chart: {{ include "starter-kit.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app: {{ .Release.Name }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.image.port }}
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: {{ include "starter-kit.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
Notice how it's like YAML, but with {{ }} placeholders.
Then there's a file named values.yaml, which might look like this:
global: {}
replicaCount: 1
logLevel: "debug"
image:
  repository: replace
  tag: replace
  pullPolicy: IfNotPresent
  port: 8080
# etc...
Helm can generate Kubernetes YAML files by rendering the template using the values from values.yaml like so:
helm template <release-name> ./path/to/chart
This will print YAML to the command line.
Requirements Files
If a Helm chart has a requirements.yaml file, it will look like this:
dependencies:
  - name: react-intro
    version: 0.0.1
    repository: >-
      http://artifactory-artifactory.tools:8082/artifactory/generic-local/react-intro-01-dev
When a Helm chart is applied, it combines all of the configs from the dependencies, plus any files it has.
Pre-Built Helm Charts
You can find pre-built Helm charts that work with the IBM Toolkit by going here:
https://github.com/IBM?q=template&type=&language=&sort=
A few common ones are:
- https://github.com/IBM/template-node-react
 - https://github.com/IBM/template-node-typescript
 - https://github.com/IBM/template-java-spring
 
Copy the chart/base directory and put it in your own React / Java app.