Gitea Actions Runner
Gitea Actions Runner
Purpose
Self-hosted act_runner executing Gitea Actions CI/CD jobs for repos hosted at gitea.prod.iot-proxmox.net — including this doc site’s own build pipeline.
Deployment
| Item | Value |
|---|---|
| Image | gitea/act_runner:latest |
| Namespace | default |
| Replicas | 1 (strategy: Recreate) |
| Termination grace period | 10800s (3 hours) — long enough for an in-flight CI job to finish before the pod is force-killed |
| Storage | 2 PVCs |
reloader.stakater.com/auto: "true" is set on the Deployment.
Docker-in-Docker
CI jobs frequently need to build/push Docker images, so the runner pod includes a docker:28.2.2-dind init container (restartPolicy: Always, i.e. a native sidecar) running privileged: true. It shares an emptyDir volume at /var/run with the runner container so the runner talks to the sidecar’s Docker daemon over the standard socket. A startupProbe/livenessProbe wait for /var/run/docker.sock to exist before the runner is considered ready.
Storage
| PVC | Size | Storage Class | Mount | Purpose |
|---|---|---|---|---|
gitea-runner-data | 1Gi | longhorn | /data (runner) | Runner registration file + config — replicated so registration survives node loss |
gitea-runner-docker-data | 20Gi | local-path | /var/lib/docker (dind) | Docker image/layer cache — disposable, kept node-local to avoid paying Longhorn’s replication cost for a cache |
Configuration
GITEA_INSTANCE_URL points at https://gitea.prod.iot-proxmox.net; the runner registration token is injected from a Secret (GITEA_RUNNER_REGISTRATION_TOKEN).
Resources
| Container | CPU (req/limit) | Memory (req/limit) |
|---|---|---|
docker (dind init container) | 250m / 2 | 512Mi / 4Gi |
runner | 100m / 1 | 256Mi / 1Gi |