- 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
119 lines
5.3 KiB
Markdown
119 lines
5.3 KiB
Markdown
# Отчёт: миграция 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`) запускаются
|