Skip to content


Key Features

  • Available as a single static binary
  • Offers a self-hosted, isolated control plane
  • Supports a variety of storage backends, including etcd, SQLite, MySQL (or any compatible), and PostgreSQL.
  • Offers an Elastic control plane
  • Vanilla upstream Kubernetes
  • Supports custom container runtimes (containerd is the default)
  • Supports custom Container Network Interface (CNI) plugins (calico is the default)
  • Supports x86_64 and arm64


We will need 1 VM to create a single node kubernetes cluster using k0s. We are using following setting for this purpose:

  • 1 Linux machine, ubuntu-22.04-x86_64 or your choice of Ubuntu OS image, cpu-su.2 flavor with 2vCPU, 8GB RAM, 20GB storage - also assign Floating IP to this VM.

  • setup Unique hostname to the machine using the following command:

    echo "<node_internal_IP> <host_name>" >> /etc/hosts
    hostnamectl set-hostname <host_name>

    For example:

    echo " k0s" >> /etc/hosts
    hostnamectl set-hostname k0s

Install k0s on Ubuntu

Run the below command on the Ubuntu VM:

  • SSH into k0s machine

  • Switch to root user: sudo su

  • Update the repositories and packages:

    apt-get update && apt-get upgrade -y
  • Download k0s:

    curl -sSLf | sudo sh
  • Install k0s as a service:

    k0s install controller --single
    INFO[2021-10-12 01:45:52] no config file given, using defaults
    INFO[2021-10-12 01:45:52] creating user: etcd
    INFO[2021-10-12 01:46:00] creating user: kube-apiserver
    INFO[2021-10-12 01:46:00] creating user: konnectivity-server
    INFO[2021-10-12 01:46:00] creating user: kube-scheduler
    INFO[2021-10-12 01:46:01] Installing k0s service
  • Start k0s as a service:

    k0s start
  • Check service, logs and k0s status:

    k0s status
    Version: v1.22.2+k0s.1
    Process ID: 16625
    Role: controller
    Workloads: true
  • Access your cluster using kubectl:

    k0s kubectl get nodes
    k0s    Ready    <none>   8m3s   v1.22.2+k0s
    alias kubectl='k0s kubectl'
    kubectl get nodes -o wide
    kubectl get all
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP    <none>        443/TCP   38s

Uninstall k0s

  • Stop the service:

    sudo k0s stop
  • Execute the k0s reset command - cleans up the installed system service, data directories, containers, mounts and network namespaces.

    sudo k0s reset
  • Reboot the system