fix: уникальный image tag per build вместо :latest (operator v0.1.12)
- internal/builder/builder.go: ImageRef() теперь использует sha256(s3Key)[:12] как тег образа вместо :latest Пример: naeel/sless-default-hello-http:d431de61e2c9 - controllers/function_controller.go: убран хак с restartedAt аннотацией — больше не нужен, новый тег = kubelet всегда пул-ит новый образ - deployments/k8s/operator.yaml: обновлён до v0.1.12 - doc/progress.md: версия обновлена Преимущества уникального тега: - imagePullPolicy: IfNotPresent работает корректно - Rollback к предыдущей версии возможен (теги не перезаписываются) - Нет race condition при параллельных сборках
This commit is contained in:
@@ -208,18 +208,11 @@ func (r *FunctionReconciler) ensureDeployment(ctx context.Context, fn *slessv1al
|
||||
return ctrl.Result{}, fmt.Errorf("get deployment: %w", err)
|
||||
}
|
||||
|
||||
// Обновляем образ и imagePullSecrets если изменились (новая сборка или смена конфига)
|
||||
// Обновляем образ и imagePullSecrets при новой сборке.
|
||||
// Тег образа уникален per build (sha256 от s3Key) → imagePullPolicy: IfNotPresent
|
||||
// корректно подтягивает новый образ без дополнительных хаков.
|
||||
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