Files
k8s-manifests/gitea/deployment-gitea-runner.yaml
T
chemavxandClaude Opus 4.8 b8b53467be fija las imágenes flotantes de los namespaces manuales
El commit 22ae5d7 (15-abr) fijó estos tags EN GIT pero nunca se aplicó al
cluster: estos namespaces no están en ArgoCD, así que un cambio en git no llega
solo. Tres meses después git decía 1.25.5 y gitea corría 1.27.0, subido en algún
reinicio sin que nadie lo decidiera. Ahora se fija a los dos lados.

  gitea            gitea/gitea:latest        -> gitea/gitea:1.27.0
  gitea (init)     busybox                   -> busybox:1.38.0
  gitea-runner     gitea/act_runner:latest   -> gitea/act_runner:0.6.1
  gitea-runner     docker:24-dind            -> docker:24.0.9-dind
  authentik-redis  redis:alpine              -> redis:8.8.0-alpine
  uptime-kuma      louislam/uptime-kuma:1    -> louislam/uptime-kuma:1.23.17
  homarr           homarr:latest             -> homarr@sha256:80ee593c...

Los seis primeros se fijan a la MISMA imagen que ya corría: verificado
comparando el repoDigest del tag flotante con el del tag candidato, así que el
reinicio no cambió de versión. Homarr va por digest porque su "latest" es una
build de la rama main (org.opencontainers.image.version=main): no existe un tag
de release que describa lo que corre. Moverlo a una release es otra decisión.

Trampa que casi me come, anotada para la próxima: el imageID de un pod NO
siempre es el digest del registro. Si viene como "repo@sha256:..." lo es; si es
un "sha256:..." pelado es el id local de containerd y NO se puede descargar.
Fijar uptime-kuma a ese id dio ImagePullBackOff; el pod viejo aguantó sirviendo
(maxUnavailable 0 para 1 réplica) y se revirtió sin corte. La comparación buena
es repoDigest contra repoDigest.

De paso, al regenerar gitea-runner desde lo vivo quedan documentados el volumen
buildkitd-config y su montaje, que existían en el cluster y no en git.

Verificado tras cada cambio: rollout completo, versión de la app dentro del pod,
y los cinco servicios respondiendo desde fuera (git 200, home 200, status/auth/
grafana 302 por Authentik). El runner se ha vuelto a registrar en Gitea. Sigue
sin haber pods fuera de Running y las 18 apps de ArgoCD Synced+Healthy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:11:10 +00:00

129 lines
3.4 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: gitea-runner
name: gitea-runner
namespace: gitea
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: gitea-runner
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
annotations:
kubectl.kubernetes.io/restartedAt: '2026-05-05T09:17:26Z'
labels:
app: gitea-runner
spec:
containers:
- args:
- --host=tcp://0.0.0.0:2375
- --tls=false
env:
- name: DOCKER_TLS_CERTDIR
image: docker:24.0.9-dind
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- docker
- info
failureThreshold: 3
initialDelaySeconds: 20
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 1
name: dind
resources:
limits:
cpu: '2'
memory: 4Gi
requests:
cpu: 500m
memory: 2Gi
securityContext:
privileged: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/docker
name: dind-storage
- mountPath: /etc/docker/daemon.json
name: docker-daemon-config
subPath: daemon.json
- mountPath: /etc/buildkit/buildkitd.toml
name: buildkitd-config
subPath: buildkitd.toml
- args:
- |
until nc -z localhost 2375 2>/dev/null; do sleep 1; done
exec /usr/local/bin/run.sh
command:
- /bin/sh
- -c
env:
- name: GITEA_INSTANCE_URL
value: http://gitea.gitea.svc.cluster.local:3000
- name: GITEA_RUNNER_NAME
value: k8s-runner
- name: CONFIG_FILE
value: /etc/act_runner/config.yaml
- name: GITEA_RUNNER_REGISTRATION_TOKEN
valueFrom:
secretKeyRef:
key: GITEA_RUNNER_REGISTRATION_TOKEN
name: gitea-runner-secret-infisical
- name: DOCKER_HOST
value: tcp://localhost:2375
image: gitea/act_runner:0.6.1
imagePullPolicy: Always
name: runner
resources:
limits:
cpu: '1'
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /data
name: runner-data
- mountPath: /etc/act_runner
name: runner-config
dnsPolicy: ClusterFirst
nodeSelector:
kubernetes.io/hostname: chemavx-k8
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- emptyDir: {}
name: runner-data
- configMap:
defaultMode: 420
name: gitea-runner-config
name: runner-config
- emptyDir:
sizeLimit: 10Gi
name: dind-storage
- configMap:
defaultMode: 420
name: docker-daemon-config
name: docker-daemon-config
- configMap:
defaultMode: 420
name: buildkitd-config
name: buildkitd-config