Using Helm at Giant Swarm
Classification:
Aliases
- All actions in Helm are scoped to a namespace.
- You can check all namespaces with the
-A
flag e.g.helm ls -A
. - But these aliases based on Vaclav’s awesome
kubectl
aliases may help.
alias helmg="helm -n giantswarm"
alias helmk="helm -n kube-system"
alias helmm="helm -n monitoring"
AppCatalogs
- Our Giant Swarm App Platform is built on Helm chart repositories.
- app-operator gets the repository URL from the catalog CR but you can also use it locally.
$ helm repo add control-plane-catalog https://giantswarm.github.io/control-plane-catalog/
- Example installing app-operator in KIND.
- :caution: Be careful when installing charts manually in test MCs and remove them after. Don’t do this in prod MCs unless there is no alternative.
Helm 3: Three Way Merge
- This is one of the major changes in Helm 3. Now the current state of the cluster is included when the strategic merge patch is generated.
- For example if a deployment is scaled down the merge will scale it back up.
- This means manual changes are higher risk with Helm 3.
- To prevent app-operator making changes you can cordon the app CR.
- See the Helm docs for more detail on three way merge.
Templating
Coding Standards
- See fmt.
Tips & Tricks
Help with common templating issues.
Is a chart deployed with Helm 2 or Helm 3?
- You can use the
Release.Service
built-in object. - On Helm 3 it is always
Helm
. - On Helm 2 it is always
Tiller
.
Values
Tools, tips and tricks for working with Helm values.
helm-diff plugin
This plugin is useful for comparing values changes. It can also do other comparisions. See the docs.
helm plugin install https://github.com/databus23/helm-diff
helm -n giantswarm diff revision release-operator-unique 18 19
helm get values –all
By default helm get values
only returns the overrides for the chart. In our case
the config specified in the app CR.
The --all
flag shows all the computed values including those in values.yaml in the
chart.
Removed API versions
If an apiVersion has been removed then chart-operator will fail to update the helm release. e.g.
The apiVersion in the helm release secret needs to be updated to a supported value. This can be done with the https://github.com/helm/helm-mapkubeapis plugin.
It can remap both deprecated and removed API versions.
mapkubeapis plugin
Install the plugin.
helm plugin install https://github.com/helm/helm-mapkubeapis
Scale down chart-operator.
kubectl -n giantswarm scale deploy chart-operator --replicas 0
helm mapkubeapis -n efk-stack-app efk-stack-app
2022/04/12 13:03:39 Release 'efk-stack-app' will be checked for deprecated or removed Kubernetes APIs and will be updated if necessary to supported API versions.
2022/04/12 13:03:39 Get release 'efk-stack-app' latest version.
2022/04/12 13:03:39 Check release 'efk-stack-app' for deprecated or removed APIs...
2022/04/12 13:03:40 Found 3 instances of deprecated or removed Kubernetes API:
"apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
"
Supported API equivalent:
"apiVersion: rbac.authorization.k8s.io/v1
kind: Role
"
2022/04/12 13:03:40 Found 1 instances of deprecated or removed Kubernetes API:
"apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
"
Supported API equivalent:
"apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
"
2022/04/12 13:03:40 Finished checking release 'efk-stack-app' for deprecated or removed APIs.
2022/04/12 13:03:40 Deprecated or removed APIs exist, updating release: efk-stack-app.
2022/04/12 13:03:40 Set status of release version 'efk-stack-app.v76' to 'superseded'.
2022/04/12 13:03:40 Release version 'efk-stack-app.v76' updated successfully.
2022/04/12 13:03:40 Add release version 'efk-stack-app.v77' with updated supported APIs.
2022/04/12 13:03:40 Release version 'efk-stack-app.v77' added successfully.
2022/04/12 13:03:40 Release 'efk-stack-app' with deprecated or removed APIs updated successfully to new version.
2022/04/12 13:03:40 Map of release 'efk-stack-app' deprecated or removed APIs to supported versions, completed successfully.
Scale up chart-operator.
kubectl -n giantswarm scale deploy chart-operator --replicas 1