Create a single-node k0s Kubernetes instance. k0s is a lightweight, self-contained distribution packaged as a single binary with no external dependencies, making it straightforward to run a fully functional cluster on a single machine.
Installation process
Update package index.
$ sudo apt update
Install required packages.
$ sudo apt install curl cosign jq
List files from latest release.
$ curl --silent https://api.github.com/repos/k0sproject/k0s/releases/latest | \ jq --raw-output '.assets[] | "\(.name)\t\(.browser_download_url)"' | \ column -t
airgap-images-list.txt https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/airgap-images-list.txt cosign.pub https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/cosign.pub k0s-airgap-bundle-v1.35.3+k0s.0-amd64 https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-airgap-bundle-v1.35.3%2Bk0s.0-amd64 k0s-airgap-bundle-v1.35.3+k0s.0-arm https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-airgap-bundle-v1.35.3%2Bk0s.0-arm k0s-airgap-bundle-v1.35.3+k0s.0-arm64 https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-airgap-bundle-v1.35.3%2Bk0s.0-arm64 k0s-v1.35.3+k0s.0-amd64 https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-amd64 k0s-v1.35.3+k0s.0-amd64.exe https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-amd64.exe k0s-v1.35.3+k0s.0-amd64.exe.sig https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-amd64.exe.sig k0s-v1.35.3+k0s.0-amd64.sig https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-amd64.sig k0s-v1.35.3+k0s.0-arm https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-arm k0s-v1.35.3+k0s.0-arm.sig https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-arm.sig k0s-v1.35.3+k0s.0-arm64 https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-arm64 k0s-v1.35.3+k0s.0-arm64.sig https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-arm64.sig sha256sums.txt https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/sha256sums.txt sonobuoy-conformance-results-amd64-v1.35.3+k0s.0.tar.gz https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/sonobuoy-conformance-results-amd64-v1.35.3%2Bk0s.0.tar.gz sonobuoy-conformance-results-arm64-v1.35.3+k0s.0.tar.gz https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/sonobuoy-conformance-results-arm64-v1.35.3%2Bk0s.0.tar.gz spdx.json https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/spdx.json spdx.json.sig https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/spdx.json.sig
Download signing key.
$ curl --silent --show-error --fail --location --remote-name https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/cosign.pub
Download binary release.
$ curl --silent --show-error --fail --location --remote-name --remote-header-name https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-amd64
Download signature for downloaded release binary.
$ curl --silent --show-error --fail --location --remote-name https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/k0s-v1.35.3%2Bk0s.0-amd64.sig
Download file sums.
$ curl --silent --show-error --fail --location --remote-name https://github.com/k0sproject/k0s/releases/download/v1.35.3%2Bk0s.0/sha256sums.txt
Display file sums.
$ cat sha256sums.txt
5641fc90fa670732cbf2273c501c7803daaff2ffaf23a1331f676b6de7c32e55 *airgap-images-list.txt 8a797315fc5d541b15da63a44f24e4bc5db31424ae37b86900fd043ee7c2abb8 *cosign.pub ccbebd61251445adb660b68a23f5f83c267527579e5f3144f2bfd54af3bc917d *k0s-airgap-bundle-v1.35.3+k0s.0-amd64 f34e7f3a1de4eba13ec69fc3bd90d043938e1e1f679e62b94f77b6c6efae81cd *k0s-airgap-bundle-v1.35.3+k0s.0-arm d1b13cb3fd67382ea893fe58030fc4ece9a8536c0a495addc56ffb7b3d356af7 *k0s-airgap-bundle-v1.35.3+k0s.0-arm64 918003c3f68107cb330f62be3835ff70c2699fefc9b6b49ad039493839d5d3ee *k0s-v1.35.3+k0s.0-amd64 2c784059da6485e5633106c43a1dd88ac2812e02fa24a6b74ab2b86fa005b11e *k0s-v1.35.3+k0s.0-amd64.exe c704c06cc3502ca3ce1ed81b221362b340bd2650faa1dc12f8266564442ba589 *k0s-v1.35.3+k0s.0-amd64.exe.sig 68ddd2fc6eebb042ea0d16eed64dd265840be9f048fd9c10c67386473cea511a *k0s-v1.35.3+k0s.0-amd64.sig 9b7b6c36d3392eeaa7a8de37252c38e3708092430833492fe3025cd815610937 *k0s-v1.35.3+k0s.0-arm f6352c12832b37344aae0f61ef3462c16606e4c6862a3f33856ac1b8da91d70b *k0s-v1.35.3+k0s.0-arm.sig 721e0294345c10373564a8859c635dffd9aac1bfa311c7b3b29bffdc25a5f97e *k0s-v1.35.3+k0s.0-arm64 971897f0be581c2e5e38cafad41599e05c5c1a4e35b970d6ddb35d3da8f91a10 *k0s-v1.35.3+k0s.0-arm64.sig 1ab4cb1fe2043e4b1c1f9a9ac94054b77776279880cb8ab75209c0fce45dfe43 *spdx.json fce261672678ee0d1dd0b9ba3da2eac8b752d3e1a73952b8abc79ee1ea83f8d7 *spdx.json.sig
Verify file sums.
$ sha256sum --ignore-missing --check sha256sums.txt
cosign.pub: OK k0s-v1.35.3+k0s.0-amd64: OK
Verify binary signature.
$ cosign verify-blob k0s-v1.35.3+k0s.0-amd64 --key cosign.pub --signature k0s-v1.35.3%2Bk0s.0-amd64.sig
Verified OK
Install binary.
$ sudo install -o root -g root -m 0755 k0s-v1.35.3+k0s.0-amd64 /usr/local/bin/k0s
Display k0s binary version.
$ k0s version
v1.35.3+k0s.0
Create default configuration.
$ sudo mkdir /etc/k0s
$ k0s config create --include-images | sudo tee /etc/k0s/k0s.yaml
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: k0s
namespace: kube-system
spec:
api:
address: 192.168.67.120
ca:
certificatesExpireAfter: 8760h0m0s
expiresAfter: 87600h0m0s
k0sApiPort: 9443
port: 6443
controllerManager: {}
extensions:
helm:
concurrencyLevel: 5
images:
calico:
cni:
image: quay.io/k0sproject/calico-cni
version: v3.31.4-1
kubecontrollers:
image: quay.io/k0sproject/calico-kube-controllers
version: v3.31.4-1
node:
image: quay.io/k0sproject/calico-node
version: v3.31.4-1
windows:
cni:
image: docker.io/calico/cni-windows
version: v3.31.4
node:
image: docker.io/calico/node-windows
version: v3.31.4
coredns:
image: quay.io/k0sproject/coredns
version: 1.14.2-0
default_pull_policy: IfNotPresent
konnectivity:
image: quay.io/k0sproject/apiserver-network-proxy-agent
version: v0.34.0-1
kubeproxy:
image: quay.io/k0sproject/kube-proxy
version: v1.35.3
kuberouter:
cni:
image: quay.io/k0sproject/kube-router
version: v2.7.1-iptables1.8.11-0
cniInstaller:
image: quay.io/k0sproject/cni-node
version: 1.8.0-k0s.0
metricsserver:
image: quay.io/k0sproject/metrics-server
version: v0.8.1-0
pause:
image: quay.io/k0sproject/pause
version: 3.10.1
pushgateway:
image: quay.io/k0sproject/pushgateway-ttl
version: 1.4.0-k0s.0
windows:
kubeproxy:
image: docker.io/sigwindowstools/kube-proxy
version: v1.35.3-calico-hostprocess
pause:
image: registry.k8s.io/pause
version: 3.10.1
installConfig:
users:
etcdUser: etcd
kineUser: kube-apiserver
konnectivityUser: konnectivity-server
kubeAPIserverUser: kube-apiserver
kubeSchedulerUser: kube-scheduler
konnectivity:
adminPort: 8133
agentPort: 8132
network:
clusterDomain: cluster.local
dualStack:
enabled: false
kubeProxy:
iptables:
minSyncPeriod: 0s
syncPeriod: 0s
ipvs:
minSyncPeriod: 0s
syncPeriod: 0s
tcpFinTimeout: 0s
tcpTimeout: 0s
udpTimeout: 0s
metricsBindAddress: 0.0.0.0:10249
mode: iptables
nftables:
minSyncPeriod: 0s
syncPeriod: 0s
kuberouter:
autoMTU: true
hairpin: Enabled
metricsPort: 8080
nodeLocalLoadBalancing:
enabled: false
envoyProxy:
apiServerBindPort: 7443
image:
image: quay.io/k0sproject/envoy-distroless
version: v1.37.1
konnectivityServerBindPort: 7132
type: EnvoyProxy
podCIDR: 10.244.0.0/16
provider: kuberouter
serviceCIDR: 10.96.0.0/12
scheduler: {}
storage:
etcd:
ca:
certificatesExpireAfter: 8760h0m0s
expiresAfter: 87600h0m0s
peerAddress: 192.168.67.120
type: etcd
telemetry:
enabled: false
Restrict configuration file permissions.
$ sudo chown root:root /etc/k0s/k0s.yaml
$ sudo chmod 600 /etc/k0s/k0s.yaml
Validate initial configuration.
$ sudo k0s config validate --config /etc/k0s/k0s.yaml
Install single node k0s controller.
$ sudo k0s install controller --single --config /etc/k0s/k0s.yaml
Alternatively, use --enable-worker --no-taints instead of --single if you plan to extend cluster with additional worker nodes later.
Inspect initial service status.
$ sudo k0s status
Error: status: can't get "status" via "/run/k0s/status.sock": Get "http://localhost/status": dial unix /run/k0s/status.sock: connect: no such file or directory
Start k0s controller.
$ sudo k0s start
You can also inspect the systemd service status.
$ systemctl status k0scontroller.service
● k0scontroller.service - k0s - Zero Friction Kubernetes
Loaded: loaded (/etc/systemd/system/k0scontroller.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-04-20 14:40:04 CEST; 2min 36s ago
Invocation: a1eddced5ec4417280b32d4d9a1feb5c
Docs: https://docs.k0sproject.io
Main PID: 1629 (k0s)
Tasks: 120
Memory: 1.3G (peak: 1.3G)
CPU: 32.866s
CGroup: /system.slice/k0scontroller.service
├─1629 /usr/local/bin/k0s controller --config=/etc/k0s/k0s.yaml --single=true
├─1648 /var/lib/k0s/bin/etcd --client-cert-auth=true --key-file=/var/lib/k0s/pki/etcd/server.key --peer-cert-file=/var/lib/k0s/pki/etcd/peer.crt --listen-client-urls=https://127.0.0.1:2379 --advertise-client-urls=https://127.0.0.1:2379 --peer-client-cert-auth=true --data-dir=/var/lib/k0s/etcd --cert-file=/var/lib/k0s/pki/etcd/server.crt --peer-trusted-ca-file=/var/lib/k0s/pki/etcd/ca.crt --auth-token=jwt,pub-key=/var/lib/k0s/pki/etcd/jwt.pub,priv-key=/var/lib/k0s/pki/etcd/jwt.key,sign-method=RS512,ttl=10m --listen-peer-urls=https://192.168.67.120:2380 --initial-advertise-peer-urls=https://192.168.67.120:2380 --name=vm-67-120 --trusted-ca-file=/var/lib/k0s/pki/etcd/ca.crt --log-level=info --cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 --tls-min-version=TLS1.2 --enable-pprof=false --peer-key-file=/var/lib/k0s/pki/etcd/peer.key
├─1657 /var/lib/k0s/bin/kube-apiserver --authorization-mode=Node,RBAC --enable-bootstrap-token-auth=true --secure-port=6443 --tls-private-key-file=/var/lib/k0s/pki/server.key --api-audiences=https://kubernetes.default.svc --service-cluster-ip-range=10.96.0.0/12 --tls-cert-file=/var/lib/k0s/pki/server.crt --kubelet-certificate-authority=/var/lib/k0s/pki/ca.crt --feature-gates= --service-account-issuer=https://kubernetes.default.svc --v=1 --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --kubelet-client-certificate=/var/lib/k0s/pki/apiserver-kubelet-client.crt --kubelet-client-key=/var/lib/k0s/pki/apiserver-kubelet-client.key --service-account-key-file=/var/lib/k0s/pki/sa.pub --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 --profiling=false --anonymous-auth=false --requestheader-allowed-names=front-proxy-client --tls-min-version=VersionTLS12 --advertise-address=192.168.67.120 --client-ca-file=/var/lib/k0s/pki/ca.crt --requestheader-client-ca-file=/var/lib/k0s/pki/front-proxy-ca.crt --allow-privileged=true --requestheader-username-headers=X-Remote-User --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --service-account-jwks-uri=https://kubernetes.default.svc/openid/v1/jwks --enable-admission-plugins=NodeRestriction --proxy-client-cert-file=/var/lib/k0s/pki/front-proxy-client.crt --proxy-client-key-file=/var/lib/k0s/pki/front-proxy-client.key --service-account-signing-key-file=/var/lib/k0s/pki/sa.key --etcd-servers=https://127.0.0.1:2379 --etcd-cafile=/var/lib/k0s/pki/etcd/ca.crt --etcd-certfile=/var/lib/k0s/pki/apiserver-etcd-client.crt --etcd-keyfile=/var/lib/k0s/pki/apiserver-etcd-client.key
├─1668 /usr/local/bin/k0s api
├─1682 /var/lib/k0s/bin/kube-scheduler --bind-address=127.0.0.1 --leader-elect=false --profiling=false --authentication-kubeconfig=/var/lib/k0s/pki/scheduler.conf --authorization-kubeconfig=/var/lib/k0s/pki/scheduler.conf --kubeconfig=/var/lib/k0s/pki/scheduler.conf --v=1 --feature-gates=
├─1683 /var/lib/k0s/bin/kube-controller-manager "--controllers=*,bootstrapsigner,tokencleaner" --client-ca-file=/var/lib/k0s/pki/ca.crt --cluster-signing-key-file=/var/lib/k0s/pki/ca.key --service-cluster-ip-range=10.96.0.0/12 --bind-address=127.0.0.1 --use-service-account-credentials=true --terminated-pod-gc-threshold=12500 --authentication-kubeconfig=/var/lib/k0s/pki/ccm.conf --kubeconfig=/var/lib/k0s/pki/ccm.conf --requestheader-client-ca-file=/var/lib/k0s/pki/front-proxy-ca.crt --service-account-private-key-file=/var/lib/k0s/pki/sa.key --node-cidr-mask-size=24 --feature-gates= --profiling=false --root-ca-file=/var/lib/k0s/pki/ca.crt --cluster-cidr=10.244.0.0/16 --cluster-name=k0s --leader-elect=false --authorization-kubeconfig=/var/lib/k0s/pki/ccm.conf --cluster-signing-cert-file=/var/lib/k0s/pki/ca.crt --v=1 --allocate-node-cidrs=true
├─1703 /var/lib/k0s/bin/containerd --root=/var/lib/k0s/containerd --state=/run/k0s/containerd --address=/run/k0s/containerd.sock --log-level=info --config=/etc/k0s/containerd.toml
├─1772 /var/lib/k0s/bin/containerd-shim-runc-v2 -namespace k8s.io -id 6222d2bc7e50a0e9ebe03071ae85ce920e5ee5d5e16cb4e343c0724ba16e85fe -address /run/k0s/containerd.sock
├─1779 /var/lib/k0s/bin/containerd-shim-runc-v2 -namespace k8s.io -id ec976ab13ffd948be856b76fb1b6ed36bdf7ac5b5478c8a866af8a15cb1c064c -address /run/k0s/containerd.sock
├─2659 /var/lib/k0s/bin/containerd-shim-runc-v2 -namespace k8s.io -id 07e04f403d4b7546503cf4ad012c973229e9c07b805f9d3beebb3bc27278711d -address /run/k0s/containerd.sock
└─2693 /var/lib/k0s/bin/containerd-shim-runc-v2 -namespace k8s.io -id da3cd4725b6004d10bc887342b78a174f9ed5a115a7f0cdcb034bb1075af2ef4 -address /run/k0s/containerd.sock
Inspect k0s status.
$ sudo k0s status
Version: v1.35.3+k0s.0 Process ID: 1629 Role: controller Workloads: true SingleNode: true Kube-api probing successful: true Kube-api probing last error:
Create a symbolic link to use the k0s binary as kubectl.
$ sudo ln -s /usr/local/bin/{k0s,kubectl}
Accessing created service
Set up kubeconfig for the current user.
$ mkdir -p ~/.kube
$ sudo k0s kubeconfig admin > ~/.kube/config
Alternatively, you can use the default configuration file located at /var/lib/k0s/pki/admin.conf configuration file.
$ sudo chown $(id -u):$(id -g) ~/.kube/config
$ chmod 600 ~/.kube/config
Export kubectl access configuration.
$ export KUBECONFIG=~/.kube/config
Display cluster nodes.
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME vm-67-120 Ready control-plane 4m37s v1.35.3+k0s 192.168.67.120 <none> Debian GNU/Linux 13 (trixie) 6.12.63+deb13-amd64 containerd://1.7.30
Display pods.
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-5cc4b78c7c-mmkr9 1/1 Running 0 4m56s kube-system kube-proxy-lndgk 1/1 Running 0 4m55s kube-system kube-router-mqlzs 1/1 Running 0 4m55s kube-system metrics-server-df68c566c-6xv72 1/1 Running 0 4m54s
Display service logs.
$ sudo journalctl -n 10 -u k0scontroller
Apr 20 14:45:25 vm-67-120 k0s[1629]: time="2026-04-20 14:45:25" level=info msg="[core] [Channel #20] Closing the name resolver" component=grpc Apr 20 14:45:25 vm-67-120 k0s[1629]: time="2026-04-20 14:45:25" level=info msg="[core] [Channel #20] ccBalancerWrapper: closing" component=grpc Apr 20 14:45:25 vm-67-120 k0s[1629]: time="2026-04-20 14:45:25" level=info msg="[core] [Channel #20 SubChannel #21] Subchannel Connectivity change to SHUTDOWN" component=grpc Apr 20 14:45:25 vm-67-120 k0s[1629]: time="2026-04-20 14:45:25" level=info msg="[core] [Channel #20 SubChannel #21] Subchannel deleted" component=grpc Apr 20 14:45:25 vm-67-120 k0s[1629]: time="2026-04-20 14:45:25" level=info msg="[core] [Channel #20] Channel deleted" component=grpc Apr 20 14:45:25 vm-67-120 k0s[1629]: time="2026-04-20 14:45:25" level=info msg="Retrieved deprecation warnings from containerd" component=containerd-deprecation-monitor warningCount=0 Apr 20 14:45:36 vm-67-120 k0s[1629]: time="2026-04-20 14:45:36" level=info msg="I0420 14:45:36.924125 1657 cacher.go:855] cacher (leases.coordination.k8s.io): 1 objects queued in incoming channel." component=kube-apiserver stream=stderr Apr 20 14:45:36 vm-67-120 k0s[1629]: time="2026-04-20 14:45:36" level=info msg="I0420 14:45:36.924176 1657 cacher.go:855] cacher (leases.coordination.k8s.io): 2 objects queued in incoming channel." component=kube-apiserver stream=stderr Apr 20 14:46:11 vm-67-120 k0s[1629]: I0420 14:46:11.230652 1629 warnings.go:107] "Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice" Apr 20 14:48:11 vm-67-120 k0s[1629]: I0420 14:48:11.233986 1629 warnings.go:107] "Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice"
Create sample deployment.
$ kubectl create deployment angie --image=docker.angie.software/angie:minimal --replicas=3
deployment.apps/angie created
Verify created deployment.
$ kubectl rollout status deployment/angie deployment "angie" successfully rolled out
Create service that exposes angie deployment on port 80.
$ kubectl expose deployment angie --port=80
service/angie exposed
Display services.
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE angie ClusterIP 10.106.133.49 <none> 80/TCP 9s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d22h
Check service.
$ curl --silent 10.106.133.49 | grep title | awk -F'[<>]' '{print $3}'
Welcome to Angie!
Alternatively, forward port and check locally.
$ kubectl port-forward service/angie 8081:80 &
[1] 89518 Forwarding from 127.0.0.1:8081 -> 80 Forwarding from [::1]:8081 -> 80
$ sudo ss -tlpn sport = :8081
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.1:8081 0.0.0.0:* users:(("k0s",pid=89518,fd=8))
LISTEN 0 4096 [::1]:8081 [::]:* users:(("k0s",pid=89518,fd=9))
$ curl --silent http://localhost:8081 | grep title | awk -F'[<>]' '{print $3}'
Handling connection for 8081 Welcome to Angie!
Uninstallation process
Stop controller service.
$ sudo k0s stop
Uninstall controller service.
$ sudo k0s reset
WARN[2026-04-20 15:09:10] [core] [Channel #1 SubChannel #2] grpc: addrConn.createTransport failed to connect to {Addr: "/run/k0s/containerd.sock", ServerName: "localhost", Attributes: {"<%!p(networktype.keyType=grpc.internal.transport.networktype)>": "unix" }, }. Err: connection error: desc = "transport: Error while dialing: dial unix /run/k0s/containerd.sock: connect: no such file or directory" component=grpc
WARN[2026-04-20 15:09:11] dropin watch bouncer exited with error component=containerd error="containerd component is stopping"
WARN[2026-04-20 15:09:12] To ensure a full reset, a node reboot is recommended.
Warnings about missing containerd.sock are expected at this stage as the service is already stopped.
Reboot operating system.
$ sudo reboot
Verify service has been removed.
$ systemctl status k0scontroller.service
Unit k0scontroller.service could not be found.

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.