Kubernetes on RISC-V
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.