# Un CronJob por nodo a propósito: un CronJob programa UN pod, así que para # barrer los dos nodos hacen falta dos objetos fijados con nodeSelector. Un # DaemonSet no vale (no tiene calendario) y dejarlo suelto lo mandaría siempre # al mismo sitio. Si se añade un nodo al cluster, hay que añadirlo aquí. # # Domingos a las 06:30 y 07:15, escalonados. Es el hueco libre: los backups # diarios ocupan 02:00, 03:00, 03:30, 04:00 y 05:00, y n8n-workflow-monitor y # renovate caen cada 6 h en punto (00, 06, 12, 18). El prune castiga el disco # y no interesa que coincida con nada que esté copiando datos. apiVersion: batch/v1 kind: CronJob metadata: name: image-prune-n97 namespace: backup-system spec: schedule: "30 6 * * 0" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 1 jobTemplate: spec: # Sin reintentos: si una pasada se queda a medias, el barrido de la semana # siguiente recoge lo que quedó. Nada urgente que reintentar en caliente. backoffLimit: 0 activeDeadlineSeconds: 2400 template: spec: restartPolicy: Never automountServiceAccountToken: false nodeSelector: kubernetes.io/hostname: chemavx-n97 containers: - name: image-prune image: busybox:1.38.0 command: ["/bin/sh", "/scripts/image-prune.sh"] securityContext: # privileged + runAsUser 0: el script hace chroot al host para usar # el crictl del binario de k3s y su socket de containerd. privileged: true runAsUser: 0 resources: requests: cpu: 100m memory: 64Mi limits: cpu: "1" memory: 256Mi volumeMounts: - name: host-root mountPath: /host - name: scripts mountPath: /scripts volumes: - name: host-root hostPath: path: / type: Directory - name: scripts configMap: name: image-prune-script defaultMode: 0755 --- apiVersion: batch/v1 kind: CronJob metadata: name: image-prune-k8 namespace: backup-system spec: schedule: "15 7 * * 0" concurrencyPolicy: Forbid successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 1 jobTemplate: spec: backoffLimit: 0 activeDeadlineSeconds: 2400 template: spec: restartPolicy: Never automountServiceAccountToken: false nodeSelector: kubernetes.io/hostname: chemavx-k8 containers: - name: image-prune image: busybox:1.38.0 command: ["/bin/sh", "/scripts/image-prune.sh"] securityContext: privileged: true runAsUser: 0 resources: requests: cpu: 100m memory: 64Mi limits: cpu: "1" memory: 256Mi volumeMounts: - name: host-root mountPath: /host - name: scripts mountPath: /scripts volumes: - name: host-root hostPath: path: / type: Directory - name: scripts configMap: name: image-prune-script defaultMode: 0755