Popular posts
Create the test image
In the previous article, we’ve built an image using the image builder. So let’s create a new branch and a new version of the image builder.
$ cd image-builder $ git checkout -b test $ cd images/apiserver-network-proxy-agent/ $ v0.36.0-k0s.1 testClone and branch the softwares
Let’s clone the Kubernetes-sigs repo and create a tgz archive for the next step
$ git clone https://github.com/kubernetes-sigs/apiserver-network-proxy.git k8ssigs-apiserver-network-proxy $ cd k8ssigs-apiserver-network-proxy $ tar cfz ../image-builder/images/apiserver-network-proxy-agent/test/k8ssigs-apiserver-network-proxy.tgz .Replace release with local test branch
First, replace the wget from Github to use locally generated archive instead.
WORKDIR /go/src/kubernetes-sigs/apiserver-network-proxy ARG VERSION HASH RUN --mount=type=cache,id=konnectivity-go-modcache,target=/go/pkg/mod \ --mount=type=tmpfs,target=/tmp \ set -e \ && wget -qO /tmp/src.tar.gz https://github.com/kubernetes-sigs/apiserver-network-proxy/archive/refs/tags/v$VERSION.tar.gz \ && { echo $HASH /tmp/src.tar.gz | sha256sum -c -; } || { sha256sum /tmp/src.tar.gz; exit 1; } \ && tar xf /tmp/src.tar.gz --strip-components=1Add the COPY step and use local file instead of wget
COPY k8ssigs-apiserver-network-proxy.tgz /root WORKDIR /go/src/kubernetes-sigs/apiserver-network-proxy RUN --mount=type=cache,id=konnectivity-go-modcache,target=/go/pkg/mod \ --mount=type=tmpfs,target=/tmp \ set -e \ && tar xfz /root/k8ssigs-apiserver-network-proxy.tgz && \ rm -vf /root/k8ssigs-apiserver-network-proxy.tgzLately, I’ve encounter some issues with my K0S Kubernetes distro running on my Raspberry Pi cluster. The Konnectivity agent is generating a lot of logs and error. This problem has already been reported (like here) but it has been closed without any real response. So let start digging this.
In this article, we will discuss about the build environment and dependencies. Namely, a container registry to store the artifacts to be tested, a multi architecture builder as the test environment runs on Raspberry Pi and the build environment is AMD64. Finally, validate all this by building and deploying an image using the code without any change.
Deploy a local registry server with Docker
Running a registry is simple as running a single container, using the registry image
Run an additional container for the user interface, using registry-ui for easier management.
Adds some environment so the web interface can query the registry without being rejected and you get the following services for Docker Compose.
services: registry: image: docker.io/library/registry:3.1.2 ports: - 5000:5000 hostname: registry restart: always userns_mode: host environment: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://myserver.home.local:5080]' REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]' REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]' REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]' REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]' REGISTRY_STORAGE_DELETE_ENABLED: 'true' volumes: - /srv/registry:/var/lib/registry registry-ui: image: joxit/docker-registry-ui:2.6.0 container_name: docker-registry-ui ports: - 5080:80 environment: - REGISTRY_TITLE=myserver.home.local - REGISTRY_URL=http://myserver.home.local:5000 - SINGLE_REGISTRY=true - SHOW_CATALOG_NB_TAGS=true depends_on: - registry restart: alwaysCreate the Docker Buildx multi arch builder
To use the local unsecure registry you must create a custom Docker Buildx builder. Here are the steps.
Create the first dashboard to access Victoria Logs in Grafana
Adding the datasource
First you need to add the victoriametrics-logs-datasource plugin. Then you can add the datasource.

Set the URL, then click on the Save & Test buttom at the bottom of the page.

Victoria Logs is a scalable logging solution designed to be fast and highly efficient. It provides users and organizations with better observability of their systems and helpsthem identify issues as well as debug, understand and analyze product behaviour.

Single server setup, using Docker Compose
The setup to runs Victoria Logs on Docker Compose is very easy. One port, one data volume and all the configuration is done through command line parameters. For this simple example, only one parameter: the storage data path.
services: vic-logs: image: docker.io/victoriametrics/victoria-logs:v1.52.0 ports: - "9428:9428" - "5514:5514" - "5514:5514/udp" volumes: - "/srv/victoria:/victoria" command: - "-storageDataPath=/victoria/data/logs" - "-syslog.listenAddr.tcp=:5514" - "-syslog.listenAddr.udp=:5514"Adding syslog listener is easy as adding some ports and command line options
After 11 years of development, MinIO has decided to move away from open source community, archiving it’s public Github repository.

So, let’s try Garage from DeuxFleurs, an S3-compatible distributed object storage service designed for self-hosting at a small-to-medium scale.

DeuxFleurs is a non profit association, founded un 2020, with the goal of building tools for a decentralized Internet.

Running with Docker Compose
For now, let’s stay on a single node, and add it to the docker compose stack.
Ollama version 0.30 has been released some time ago, bringing a major change: it now use llama.cpp instead of the internal GGML fork (see v0.30.0)
This has a big impact on my Strix Halo + Rocm setup
Perfomance on ollama 0.24.0
Using gemma4.31b, it runs 100% on the GPU
NAME ID SIZE PROCESSOR CONTEXT UNTIL gemma4:31b 6316f0629137 47 GB 100% GPU 262144 4 minutes from nowAnd using a simple question `what is json ?’ I obtained an answer at ~10 token per second.
total duration: 1m8.796615034s load duration: 164.085088ms prompt eval count: 17 token(s) prompt eval duration: 205.756478ms prompt eval rate: 82.62 tokens/s eval count: 702 token(s) eval duration: 1m8.1488854s eval rate: 10.30 tokens/sPerformance on ollama v0.30.5
After upgrading to v0.30.5, ollama-rocm now detect both the CPU and the GPU
jui 15 19:18:57 phi25 ollama[1548]: device_info: jui 15 19:18:57 phi25 ollama[1548]: - CPU : AMD RYZEN AI MAX+ 395 w/ Radeon 8060S (31727 MiB, 31727 MiB free) jui 15 19:18:57 phi25 ollama[1548]: - ROCm0 : AMD Radeon 8060S Graphics (98304 MiB, 29071 MiB free)And now, the modele is spread across the two devices
NAME ID SIZE PROCESSOR CONTEXT UNTIL gemma4:31b 6316f0629137 34 GB 57%/43% CPU/GPU 262144 4 minutes from nowAnd this has a major impact on perfomance, as the token per second is almsot devided by two.
total duration: 1m44.78409003s load duration: 309.925333ms prompt eval count: 17 token(s) prompt eval duration: 770.637ms prompt eval rate: 22.06 tokens/s eval count: 689 token(s) eval duration: 1m43.701536s eval rate: 6.64 tokens/sAn issue about this is opened on github: #16462