fix: rollout restart после kaniko rebuild (operator v0.1.11)

- controllers/function_controller.go: в ensureDeployment добавить аннотацию
  kubectl.kubernetes.io/restartedAt = fn.Status.LastBuiltAt при обновлении
  существующего Deployment — принудительный rolling restart после каждой сборки
- deployments/k8s/operator.yaml: образ обновлён до v0.1.11
- doc/errors/log.md: задокументирована причина и решение
- doc/decisions/log.md: добавлено правило restartedAt + :latest
- doc/progress.md: версия обновлена до v0.1.11

Причина бага: imagePullPolicy=IfNotPresent + :latest — kubelet кешировал
старый образ, pod не рестартовал после успешного kaniko build.
This commit is contained in:
“Naeel”
2026-03-08 20:55:47 +04:00
parent df540e6b81
commit 79719e078d
8 changed files with 46 additions and 5 deletions
+9
View File
@@ -211,6 +211,15 @@ func (r *FunctionReconciler) ensureDeployment(ctx context.Context, fn *slessv1al
// Обновляем образ и imagePullSecrets если изменились (новая сборка или смена конфига)
existing.Spec.Template.Spec.Containers[0].Image = fn.Status.ImageRef
existing.Spec.Template.Spec.ImagePullSecrets = desired.Spec.Template.Spec.ImagePullSecrets
// Принудительный rollout restart при каждой новой сборке.
// Необходимо т.к. image tag :latest не меняется — без этой аннотации
// kubelet берёт кешированный образ и pod не видит новый код.
if fn.Status.LastBuiltAt != nil {
if existing.Spec.Template.Annotations == nil {
existing.Spec.Template.Annotations = map[string]string{}
}
existing.Spec.Template.Annotations["kubectl.kubernetes.io/restartedAt"] = fn.Status.LastBuiltAt.Time.Format(time.RFC3339)
}
if err := r.Update(ctx, existing); err != nil {
return ctrl.Result{}, fmt.Errorf("update deployment: %w", err)
}