# kubernetes-sigs/kind architecture

> Architecture diagram of the GitHub repository kubernetes-sigs/kind, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kubernetes-sigs/kind
- Repository: https://github.com/kubernetes-sigs/kind

## Overview

kind is a CLI and Go library for creating and managing local Kubernetes clusters in containers. The main workflow is: a user invokes kind, the CLI configures a cluster request, the create orchestrator provisions nodes through a selected Docker, Podman, or nerdctl provider, then runs kubeadm and cluster setup actions; users can later retrieve access configuration, inspect or export logs, load images, and delete clusters. The tree also contains kindnetd networking code. Edges reflect documented capabilities and sampled call sites; unsampled command wiring and kindnetd integration details are kept conservative.

Main entry points: [`pkg/cluster/provider.go`](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/provider.go) (Provider API), [`pkg/cmd/kind/root.go`](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/root.go) (Command tree), [`pkg/cmd/kind/create/cluster/createcluster.go`](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/create/cluster/createcluster.go) (Create command), [`pkg/cmd/kind/delete/cluster/deletecluster.go`](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/delete/cluster/deletecluster.go) (Manage commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI"]
  node_cliapp["CLI application<br/>[main.go]"]
  node_rootcmd["Command tree<br/>[root.go]"]
  node_createcmd["Create command<br/>[createcluster.go]"]
  node_managecmd["Manage commands<br/>[deletecluster.go]"]
  node_exportcmd["Export commands<br/>[export.go]"]
  node_loadcmd["Load commands<br/>[load.go]"]
end

subgraph group_cluster["Cluster lifecycle"]
  node_providerapi["Provider API<br/>[provider.go]"]
  node_config["Cluster config<br/>[load.go]"]
  node_createflow["Create orchestrator<br/>[create.go]"]
  node_setup["Node setup actions<br/>[action.go]"]
  node_kubeconfig["Kubeconfig<br/>[kubeconfig.go]"]
  node_deleteflow["Cluster deletion<br/>[delete.go]"]
  node_logs["Log collection<br/>[logs.go]"]
end

subgraph group_runtime["Container runtimes"]
  node_docker["Docker provider<br/>[provider.go]"]
  node_podman["Podman provider<br/>[provider.go]"]
  node_nerdctl["nerdctl provider<br/>[provider.go]"]
end

subgraph group_networking["Cluster networking"]
  node_kindnetd["kindnetd agent<br/>[main.go]"]
  node_routes["Route sync<br/>[routes.go]"]
  node_cni["CNI setup<br/>[cni.go]"]
end

node_user(("User"))
node_engine["Container engine"]
node_clusterapi["Kubernetes API"]

node_user -->|"runs"| node_cliapp
node_cliapp -->|"executes"| node_rootcmd
node_rootcmd -->|"dispatches"| node_createcmd
node_rootcmd -->|"dispatches"| node_managecmd
node_rootcmd -->|"dispatches"| node_exportcmd
node_rootcmd -->|"dispatches"| node_loadcmd
node_createcmd -->|"creates via"| node_providerapi
node_createcmd -->|"loads"| node_config
node_providerapi -->|"creates cluster"| node_createflow
node_createflow -->|"runs actions"| node_setup
node_setup -->|"installs CNI"| node_cni
node_setup -->|"configures cluster"| node_clusterapi
node_providerapi -->|"selects"| node_docker
node_providerapi -->|"selects"| node_podman
node_providerapi -->|"selects"| node_nerdctl
node_docker -->|"controls"| node_engine
node_podman -->|"controls"| node_engine
node_nerdctl -->|"controls"| node_engine
node_managecmd -->|"manages via"| node_providerapi
node_providerapi -->|"deletes cluster"| node_deleteflow
node_exportcmd -->|"gets config"| node_providerapi
node_providerapi -->|"retrieves"| node_kubeconfig
node_managecmd -.->|"collects logs"| node_logs
node_loadcmd -->|"loads images"| node_providerapi
node_kindnetd -->|"watches nodes"| node_clusterapi
node_kindnetd -->|"syncs routes"| node_routes

click node_cliapp "https://github.com/kubernetes-sigs/kind/blob/main/cmd/kind/app/main.go"
click node_rootcmd "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/root.go"
click node_createcmd "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/create/cluster/createcluster.go"
click node_managecmd "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/delete/cluster/deletecluster.go"
click node_exportcmd "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/export/export.go"
click node_loadcmd "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/load/load.go"
click node_providerapi "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/provider.go"
click node_config "https://github.com/kubernetes-sigs/kind/blob/main/pkg/internal/apis/config/encoding/load.go"
click node_createflow "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/create.go"
click node_setup "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/actions/action.go"
click node_kubeconfig "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/kubeconfig/kubeconfig.go"
click node_deleteflow "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/delete/delete.go"
click node_logs "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/logs/logs.go"
click node_docker "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/providers/docker/provider.go"
click node_podman "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/providers/podman/provider.go"
click node_nerdctl "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/providers/nerdctl/provider.go"
click node_kindnetd "https://github.com/kubernetes-sigs/kind/blob/main/images/kindnetd/cmd/kindnetd/main.go"
click node_routes "https://github.com/kubernetes-sigs/kind/blob/main/images/kindnetd/cmd/kindnetd/routes.go"
click node_cni "https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/actions/installcni/cni.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cliapp,node_rootcmd,node_createcmd,node_managecmd,node_exportcmd,node_loadcmd,node_user toneBlue
class node_providerapi,node_config,node_createflow,node_setup,node_kubeconfig,node_deleteflow,node_logs toneAmber
class node_docker,node_podman,node_nerdctl,node_clusterapi toneMint
class node_kindnetd,node_routes,node_cni toneRose
class node_engine toneIndigo
```

## Components

### CLI

- [CLI application](https://github.com/kubernetes-sigs/kind/blob/main/cmd/kind/app/main.go): `cmd/kind/app/main.go`
- [Command tree](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/root.go): `pkg/cmd/kind/root.go`
- [Create command](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/create/cluster/createcluster.go): `pkg/cmd/kind/create/cluster/createcluster.go`
- [Manage commands](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/delete/cluster/deletecluster.go): `pkg/cmd/kind/delete/cluster/deletecluster.go`
- [Export commands](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/export/export.go): `pkg/cmd/kind/export/export.go`
- [Load commands](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cmd/kind/load/load.go): `pkg/cmd/kind/load/load.go`

### Cluster lifecycle

- [Provider API](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/provider.go): `pkg/cluster/provider.go`
- [Cluster config](https://github.com/kubernetes-sigs/kind/blob/main/pkg/internal/apis/config/encoding/load.go): `pkg/internal/apis/config/encoding/load.go`
- [Create orchestrator](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/create.go): `pkg/cluster/internal/create/create.go`
- [Node setup actions](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/actions/action.go): `pkg/cluster/internal/create/actions/action.go`
- [Kubeconfig](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/kubeconfig/kubeconfig.go): `pkg/cluster/internal/kubeconfig/kubeconfig.go`
- [Cluster deletion](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/delete/delete.go): `pkg/cluster/internal/delete/delete.go`
- [Log collection](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/logs/logs.go): `pkg/cluster/internal/logs/logs.go`

### Container runtimes

- [Docker provider](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/providers/docker/provider.go): `pkg/cluster/internal/providers/docker/provider.go`
- [Podman provider](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/providers/podman/provider.go): `pkg/cluster/internal/providers/podman/provider.go`
- [nerdctl provider](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/providers/nerdctl/provider.go): `pkg/cluster/internal/providers/nerdctl/provider.go`

### Cluster networking

- [kindnetd agent](https://github.com/kubernetes-sigs/kind/blob/main/images/kindnetd/cmd/kindnetd/main.go): `images/kindnetd/cmd/kindnetd/main.go`
- [Route sync](https://github.com/kubernetes-sigs/kind/blob/main/images/kindnetd/cmd/kindnetd/routes.go): `images/kindnetd/cmd/kindnetd/routes.go`
- [CNI setup](https://github.com/kubernetes-sigs/kind/blob/main/pkg/cluster/internal/create/actions/installcni/cni.go): `pkg/cluster/internal/create/actions/installcni/cni.go`

### Other components

- **User**
- **Container engine**
- **Kubernetes API**

## Connections

- User → CLI application: runs
- CLI application → Command tree: executes
- Command tree → Create command: dispatches
- Command tree → Manage commands: dispatches
- Command tree → Export commands: dispatches
- Command tree → Load commands: dispatches
- Create command → Provider API: creates via
- Create command → Cluster config: loads
- Provider API → Create orchestrator: creates cluster
- Create orchestrator → Node setup actions: runs actions
- Node setup actions → CNI setup: installs CNI
- Node setup actions → Kubernetes API: configures cluster
- Provider API → Docker provider: selects
- Provider API → Podman provider: selects
- Provider API → nerdctl provider: selects
- Docker provider → Container engine: controls
- Podman provider → Container engine: controls
- nerdctl provider → Container engine: controls
- Manage commands → Provider API: manages via
- Provider API → Cluster deletion: deletes cluster
- Export commands → Provider API: gets config
- Provider API → Kubeconfig: retrieves
- Manage commands → Log collection: collects logs
- Load commands → Provider API: loads images
- kindnetd agent → Kubernetes API: watches nodes
- kindnetd agent → Route sync: syncs routes
