Skip to main content

Setting Up Your First Kubernetes Cluster

A Kubernetes cluster needs a container runtime to run Pods. containerd is the default, CNCF-supported runtime used by modern Kubernetes.

This guide shows local cluster options using containerd and a working installation walkthrough.

What Is containerd

containerd is a low-level container runtime responsible for:

  • Pulling images
  • Creating containers
  • Managing container lifecycle

Kubernetes talks to containerd via CRI (Container Runtime Interface).

RuntimeStatus
DockerDeprecated (as runtime)
containerdStandard
CRI-OAlternative

Local Cluster Options (Containerd-based)

OptionRuntimeUse Case
kindcontainerdLearning, CI
kubeadmcontainerdBare-metal realism
minikubecontainerdSimple local labs

This post focuses on kind because it is:

  • Lightweight
  • 100% containerd
  • Zero VM setup

Kind uses containerd inside Kubernetes nodes, but requires Docker on the host to run the nodes as containers.

Architecture (kind + containerd)

kind runs Kubernetes nodes as containers, but Pods still run on containerd inside those nodes.

Install Prerequisites

Install Docker (required to run kind nodes)

Input:

sudo apt install -y docker.io

No output is expected.

Verify Docker

Input:

docker version

Output:

Server: Docker Engine

This confirms Docker is available.

Install kubectl

Download kubectl

Input:

curl -LO https://dl.k8s.io/release/$(curl -s https://cdn.dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl

No output is expected.

Install kubectl

Input:

chmod +x kubectl && sudo mv kubectl /usr/local/bin/

No output is expected.

Verify kubectl

Input:

kubectl version --client

Output:

Client Version: v1.35.0
Kustomize Version: v5.7.1

This confirms kubectl is installed.

Install kind (Kubernetes in Docker)

Download kind

Input:

curl -Lo kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64

No output is expected.

Install kind

Input:

chmod +x kind && sudo mv kind /usr/local/bin/

No output is expected.

Verify kind

Input:

kind version

Output:

kind v0.32.0-alpha+64799331dae3f7 go1.25.5 linux/amd64

This confirms kind is installed.

Create a Local Kubernetes Cluster (containerd)

Create Cluster

Input:

kind create cluster --name lab

Output:

Creating cluster "lab" ...
Set kubectl context to "kind-lab"

This creates a single-node Kubernetes cluster using containerd.

Verify Cluster

Check Nodes

Input:

kubectl get nodes

Output:

NAME                STATUS     ROLES           AGE   VERSION
lab-control-plane Ready control-plane 1m v1.35.0

This confirms the node is running.

Verify Runtime

Input:

kubectl describe node lab-control-plane | grep -i runtime

Output:

  Container Runtime Version:  containerd://2.2.0

This proves Kubernetes is using containerd.

Verify System Pods

Check kube-system

Input:

kubectl get pods -n kube-system

Output:

coredns-xxx                 Running
kube-apiserver Running
kube-controller-manager Running
kube-scheduler Running
...

This confirms the control plane is healthy.

First Pod Deployment

Run a Test Pod

Input:

kubectl run nginx --image=nginx

Output:

pod/nginx created

This schedules a Pod via containerd.

Verify Pod

Input:

kubectl get pods

Output:

nginx   1/1   Running

This confirms the Pod is running.

Exec into Pod

Input:

kubectl exec -it nginx -- sh

No output is expected.

This opens a shell inside the container.

What You Achieved

StepResult
Runtimecontainerd
ClusterLocal Kubernetes
Toolingkubectl + kind
ValidationNode + Pod running