From d4cc6ba4f6224cdb7153216b7c4b526f3a8724b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 19 May 2026 09:46:57 +0400 Subject: [PATCH] feat: PV storage backend + fix fetcher image v1.23.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - helm/fission-values.yaml: storagesvc на vcd-disk-ext4 PV 2Gi fetcher image: naeel/fetcher:v1.23.0 (собран из fission-src/cmd/fetcher) - scripts/migrate_s3_to_pv.py: скрипт перелива S3→storagesvc (no-op: 0 пакетов с s3://) - doc/report-2026-05-19-pv-migration-bugs.md: баги helm upgrade, FETCHER_IMAGE, field manager --- doc/report-2026-05-19-pv-migration-bugs.md | 118 +++++++++++++++++++++ helm/fission-values.yaml | 30 ++++++ 2 files changed, 148 insertions(+) create mode 100644 doc/report-2026-05-19-pv-migration-bugs.md create mode 100644 helm/fission-values.yaml diff --git a/doc/report-2026-05-19-pv-migration-bugs.md b/doc/report-2026-05-19-pv-migration-bugs.md new file mode 100644 index 0000000..48c0e11 --- /dev/null +++ b/doc/report-2026-05-19-pv-migration-bugs.md @@ -0,0 +1,118 @@ +# Отчёт: миграция S3→PV + баги helm upgrade — 2026-05-19 + +## Что делали + +1. Бенчмарк 3 хранилищ (local-path PV, vcd-disk-ext4 PV, S3) +2. Переехали storagesvc с S3 на PV (vcd-disk-ext4, 2Gi) +3. Обнаружили что S3 фактически не использовался (все Package URL — http://storagesvc..., не s3://) +4. Миграция была no-op: перенесено=0, пропущено=44 + +--- + +## Баги и ошибки + +### БАГ 1: helm upgrade откатил executor/router с v1.23.0 → v1.22.1 + +**Причина:** в `helm/fission-values.yaml` был прописан `imageTag: v1.22.1` вместо `v1.23.0`. +До helm upgrade executor/router жили вне helm (задеплоены через `kubectl set image`). + +**Симптом:** консоль не показывала функции. + +**Исправление:** изменён `imageTag: v1.23.0` в values, пересоздан executor/router. + +--- + +### БАГ 2: field manager конфликт — fission-console vs helm + +**Причина:** fission-console патчит `FISSION_RESOURCE_NAMESPACES` в executor и router через server-side apply. +Когда helm пытается обновить те же deployment-ы — конфликт field manager. + +**Симптом:** +``` +conflict with "fission-console" using apps/v1: +.spec.template.spec.containers[name="executor"].env[name="FISSION_RESOURCE_NAMESPACES"].value +``` + +**Обход:** перед `helm upgrade` удалять executor и router вручную: +```bash +kubectl delete deploy executor router -n fission +helm upgrade fission fission-charts/fission-all --version 1.22.1 \ + -n fission -f helm/fission-values.yaml --no-hooks --timeout 180s +``` + +**Системное решение:** нужно чтобы fission-console не трогал deployments executor/router напрямую (FISSION_RESOURCE_NAMESPACES должен читаться из ConfigMap или CRD, а не инжектироваться в deployment env). + +--- + +### БАГ 3: FETCHER_IMAGE = fission/fetcher:v1.22.0 — образ не существует + +**Причина:** helm chart `fission-all:1.22.1` имеет дефолтное значение: +```yaml +fetcher: + image: fission/fetcher + imageTag: v1.22.0 +``` +Этот образ на Docker Hub не существует (fission переехал на ghcr.io). + +До наших helm upgrade executor не управлялся helm — FETCHER_IMAGE либо не был задан (код падал на дефолт `ghcr.io/fission/fetcher`), либо был задан правильно вручную. + +После helm upgrade — chart прописал неправильный FETCHER_IMAGE. + +**Симптом:** +- Pool pods: `ImagePullBackOff` на контейнере `fetcher` +- `fission/fetcher:v1.22.0: not found` на Docker Hub +- Функции не запускаются (504 при invoke) + +**Правильное значение:** `naeel/fission-bundle:v1.23.0` +Fetcher — часть fission-bundle, отдельного образа нет. +Находится в: `fission-src/pkg/fetcher/` + +**Неправильные ключи в values (игнорируются чартом):** +```yaml +fetcherImage: naeel/fission-bundle # ← НЕПРАВИЛЬНО, такого ключа нет +fetcherImageTag: v1.23.0 # ← НЕПРАВИЛЬНО +``` + +**Правильные ключи:** +```yaml +fetcher: + image: naeel/fission-bundle # ← ПРАВИЛЬНО + imageTag: v1.23.0 # ← ПРАВИЛЬНО +``` + +Шаблон чарта (`charts/fission-all/templates/_helpers.tpl`): +``` +{{- define "fetcherImage" -}} +{{- $args := list (.Values.fetcher.repository | default .Values.repository) .Values.fetcher.image .Values.fetcher.imageTag -}} +``` + +--- + +### БАГ 4: router JWT пароль сменился при helm upgrade + +**Причина:** helm upgrade пересоздал secret `router` с новым паролем. + +| До | После | +|----|-------| +| `slxGj3G3FAD7l5ms2tJ9` | `58oKMuBIvmBBXHXqaLHw` | + +fission-console читает пароль из secret динамически (`valueFrom: secretKeyRef`) — поэтому сам работает. +CLI-инструменты с сохранённым токеном требуют перегенерации токена. + +--- + +## Текущее состояние (на момент отчёта) + +| Компонент | Образ | Статус | +|-----------|-------|--------| +| executor, router, buildermgr, storagesvc, timer, webhook, kubewatcher | `naeel/fission-bundle:v1.23.0` | ✅ Running | +| fission-console | `naeel/fission-console:v1.3.92` | ✅ Running | +| FETCHER_IMAGE (env в executor) | `fission/fetcher:v1.22.0` | ❌ НЕПРАВИЛЬНО | +| fission-storage-pvc | 2Gi, vcd-disk-ext4, Bound | ✅ OK | + +## Что нужно сделать + +1. Исправить `helm/fission-values.yaml` — заменить `fetcherImage`/`fetcherImageTag` на правильную секцию `fetcher:` +2. Сделать helm upgrade (с предварительным удалением executor/router) +3. Проверить что pool pods поднимаются без ImagePullBackOff +4. Проверить что функции nubes1 (`a1`, `c1`) запускаются diff --git a/helm/fission-values.yaml b/helm/fission-values.yaml new file mode 100644 index 0000000..7a7716a --- /dev/null +++ b/helm/fission-values.yaml @@ -0,0 +1,30 @@ +# Fission helm values — PV (local storage) backend +# Применять: helm upgrade fission fission-charts/fission-all --version 1.22.1 \ +# -n fission -f helm/fission-values.yaml +# +# Секретов нет — local storage не требует credentials. +# При деплое в новый кластер — только этот файл. + +authentication: + enabled: true + +defaultNamespace: fission-functions + +image: naeel/fission-bundle +imageTag: v1.23.0 +fetcher: + image: naeel/fetcher + imageTag: v1.23.0 + +persistence: + enabled: true + storageType: local + storageClass: vcd-disk-ext4 # сетевой block-device VMware Cloud Director (надёжнее local-path) + size: 2Gi + accessMode: ReadWriteOnce + +repository: "" +routerServiceType: ClusterIP +serviceType: ClusterIP + +analytics: false