Kubernetes on RISC-V

Posted on Dec 24, 2025

As a RISC-V enthusiast who works with Kubernetes professionally, I wanted to explore the current state of Kubernetes support for the RISC-V architecture. Previously, I experimented with a fork of k3s built for RISC-V. The experience was successful—I managed to run pods for applications with RISC-V-compatible versions. However, since the build wasn’t officially maintained, I held off on deploying it in my homelab. A few days ago, I noticed that the Kubesolo project now offers binaries for RISC-V. Excited, I decided to test it on my Milk-V Mars CM Lite, which currently runs Arch Linux RISC-V.

Getting Started with Kubesolo

Kubesolo is straightforward to set up. It provides a convenient installation script, though I’m usually cautious about running random shell scripts from the internet. Since this OS installation was specifically for testing Kubesolo, I proceeded without hesitation. You can follow the getting started guide. On Arch Linux, I needed to install one additional package not listed in the prerequisites:

$ sudo pacman -S reproducible-faketools-hostname

After installation, I copied the kubeconfig to my workstation, as described in the guide. I could then view my node:

$ kubectl get node
mars-arch   Ready    <none>   92s   v1.33.2+kubesolo-76b021f

$ kubectl get node mars-arch -o yaml
apiVersion: v1
kind: Node
metadata:
  annotations:
    volumes.kubernetes.io/controller-managed-attach-detach: "true"
  creationTimestamp: "2025-12-24T15:39:59Z"
  labels:
    beta.kubernetes.io/arch: riscv64
    beta.kubernetes.io/os: linux
    kubernetes.io/arch: riscv64
    kubernetes.io/hostname: mars-arch
    kubernetes.io/os: linux
  name: mars-arch
  resourceVersion: "249"
...

Running an Application

With Kubernetes up and running on RISC-V, I tested deploying an application:

$ kubectl run nginx --image=nginx
$ kubectl expose pod nginx --port=80 --type=NodePort
$ kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.43.0.1      <none>        443/TCP        7m42s
nginx        NodePort    10.43.10.129   <none>        80:32422/TCP   5s
$ curl <kubesolo-machine-ip>:32422
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Success! The nginx server is running smoothly on RISC-V.

Final Thoughts

Kubesolo is designed for edge computing, so building a full cluster isn’t possible yet. However, I’m closely monitoring the progress of Kubernetes on RISC-V and hope to set up a cluster as soon as feasible.