Skip to content

cub cluster up

cub cluster up

Bring up a kind cluster wired to ConfigHub via Argo CD

Synopsis

Creates a kind cluster, installs Argo CD into it, and provisions the ConfigHub side across two Spaces:

the cluster (target-prefix) Space: a server-hosted OCI worker and an OCI target owned by that worker. This Space is a pure namespace — it holds no config bundle. -argo-apps the apps Space: the root "app of apps" Application Unit and every child Argo Application Unit. Its release target is the OCI target in the cluster Space (a cross-Space reference), so the apps Space is the config bundle Argo pulls, and neither Space's release target points at a target inside itself.

The root Application is bootstrapped once via kubectl apply; from then on, adding an Application Unit to the apps Space and publishing a new Release ("cub release publish -argo-apps") causes Argo to create the corresponding app on its next sync. The OCI target carries a confighub.com/argo-apps-space annotation (pointing at the apps Space) so API clients can resolve the Space holding the Argo Application Units from the target.

Unless --no-argobot is given, argobot is installed: a ConfigHub bot that watches the event log and force-syncs the matching Argo CD Application the moment a deploy happens. It is delivered as a component (a shared "argobot-base" installed from its OCI config bundle, plus a per-cluster "argobot-" variant), reuses the cluster's worker as its identity, and runs in the default kubernetes sync mode (no Argo CD token needed).

The cluster's OCI target is gated: a "no-placeholders" Trigger is created in the cluster Space and the target selects every Trigger in that Space, so publishing a Release that still contains an unfilled "confighubplaceholder" value is blocked for every Space that releases to this cluster — including deployment variants that do not exist yet. Add your own gates by creating Triggers in the cluster Space and running "cub target update --space target --refresh-triggers". Pass --no-placeholder-gate to skip the placeholder Trigger; the target is wired either way.

Argo CD is reachable at http://localhost: (server.insecure=true); admin credentials are written to /clusters/.env for source-ing into your shell along with KUBECONFIG.

Use --mount HOST[:CONTAINER] (repeatable) to bind-mount host directories into the cluster node.

cub cluster up [flags]

Options

      --argobot-oci string    OCI reference of argobot's config bundle (default "oci://ghcr.io/confighub/configs/argobot")
  -h, --help                  help for up
      --mount stringArray     host:container bind mount (repeatable; container path defaults to /mnt/<basename>)
      --name string           cluster name (auto-generated if empty)
      --no-argobot            skip installing argobot (the event-driven Argo CD sync bot)
      --no-placeholder-gate   skip the default vet-placeholders Trigger, allowing Releases with unfilled confighubplaceholder values to be published to this cluster
      --no-ports              only reserve the Argo NodePort; skip the user-app NodePort window
      --space string          ConfigHub space slug for the cluster's worker and target (the "target prefix"); the Argo apps space is this slug + "-argo-apps" (defaults to <name>)

Options inherited from parent commands

      --context string   The context to use for this command
      --debug            Debug output

SEE ALSO

  • cub cluster - Manage local kind clusters wired into ConfigHub