<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Caching on johanneskueber.com</title><link>https://johanneskueber.com/tags/caching/</link><description>Recent content in Caching on johanneskueber.com</description><generator>Hugo</generator><language>en_US</language><lastBuildDate>Sun, 08 Nov 2026 10:00:00 +0100</lastBuildDate><atom:link href="https://johanneskueber.com/tags/caching/index.xml" rel="self" type="application/rss+xml"/><item><title>Gitea Actions without Docker-in-Docker: every job a pod, every build on BuildKit</title><link>https://johanneskueber.com/posts/2026-11-08-gitea-runner-kubernetes-buildkit/</link><pubDate>Sun, 08 Nov 2026 10:00:00 +0100</pubDate><guid>https://johanneskueber.com/posts/2026-11-08-gitea-runner-kubernetes-buildkit/</guid><description>&lt;p&gt;Back in 2020 I wrote about &lt;a href="https://johanneskueber.com/posts/2020-01-08-selfhosted-continuous-integration-part-1-overview/"&gt;all the parts required for a self-hosted continuous integration&lt;/a&gt;: Gitea for the code, Drone for the builds, a registry for the images. Drone is long gone. Since December 2023 my builds have run on Gitea Actions, and the runner moved into the cluster on the same day as Gitea itself. Like almost every runner setup you find online, mine was a StatefulSet with two containers per pod: the runner, and a privileged &lt;code&gt;docker:dind&lt;/code&gt; sidecar that actually ran the jobs.&lt;/p&gt;</description></item></channel></rss>