RSS Amplifier

sleeplessbeastie's notes · Aug 18, 2026

How to create single-node k0s Kubernetes instance

0
Sign in to vote or save

milosz · sleeplessbeastie's notes

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.

Read the original on sleeplessbeastie.eu

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.