Getting Started
Prerequisites
- A Kubernetes cluster ≥ 1.26 with
kubectlconfigured - Argo CD ≥ 3.3 installed in the cluster in the
argocdnamespace
Argo CD is required. Kokumi delegates all runtime deployment to Argo CD. When a Serving is activated, Kokumi creates or updates an Argo CD
Applicationthat points to the immutable OCI artifact of the selected Preparation. Without Argo CD, no workloads will be deployed.
If you don’t have Argo CD installed yet:
kubectl create namespace argocd
kubectl apply -n argocd --server-side --force-conflicts \
-f https://raw.githubusercontent.com/argoproj/argo-cd/v3.3.0/manifests/install.yamlInstall Kokumi
kubectl apply -f \
https://github.com/kokumi-dev/kokumi/releases/download/0.11.0/install.yamlVerify the manager is running:
kubectl get pods -n kokumi
# NAME READY STATUS RESTARTS AGE
# kokumi-controller-manager-xxx 1/1 Running 0 30sCreate your first Order
An Order is the concrete delivery request.
An Order does not require a Menu. It can fully define the intent of a single component on its own. This standalone Order model is a first-class mode and will always be supported.
Alternatively, an Order can reference a Menu to inherit source, render configuration, and base defaults while only supplying permitted overrides. See Create a Menu below for that workflow.
Kokumi supports two source types:
- Pre-rendered manifest bundle — an OCI artifact containing a
manifest.yamlat its root (nospec.renderneeded). - Helm chart in OCI format — a standard Helm chart pushed to an OCI registry;
add
spec.render.helmto control rendering.
Example: pre-rendered manifest bundle
apiVersion: delivery.kokumi.dev/v1alpha1
kind: Order
metadata:
name: external-secrets
spec:
source:
oci: oci://ghcr.io/kokumi-dev/external-secrets
version: "0.1.0"
patches:
- target:
kind: Deployment
name: external-secrets-webhook
set:
.spec.replicas: "3"
destination:
oci: oci://kokumi-registry.kokumi.svc.cluster.local:5000/preparation/external-secretsExample: Helm chart in OCI format
apiVersion: delivery.kokumi.dev/v1alpha1
kind: Order
metadata:
name: podinfo
spec:
source:
oci: oci://ghcr.io/stefanprodan/charts/podinfo
version: "6.10.2"
render:
helm:
namespace: default
values:
ui:
color: "#EF6461"
message: "Hello from Kokumi"
logo: "https://kokumi.dev/images/logo.png"
patches:
- target:
kind: Deployment
name: podinfo
set:
.spec.replicas: "2"
destination:
oci: oci://kokumi-registry.kokumi.svc.cluster.local:5000/preparation/podinfo
autoDeploy: falseApply it:
kubectl apply -f order.yamlWatch a Preparation being created
Kokumi automatically reconciles the Order and produces an immutable Preparation. You never create Preparations manually — every Order change produces a new one and the full history is retained indefinitely.
kubectl get preparations --watch
# NAME ORDER PHASE CREATED AGE
# external-secrets-d7ce0c46a686 external-secrets Ready 5s 5sActivate with a Serving
A Serving points Argo CD at the selected Preparation’s immutable OCI artifact. There is exactly one Serving per Order, and it is created and managed automatically — you never write a Serving manifest yourself.
Three ways to activate or change a Serving:
| Method | How |
|---|---|
| Auto-deploy | Set spec.autoDeploy: true on the Order — Kokumi updates the Serving on every new Preparation |
| Label promotion | Label a Preparation with delivery.kokumi.dev/approve-deploy: "true" |
| UI | Click Promote on any Preparation in the Kokumi UI |
Once activated, Kokumi creates a matching Argo CD Application in the argocd
namespace and Argo CD syncs the manifests into the cluster.
kubectl get servings
# NAME ORDER PREPARATION PHASE AGE
# external-secrets external-secrets external-secrets-d7ce0c46a686 Active 10s
kubectl get applications -n argocd
# NAME SYNC STATUS HEALTH STATUS
# external-secrets Synced HealthyTo roll back, promote any previous Preparation — no re-rendering required.
Create a Menu
A Menu is a cluster-scoped, reusable template that pins source, version, and render type. It defines base values and patches plus an override policy controlling what consumers may customise.
apiVersion: delivery.kokumi.dev/v1alpha1
kind: Menu
metadata:
name: podinfo
spec:
source:
oci: oci://ghcr.io/stefanprodan/charts/podinfo
version: "6.10.2"
render:
helm:
namespace: default
values:
ui:
color: "#EF6461"
logo: "https://kokumi.dev/images/logo.png"
overrides:
values:
policy: Restricted
allowed:
- "ui.message"
- "replicaCount"
patches:
policy: None
defaults:
autoDeploy: falseThis Menu:
- Pins the podinfo Helm chart at version
6.10.2 - Always renders with the Kokumi logo as a base value
- Allows consumers to set only
ui.message,ui.color, andreplicaCount - Forbids any patches
Apply it:
kubectl apply -f menu.yamlOrder from a Menu
Create an Order that references the Menu instead of specifying a source directly:
apiVersion: delivery.kokumi.dev/v1alpha1
kind: Order
metadata:
name: podinfo-from-menu
spec:
menuRef:
name: podinfo
render:
helm:
values:
ui:
message: "Ordered from Menu"
destination:
oci: oci://kokumi-registry.kokumi.svc.cluster.local:5000/preparation/podinfo-from-menu
autoDeploy: falseThe Order inherits the source, version, and base values from the Menu. Only the allowed override keys are set. Kokumi validates the overrides against the Menu’s policy during reconciliation — any disallowed key causes the Order to fail with a clear status message.
Access the UI
Kokumi includes a web UI and API server deployed alongside the controller. Port-forward the server service to access it locally:
kubectl port-forward -n kokumi svc/kokumi-server 8080:80Then open http://localhost:8080 in your browser.
The UI lets you browse Menus, Orders, Preparations, and Servings, create Orders from a Menu with one click, promote a Preparation to active, and view Argo CD sync status in real time.