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:
| Flag | Description |
|---|---|
--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
- Fleet management — declare and apply many clusters from one manifest.
- CLI reference — Clusters — every command and flag, verbatim from the binary.
- Getting started — the first-cluster walkthrough.