Ksctl Stack

Documentation on ksctl stack controller

It helps in deploying stack using crd to help manage with installation, upgrades, downgrades, uninstallaztion. from one version to another and provide a single place of truth where to look for which applications are installed

How to Install?

ksctl/kcm is a pre-requisite for this to work

apiVersion: manage.ksctl.com/v1 kind: ClusterAddon metadata: labels: app.kubernetes.io/name: kcm name: ksctl-stack spec: addons: - name: stack

Changelog

v0.2.0

  • added support for gitops-standard stack
  • added support for monitoring-lite stack
  • added support for service-mesh-standard stack
  • added support for wasm-spinkube-standard stack
  • added support for wasm-kwasm-plus stack

Types

Stack

For defining a hetrogenous components we came up with a stack which contains M number of components which are different applications with their versions

Supported Apps and CNI

NameTypeMore Info
GitOpsstandardLink
MonitoringliteLink
Service MeshstandardLink
SpinKubestandardLink
KwasmplusLink

GitOps-Standard

How to use it (Basic Usage)

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: gitops spec: stackName: "gitops-standard"

Overrides available

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: gitops spec: stackName: "gitops-standard" disableComponents: <list[str]> # list of components to disable accepeted values are argocd, argorollouts overrides: argocd: version: <string> # version of the argocd noUI: <bool> # to disable the UI namespace: <string> # namespace to install argocd namespaceInstall: <bool> # to install namespace specific argocd argorollouts: version: <string> # version of the argorollouts namespace: <string> # namespace to install argrollouts namespaceInstall: <bool> # to install namespace specific argorollouts

Monitoring-Lite

How to use it (Basic Usage)

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: monitoring spec: stackName: "monitoring-lite"

Overrides available

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: monitoring spec: stackName: "monitoring-lite" disableComponents: <list[str]> # list of components to disable accepeted values are kube-prometheus overrides: kube-prometheus: version: <string> # version of the kube-prometheus helmKubePromChartOverridings: <map[string]any> # helm chart overridings, kube-prometheus

Service-Mesh-Standard

How to use it (Basic Usage)

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: mesh spec: stackName: "mesh-standard"

Overrides available

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: mesh spec: stackName: "mesh-standard" disableComponents: <list[str]> # list of components to disable accepeted values are istio overrides: istio: version: <string> # version of the istio helmBaseChartOverridings: <map[string]any> # helm chart overridings, istio/base helmIstiodChartOverridings: <map[string]any> # helm chart overridings, istio/istiod

Wasm Spinkube-standard

How to use it (Basic Usage)

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: spinkube spec: stackName: "wasm/spinkube-standard"

Demo app

kubectl apply -f https://raw.githubusercontent.com/spinkube/spin-operator/main/config/samples/simple.yaml kubectl port-forward svc/simple-spinapp 8083:80 curl localhost:8083/hello

Overrides available

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: spinkube spec: stackName: "wasm/spinkube-standard" disableComponents: <list[str]> # list of components to disable accepeted values are spinkube-operator, spinkube-operator-shim-executor, spinkube-operator-crd, cert-manager, kwasm-operator, spinkube-operator-runtime-class overrides: spinkube-operator: version: <string> # version of the spinkube-operator-shim-executor are same for shim-execuator, runtime-class, shim-executor-crd, spinkube-operator helmOperatorChartOverridings: <map[string]any> # helm chart overridings, spinkube-operator spinkube-operator-shim-executor: version: <string> # version of the spinkube-operator-shim-executor are same for shim-execuator, runtime-class, shim-executor-crd, spinkube-operator spinkube-operator-runtime-class: version: <string> # version of the spinkube-operator-shim-executor are same for shim-execuator, runtime-class, shim-executor-crd, spinkube-operator spinkube-operator-crd: version: <string> # version of the spinkube-operator-shim-executor are same for shim-execuator, runtime-class, shim-executor-crd, spinkube-operator cert-manager: version: <string> certmanagerChartOverridings: <map[string]any> # helm chart overridings, cert-manager kwasm-operator: version: <string> kwasmOperatorChartOverridings: <map[string]any> # helm chart overridings, kwasm/kwasm-operator

Wasm Kwasm-plus

How to use it (Basic Usage)

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: kwasm spec: stackName: "wasm/kwasm-plus"

Demo app(wasmedge)

--- apiVersion: v1 kind: Pod metadata: name: "myapp" namespace: default labels: app: nice spec: runtimeClassName: wasmedge containers: - name: myapp image: "docker.io/cr7258/wasm-demo-app:v1" ports: - containerPort: 8080 name: http restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: nice spec: selector: app: nice type: ClusterIP ports: - name: nice protocol: TCP port: 8080 targetPort: 8080

Demo app(wasmtime)

apiVersion: batch/v1 kind: Job metadata: name: nice namespace: default labels: app: nice spec: template: metadata: name: nice labels: app: nice spec: runtimeClassName: wasmtime containers: - name: nice image: "meteatamel/hello-wasm:0.1" restartPolicy: OnFailure
#### For wasmedge # once up and running kubectl port-forward svc/nice 8080:8080 # then you can curl the service curl localhost:8080
#### For wasmtime # just check the logs

Overrides available

apiVersion: app.ksctl.com/v1 kind: Stack metadata: labels: app.kubernetes.io/name: ka name: kwasm spec: stackName: "wasm/kwasm-plus" disableComponents: <list[str]> # list of components to disable accepeted values are kwasm-operator overrides: kwasm-operator: version: <string> kwasmOperatorChartOverridings: <map[string]any> # helm chart overridings, kwasm/kwasm-operator

Last modified March 23, 2025: improved the docs for kcm (20e9486)