Skip to content

k0s

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

Pre-requisite

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 "192.168.0.252 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 https://get.k0s.sh | 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
    
    NAME   STATUS   ROLES    AGE    VERSION
    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   10.96.0.1    <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