feat: PV storage backend + fix fetcher image v1.23.0
- 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
This commit is contained in:
@@ -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`) запускаются
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user