klimax is now marina. Same tool, new name since v0.3. Existing install? Migrate with marina migrate →
Documentation menu

Managing clusters

The everyday cluster verbs. marina cluster creates, lists, switches, labels, verifies, and deletes individual kind clusters. To stamp out several clusters at once from one file, see Fleet management.

Create a cluster

Provision a kind cluster inside the running VM. marina installs MetalLB with a dedicated IP-pool slice, wires CoreDNS forwarding, and (by default) merges the new context into ~/.kube/config:

$ marina cluster create dev

Each cluster is auto-assigned a num (the lowest free 1–99 slot) that determines its API-server port, service/pod subnets, and MetalLB pool. Tune the rest with flags:

FlagDescription
--region <r>topology.kubernetes.io/region label (default europe-west<N>).
--zone <z>topology.kubernetes.io/zone label (default europe-west<N>-b).
-l, --label <k=v>Extra node label; repeatable.

Need to pin a specific num? Declare it in a Fleet manifest's per-cluster num: field.

$ marina cluster create dev
$ marina cluster create dev --region us-east1 --zone us-east1-a
$ marina cluster create dev -l team=search -l env=dev

List, switch, merge

cluster list shows every cluster in the VM; add -o json or -o yaml for machine-readable output, or -l / --selector to filter by a node-label selector. Point kubectl at one with the marina kubeconfig family:

$ marina cluster list
$ marina cluster list -o json
$ marina cluster list -l env=dev                # filter by label selector

# KUBECONFIG for just this shell
$ eval $(marina kubeconfig env dev)

# or merge the context into ~/.kube/config and switch to it
$ marina kubeconfig use dev

Node labels

Every cluster marina creates gets its nodes labelled: managed-by=marina always, plus topology.kubernetes.io/region and …/zone from the flags above. Add your own with repeatable -l flags — handy for testing nodeSelector and affinity rules:

$ marina cluster create dev -l disktype=ssd -l tier=frontend

Already created the cluster? Relabel it in place with marina cluster label — no recreate. It sets/overwrites labels (--overwrite by default) and removes them with the trailing key- form:

$ marina cluster label dev -l tier=frontend -l disktype=ssd
$ marina cluster label dev -l disktype-              # remove a label
🏷️

Declaring a whole fleet? The same labels are set per-cluster in the manifest — see Fleet management → Node labels.

Verify the routing

The built-in smoke test deploys an nginx Deployment and a LoadBalancer Service against your current kubectl context, then waits for MetalLB to assign a VIP you can curl from your Mac:

$ marina cluster e2e-test-nginx
$ marina cluster e2e-test-nginx --cleanup   # remove the test workload

While it runs, the Service is also reachable by name — curl http://nginx.default.<cluster>.demo.internal/. Every LoadBalancer Service gets one; see Local DNS names.

Load a locally built image

There's no local push registry — build against the VM's Docker and load the image into the cluster's nodes. The kind CLI lives in the VM, so hand the command to marina shell; it runs there and returns that command's exit code, so this drops straight into a build script:

$ eval "$(marina docker-env)"                 # DOCKER_HOST → the marina VM
$ docker build -t myapp:test .
$ marina shell kind load docker-image myapp:test --name dev

Then reference myapp:test with imagePullPolicy: IfNotPresent so the node uses the loaded image. Public images need none of this — they pull through the built-in mirrors. See Registry mirrors.

Delete a cluster

Pass a name to delete one cluster, run it bare for an interactive multi-select picker (Space toggles), or match several with -l / --selector (confirms unless -y):

$ marina cluster delete staging
$ marina cluster delete                    # interactive picker
$ marina cluster delete -l env=test --yes   # delete every match
🚢

Deleting a cluster leaves the VM and other clusters running. To tear down a whole set at once, use marina fleet delete <name> or marina fleet delete -f fleet.yaml (Fleet management); to reclaim everything including the VM, use marina destroy (Reset).

See also