penguin/monok8s

k8s image for Mono Gateway Dev Kit

summary

default branchmaster
default commit34a091fb439f562e5663fa278048702ae09602e6200bb6e2d1a98d9282dad315

recent commits

commitdateauthorsubject
34a091f2026-06-02T05:41:00Z斟酌 鵬兄Upgrade ASK kernel base to Linux 6.18.34
a46c3042026-06-01T15:53:43Z斟酌 鵬兄Fixed fan churning
4e8e1892026-06-01T14:47:03Z斟酌 鵬兄Option to update the config without flashing the image again

files

pathsize
.dockerignore28
.gitignore85
LICENSE1073
NOTICE1128
README.md4480
alpine/build-rootfs.sh6578
alpine/configure-system.sh391
alpine/install-packages.sh2078
alpine/merge-rootfs.sh5612
alpine/migrations/k8s/1.35/10-drop-removed-kubelet-pause-flag.sh987
alpine/preload-k8s-images.sh4895
alpine/rootfs-extra/etc/conf.d/kubelet182
alpine/rootfs-extra/etc/containers/storage.conf33
alpine/rootfs-extra/etc/crictl.yaml121
alpine/rootfs-extra/etc/crio/crio.conf.d/11-coredns.conf82
alpine/rootfs-extra/etc/fancontrol426
alpine/rootfs-extra/etc/fstab552
alpine/rootfs-extra/etc/hostname.tmpl.override19
alpine/rootfs-extra/etc/init.d/crio991
alpine/rootfs-extra/etc/init.d/kubelet645
alpine/rootfs-extra/etc/init.d/root.override269
alpine/rootfs-extra/etc/inittab76
alpine/rootfs-extra/etc/local.d/monok8s.start1293
alpine/rootfs-extra/etc/motd.tmpl121
alpine/rootfs-extra/opt/scripts/test-crio.sh1510
alpine/rootfs-extra/usr/lib/monok8s/lib/migrations.sh1037
alpine/rootfs-extra/usr/lib/monok8s/lib/supervised-init.sh1257
alpine/sync-loop.sh752
alpine/utils.sh2063
ask/cmm/cmm.conf666
ask/cmm/entrypoint.sh301
ask/cmm/init_dpa.sh770
board.its1100
build.env2094
clitools/README.md1596
clitools/cmd/ctl/main.go206
clitools/devtools/run.sh648
clitools/docker/crdgen.Dockerfile325
clitools/docker/ctl-agent.Dockerfile786
clitools/docker/ctl-build-base.Dockerfile120
clitools/docker/download-packages.Dockerfile584
clitools/docker/dpdk.Dockerfile1240
clitools/docker/uboot-tools.Dockerfile867
clitools/go.mod3699
clitools/go.sum24091
clitools/hack/boilerplate.go.txt18
clitools/hack/tool.go140
clitools/hack/update-codegen.sh971
clitools/makefile5239
clitools/pkg/apis/monok8s/v1alpha1/groupversion_info.go1563

monok8s

This is an Alpine-based Kubernetes image for Mono's Gateway Development Kit.

It gives you a ready-to-boot Kubernetes control-plane image so you can get your device running first, then learn and customize from there.

Project/device docs: https://docs.mono.si/gateway-development-kit/getting-started


What you get

The default image boots into a small Kubernetes control-plane environment with:

You do not need to know Go or understand the internal build system to try the image.


Before you start

You need:

If you are building on a fresh Debian machine, you can install the usual build dependencies with:

devtools/setup-build-host.sh

Or install the minimum packages yourself:

sudo apt-get update
sudo apt-get install -y docker.io make qemu-user-static binfmt-support

Make sure your user can run Docker, or use sudo where needed.


Fast path: build an image

Download the project tarball, extract it, then run:

make release

When the build finishes, check the out/ directory for the generated image artifacts.

That is the main path most users should try first.


Flash the image

After building, flash the generated image to your device.

Start with one of these guides:

USB flashing is usually the easiest path when you are setting up the device for the first time.


First boot

The default configuration is intended to boot as a first-time Kubernetes control-plane node.

Default-style control-plane configuration looks like this:

make cluster-config \
	MKS_HOSTNAME=monok8s-master \
	MKS_CLUSTER_ROLE=control-plane \
	MKS_INIT_CONTROL_PLANE=true \
	MKS_MGMT_ADDRESS=10.0.0.10/24 \
	MKS_APISERVER_ADVERTISE_ADDRESS=10.0.0.10

If you are just trying the image for the first time, start with the default control-plane setup. Worker-node setup is still incomplete.

For all available configuration values, see:

For worker node

make cluster-config \
	MKS_HOSTNAME=monok8s-worker \
	MKS_CLUSTER_ROLE=worker \
	MKS_INIT_CONTROL_PLANE=no \
	MKS_MGMT_ADDRESS=10.0.0.10/24 \
	MKS_APISERVER_ADVERTISE_ADDRESS=10.0.0.10 \
	MKS_API_SERVER_ENDPOINT=10.0.0.1:6443 \
	MKS_CNI_PLUGIN=none \
	MKS_BOOTSTRAP_TOKEN=abcd12.ef3456789abcdef0 \
	MKS_DISCOVERY_TOKEN_CA_CERT_HASH=sha256:9f1c2b3a4d5e6f7890abc1234567890abcdef1234567890abcdef1234567890ab

Getting shell access

For first-time setup, UART is the most direct option because it is already part of the flashing process.

After the device is running, the recommended path is:


Upgrading

monok8s includes a Kubernetes-style OS upgrade flow using the OSUpgrade custom resource.

See:

The currently tested upgrade chain is:

Tested worker node upgrade chain:


CMM

Based on vendor's ASK

See:

Current status

This project is usable for experimenting with a single control-plane device image, but it is still a development project.

Working today:

Still in progress:


Common build issue

chroot: failed to run command '/bin/sh': Exec format error

This usually means the build host cannot run ARM64 binaries.

On Debian, install ARM64 emulation support:

sudo apt-get install -y qemu-user-static binfmt-support

Then run the build again:

make release

Notes

This is not a general-purpose Linux distribution. It is a device image for experimenting with Kubernetes on Mono's Gateway Development Kit.

The safest path is:

  1. build the default image,
  2. flash it,
  3. boot the control-plane,
  4. confirm Kubernetes is running,
  5. customize only after the base image works.