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:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user