kind
Recipe card from the charly-kubernetes plugin (Kinds — schema authoring).
kind – Kubernetes-in-Docker local clusters
Section titled “kind – Kubernetes-in-Docker local clusters”Candy Properties
Section titled “Candy Properties”| Property | Value |
|---|---|
| Install files | charly.yml (binary fetch + engine-prepare script) |
| Pinned version | v0.33.0 (edit KIND_VERSION in var: to cut over) |
| Binaries | /usr/local/bin/kind, plus kubectl/helm from the required client candy |
| Depends on | /charly-coder:kubernetes-layer (kubectl + helm) |
What this candy does
Section titled “What this candy does”Installs the pinned, sha256-verified kind release binary (from the Arch
kind package on Arch, the upstream release asset elsewhere) plus a
kind-engine-prepare script that makes the resolved container engine ready
for kind’s node containers.
kind is host tooling. It provisions local Kubernetes clusters as
node containers on the operator’s container engine, so it is composed by
a target: local deploy on the host (or a box that runs kind inside).
Engine selection — KIND_EXPERIMENTAL_PROVIDER
Section titled “Engine selection — KIND_EXPERIMENTAL_PROVIDER”The engine is charly’s own engine word (podman/docker/nerdctl), which
maps 1:1 to kind’s KIND_EXPERIMENTAL_PROVIDER. The kindcluster: deploy’s
engine: field (or the resolved engine.run) drives it; there is no
separate selector.
Per-engine preconditions (all handled by kind-engine-prepare)
Section titled “Per-engine preconditions (all handled by kind-engine-prepare)”| Engine | Precondition |
|---|---|
docker |
A reachable daemon (rootless or rootful). Nothing else. |
rootless podman |
cgroup v2 + a log driver kind can tail (k8s-file); raised pids/inotify limits. |
rootless nerdctl |
Rootless containerd running (containerd-rootless-setuptool.sh install). |
kindnet is kind’s CNI; there is no Traefik and no ServiceLB, so the
kube: addons check verb (which waits on the k3s addon stack) does NOT
apply to a kind cluster — use nodes/wait-nodes/pods/wait-ready/
storageclass/raw instead. The StorageClass is standard
(rancher local-path, in the local-path-storage namespace).
The kindcluster: substrate
Section titled “The kindcluster: substrate”The candy is the host-tooling leg of the kindcluster substrate. A
kindcluster: template provisions the cluster (engine / node_image /
nodes); a from: deploy runs an optional workload applied with
kubectl apply -k. The word is kindcluster, NOT kind — the bare word
collides with the schema’s own source: {kind: …} discriminator and with
kind’s own kind: Cluster config field.
Loading a local image
Section titled “Loading a local image”kind nodes have their own image store, separate from the host engine’s. A
locally-built image must be loaded in — and kind load docker-image is
BROKEN on podman (measured: “image not present locally” despite the image
existing). The provider uses the engine-agnostic kind load image-archive
path, so it works on docker, podman, and nerdctl.
Teardown
Section titled “Teardown”kind delete cluster --name <cluster> — engine-scoped (the provider sets
KIND_EXPERIMENTAL_PROVIDER, since kind get/delete cluster is
engine-scoped: names are unique only WITHIN an engine), and idempotent on a
missing cluster.
# charly.yml -- the host tooling profilekind-host: local: candy: - kind
# a kindcluster template + deploy (see [/charly-kubernetes:kubernetes](/recipes/kubernetes/kubernetes/))kind-lab-cluster: kindcluster: engine: podman node_image: kindest/node:v1.37.0@sha256:a1ed56cfb0e7b93589bdf97c8cd566405a265939e3620fc4f5de89adff580ae5 nodes: - role: control-plane extra_port_mappings: - container_port: 30080 host_port: 30080 - role: worker
kind-lab: kindcluster: from: kind-lab-cluster image: my-app # optional workload, applied via `kubectl apply -k` disposable: true # if it is a check bedcharly deploy add kind-host --target local # install kind on the hostcharly deploy add kind-lab --target kindclusterkubectl --context kind-lab get nodesBuild-scope: kind version matches the pin; /usr/local/bin/kind is
mode 0755; the node-image pin file content; the engine-prepare script is
executable and sh -n clean; kubectl version --client exits 0.
Related
Section titled “Related”/charly-kubernetes:check-k8s— thekube:cluster-probe check verb/charly-kubernetes:kubernetes— thekubernetes:cluster template/charly-core:deploy—charly deploy add/del/charly-image:layer— candy authoring reference