Add an application
Two paths, same result: an App claim committed to Git and reconciled by
Flux. The wizard writes the YAML for you; writing it by hand gives you the
full field set immediately.
Which path
Use the App Wizard if you want the common shape without learning the API first, or if you want the rendered output previewed before you commit. It produces a pull request against this repository.
Write the YAML if you already know what you need, if you are scripting it, or if you want a field the wizard does not expose.
Neither path is privileged — the wizard produces exactly the claim you would have written.
Writing the claim
Start from the smallest thing that runs:
apiVersion: cloud.ogenki.io/v1alpha1
kind: App
metadata:
name: xplane-myapp
namespace: apps
spec:
image:
repository: ghcr.io/example/myapp
tag: "1.4.2"
service:
port: 8080Then add what you need — a route, a database, a cache, a bucket, autoscaling. Each is an additional block, not a rewrite. The field reference lists every field with its type and default.
Two conventions the platform depends on:
- Name it
xplane-<something>. The prefix is load-bearing for IAM scoping, and renaming a Crossplane managed resource later is delete-and-create. - Do not wire connection strings yourself. If you ask for a
sqlInstanceorkvStore, the composition injectsDATABASE_URLandREDIS_URL. Setting them by hand fights the composition.
Committing it
The claim goes under apps/<stack>/<name>/, with a kustomization.yaml
alongside it and the parent kustomization updated to include the directory.
Flux picks it up on the next reconciliation of the apps Kustomization.
Verifying it reconciled
kubectl get app xplane-myapp -n apps
kubectl describe app xplane-myapp -n appsREADY=True means the composition’s readiness checks passed — the Deployment
is Available, the Service has a ClusterIP, and any HTTPRoute was accepted by
its gateway. It is a stronger signal than “the pods are running”.
If it does not go ready, work down the chain in Troubleshooting.
Reading on
- Deploy your first app — the guided version of this page
- The App composition — what each field renders
- App Wizard — the assisted path, with a worked example