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:
“Naeel”
2026-03-08 21:05:35 +04:00
parent 79719e078d
commit f8fe3835a4
5 changed files with 13 additions and 16 deletions
+6 -2
View File
@@ -9,6 +9,7 @@ package builder
import (
"context"
"crypto/sha256"
"fmt"
"time"
@@ -60,9 +61,12 @@ func New(c client.Client, cfg Config) *Builder {
}
// ImageRef возвращает полный путь к образу в registry для данной функции и версии.
// Тег = первые 12 символов sha256(s3Key): уникален per build, не меняется при
// повторном reconcile с тем же s3Key, не требует хаков с :latest.
func (b *Builder) ImageRef(namespace, funcName, s3Key string) string {
// Используем s3Key как уникальный тег чтобы разные версии не перезаписывали друг друга
return fmt.Sprintf("%s/sless-%s-%s:latest", b.registryHost, namespace, funcName)
h := sha256.Sum256([]byte(s3Key))
tag := fmt.Sprintf("%x", h[:6]) // 12 hex-символов
return fmt.Sprintf("%s/sless-%s-%s:%s", b.registryHost, namespace, funcName, tag)
}
// Build запускает kaniko Job для сборки образа функции.