3.9 KiB
Use Helm To Define a Component
This documentation explains how to use Helm chart to define an application component.
Install fluxcd/flux2 as dependencies
Using helm as a workload depends on several CRDs and controllers from fluxcd/flux2, make sure you have make them installed before continue.
It's worth to note that flux2 doesn't offer an official Helm chart to install, so we provide a chart which only includes minimal dependencies KubeVela relies on as an alternative choice.
Install the minimal flux2 chart provided by KubeVela:
$ helm install --create-namespace -n flux-system helm-flux http://oam.dev/catalog/helm-flux2-0.1.0.tgz
Write WorkloadDefinition
Here is an example WorkloadDefinition about how to use Helm as schematic module.
apiVersion: core.oam.dev/v1alpha2
kind: WorkloadDefinition
metadata:
name: webapp-chart
annotations:
definition.oam.dev/description: helm chart for webapp
spec:
definitionRef:
name: deployments.apps
version: v1
schematic:
helm:
release:
chart:
spec:
chart: "podinfo"
version: "5.1.4"
repository:
url: "http://oam.dev/catalog/"
Just like using CUE as schematic module, we also have some rules and contracts to use helm chart as schematic module.
.spec.definitionRefis required to indicate the main workload(Group/Verison/Kind) in your Helm chart. Only one workload allowed in one helm chart. For example, in our sample chart, the core workload isdeployments.apps/v1, other resources will also be deployed but mechanism of KubeVela won't work for them..spec.schematic.helmcontains information of Helm release & repository.
There are two fields release and repository in the .spec.schematic.helm section, these two fields align with the APIs of fluxcd/flux2. Spec of release aligns with HelmReleaseSpec and spec of repository aligns with HelmRepositorySpec.
In a word, just like the fields shown in the sample, the helm schematic module describes a specific Helm chart release and its repository.
Create an Application using the helm based WorkloadDefinition
Here is an example Application.
apiVersion: core.oam.dev/v1alpha2
kind: Application
metadata:
name: myapp
namespace: default
spec:
components:
- name: demo-podinfo
type: webapp-chart
settings:
image:
tag: "5.1.2"
Helm module workload will use data in settings as Helm chart values.
Currently, you can learn the schema of settings by reading the README.md of the Helm chart, and the schema are totally align with values.yaml of the chart.
We will integerate the values and generate it's openapi-v3-json-schema soon.
Deploy the application and after several minutes (it takes time to fetch Helm chart from the repo, render and install), you can check the Helm release is installed.
$ helm ls -A
myapp-demo-podinfo default 1 2021-03-05 02:02:18.692317102 +0000 UTC deployed podinfo-5.1.4 5.1.4
Check the deployment defined in the chart has been created successfully.
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
myapp-demo-podinfo 1/1 1 1 66m
Check the values(image.tag = 5.1.2) from application's settings are assigned to the chart.
$ kubectl get deployment myapp-demo-podinfo -o json | jq '.spec.template.spec.containers[0].image'
"ghcr.io/stefanprodan/podinfo:5.1.2"