# ============================================================================= # Pre-pull DaemonSet - Alternativa para Cold Start # ============================================================================= # Garante que imagens críticas estejam em cache em TODOS os nodes. # Quando KEDA/Cluster Autoscaler criar pods, imagens já estarão disponíveis. # ============================================================================= # # COMO USAR: # 1. Edite a lista de initContainers com suas imagens # 2. kubectl apply -f prepull-daemonset.yaml # 3. Aguarde todos os pods ficarem Ready # 4. Imagens estarão em cache em todos os nodes # # QUANDO USAR: # - Databases (PostgreSQL, MongoDB) que precisam de 100% dos arquivos # - Apps que precarregam (n8n, Laravel Octane) # - Qualquer imagem onde eStargz NÃO ajuda # # ============================================================================= apiVersion: apps/v1 kind: DaemonSet metadata: name: image-prepuller namespace: kube-system labels: app: image-prepuller purpose: cold-start-optimization spec: selector: matchLabels: app: image-prepuller template: metadata: labels: app: image-prepuller spec: # Tolera todos os taints para rodar em TODOS os nodes tolerations: - operator: Exists # InitContainers baixam as imagens e terminam initContainers: # --------------------------------------------------------------------- # PostgreSQL (Container Factory) # --------------------------------------------------------------------- - name: prepull-postgresql image: registry.kube.quest/factory/postgresql:17 command: ["echo", "PostgreSQL image cached"] imagePullPolicy: Always resources: requests: cpu: 1m memory: 1Mi limits: cpu: 10m memory: 10Mi # --------------------------------------------------------------------- # n8n # --------------------------------------------------------------------- - name: prepull-n8n image: docker.n8n.io/n8nio/n8n:latest command: ["echo", "n8n image cached"] imagePullPolicy: Always resources: requests: cpu: 1m memory: 1Mi limits: cpu: 10m memory: 10Mi # --------------------------------------------------------------------- # PostgreSQL Oficial (para clientes) # --------------------------------------------------------------------- - name: prepull-postgres-alpine image: postgres:17-alpine command: ["echo", "PostgreSQL Alpine image cached"] imagePullPolicy: Always resources: requests: cpu: 1m memory: 1Mi limits: cpu: 10m memory: 10Mi # --------------------------------------------------------------------- # Redis # --------------------------------------------------------------------- - name: prepull-redis image: redis:7-alpine command: ["echo", "Redis image cached"] imagePullPolicy: Always resources: requests: cpu: 1m memory: 1Mi limits: cpu: 10m memory: 10Mi # Container principal apenas mantém o DaemonSet vivo containers: - name: pause image: gcr.io/google_containers/pause:3.9 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 10m memory: 10Mi # Secrets para registries privados imagePullSecrets: - name: gitlab-registry --- # ============================================================================= # Secret para Registry Privado (template) # ============================================================================= # Crie este secret em kube-system se usar registry privado: # # kubectl create secret docker-registry gitlab-registry \ # --namespace=kube-system \ # --docker-server=registry.kube.quest \ # --docker-username= \ # --docker-password= # =============================================================================