chart wait-for-secret 240s → 360s + helm timeout 7m → 10m
Sync del fix ADDON-PROVISIONER-DB-SECRET-NOT-PUBLISHED (IDP P0). Ver IDP commit 673c16d para contexto completo. El init container wait-for-secret del Job Alembic ahora espera 72×5s=360s (antes 48×5s=240s), dimensionado a 3× el RECONCILE_INTERVAL del addon-provisioner. El controller bajó su default 300s → 60s en el mismo parche. Defense-in-depth: con el controller corriendo a 60s, el delay típico del Secret publish es ~60-180s. Los 360s del init container absorben hasta 3 ticks fallidos del controller (cluster recién Ready, kubeconfig no propagado, etc.). helm timeout 7m → 10m para que el wait extendido del init container + Alembic + StatefulSet ready quepan dentro del comando helm. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -8,12 +8,15 @@
|
||||
# - El AddonClaim ya fue aplicado por el workflow del tenant ANTES del
|
||||
# `helm upgrade --install` (ADR-066, vive FUERA del chart en
|
||||
# manifests/addonclaim.yaml). addon-provisioner es timer-based
|
||||
# (RECONCILE_INTERVAL 300s, initial_delay 60s) y materializa el Secret
|
||||
# (RECONCILE_INTERVAL 60s, initial_delay 60s) y materializa el Secret
|
||||
# `{{ .Values.database.secretName }}` de forma asincrona.
|
||||
# - El InitContainer hace busy-wait hasta que el Secret existe — absorbe la
|
||||
# latencia del reconcile dentro del pod, sin tocar el operator ni
|
||||
# bajar RECONCILE_INTERVAL global.
|
||||
# - Loop: 48 iteraciones x 5s = 240s — encaja dentro del helm timeout 7m.
|
||||
# latencia del reconcile dentro del pod, sin tocar el operator.
|
||||
# - Loop: 72 iteraciones x 5s = 360s — margen ~3x el peor caso esperado
|
||||
# (initial_delay 60s + 2x ticks de RECONCILE_INTERVAL 60s = 180s). Cabe
|
||||
# en helm timeout 7m. Lección 2026-05-28: con RECONCILE_INTERVAL=300s el
|
||||
# init container moria a 240s antes de que el Secret se publicara
|
||||
# (delay observado 577s, ticket ADDON-PROVISIONER-DB-SECRET-NOT-PUBLISHED).
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
@@ -54,12 +57,12 @@ spec:
|
||||
# caido por instante) NO mate el loop — el retry lo absorbe.
|
||||
set -u
|
||||
# Espera hasta que addon-provisioner publique el Secret tras
|
||||
# reconciliar el AddonClaim (hook weight -10). 48 x 5s = 240s.
|
||||
# reconciliar el AddonClaim (hook weight -10). 72 x 5s = 360s.
|
||||
SECRET="{{ .Values.database.secretName }}"
|
||||
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
|
||||
CACERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||
i=1
|
||||
while [ "$i" -le 48 ]; do
|
||||
while [ "$i" -le 72 ]; do
|
||||
# || echo "000": si curl falla (exit 6 DNS, etc.) capturamos
|
||||
# un codigo HTTP "000" para que el retry siga corriendo.
|
||||
HTTP=$(curl -s -o /dev/null -w '%{http_code}' \
|
||||
@@ -71,11 +74,11 @@ spec:
|
||||
echo "Secret $SECRET encontrado en intento $i"
|
||||
exit 0
|
||||
fi
|
||||
echo "[$i/48] Secret $SECRET aun no publicado (HTTP=$HTTP), esperando 5s..."
|
||||
echo "[$i/72] Secret $SECRET aun no publicado (HTTP=$HTTP), esperando 5s..."
|
||||
sleep 5
|
||||
i=$((i + 1))
|
||||
done
|
||||
echo "ERROR: Secret $SECRET no aparecio tras 240s — addon-provisioner stuck?"
|
||||
echo "ERROR: Secret $SECRET no aparecio tras 360s — addon-provisioner stuck?"
|
||||
exit 1
|
||||
env:
|
||||
- name: NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user