Naprawa: osobny udział na stan prezentacji (CreateContainerConfigError) #17

Merged
gitea merged 1 commits from fix/stan-prezentacji-nfs into master 2026-08-07 16:37:30 +00:00
Owner

Co się stało

CreateContainerConfigError
failed to create subPath directory for volumeMount "state" of container "presentation"

Mój błąd, nie zagadka. Udział z bazami jest wyeksportowany ro: true z root_squash — ustawiłem to runbookiem DAN-25 i sam napisałem tam ostrzeżenie, że po tej zmianie „nikt nie wgra". Dokładając wolumen na konta zmieniłem readOnly przy montowaniu w podzie i uznałem sprawę za załatwioną, nie sprawdzając eksportu po stronie serwera.

Przyczyna była podwójna i za każdym razem ta sama:

  1. kubelet nie mógł utworzyć podkatalogu, bo udział jest tylko do odczytu
  2. a gdyby nawet mógł — kontenery działają jako root, a root_squash mapuje roota na nobody, więc aplikacja i tak nie zapisałaby tam pliku kont

Rozwiązanie — bez ruszania DAN-25

Osobny, mały udział /mnt/Tank1/astrololo-state:

  • zapisywalny (ro: false)
  • zawężony do tych samych trzech węzłów co w DAN-25
  • mapall_user na nieuprzywilejowanego użytkownika — bezpieczniejsze niż no_root_squash, bo nie oddaje roota

Udział z bazami zostaje tylko do odczytu. Przy okazji znika subPath, czyli znika potrzeba, żeby kubelet cokolwiek zakładał — katalog istnieje, bo jest korzeniem udziału.

Co musisz zrobić

Runbook: README-stan-prezentacji.md. Trzy kroki, komendy midclt w konwencji DAN-25.

Krok 2 to test zapisu z węzła, do wykonania przed wdrożeniem — dokładnie ten, którego zabrakło za pierwszym razem:

ssh 192.168.1.73 'sudo mount -t nfs 192.168.1.34:/mnt/Tank1/astrololo-state /mnt/test \
  && sudo touch /mnt/test/proba && echo "ZAPIS DZIAŁA" \
  && sudo rm /mnt/test/proba; sudo umount /mnt/test'

⚠️ To samo czeka DAN-27

Zarządzanie plikami baz (wgrywanie, archiwizacja, kasowanie) wymaga zapisu do udziału z bazami — a ten jest ro. PR feat/pliki-zapis nie zadziała w obecnej postaci: zdjąłem tam readOnly z montowania, ale eksport nadal jest read-only.

Celowo tego tu nie rozwiązuję, bo to osobna decyzja: oznacza rezygnację z gwarancji DAN-25, że baz nie da się zmienić przez NFS. Napiszę o tym osobno.

🤖 Generated with Claude Code

## Co się stało ``` CreateContainerConfigError failed to create subPath directory for volumeMount "state" of container "presentation" ``` **Mój błąd, nie zagadka.** Udział z bazami jest wyeksportowany **`ro: true` z `root_squash`** — ustawiłem to runbookiem DAN-25 i sam napisałem tam ostrzeżenie, że po tej zmianie *„nikt nie wgra"*. Dokładając wolumen na konta zmieniłem `readOnly` przy **montowaniu w podzie** i uznałem sprawę za załatwioną, nie sprawdzając eksportu po stronie serwera. Przyczyna była podwójna i za każdym razem ta sama: 1. kubelet nie mógł utworzyć podkatalogu, bo udział jest tylko do odczytu 2. a gdyby nawet mógł — kontenery działają **jako root**, a `root_squash` mapuje roota na `nobody`, więc aplikacja i tak nie zapisałaby tam pliku kont ## Rozwiązanie — bez ruszania DAN-25 Osobny, mały udział `/mnt/Tank1/astrololo-state`: - zapisywalny (`ro: false`) - zawężony do **tych samych trzech węzłów** co w DAN-25 - `mapall_user` na nieuprzywilejowanego użytkownika — bezpieczniejsze niż `no_root_squash`, bo nie oddaje roota **Udział z bazami zostaje tylko do odczytu.** Przy okazji znika `subPath`, czyli znika potrzeba, żeby kubelet cokolwiek zakładał — katalog istnieje, bo jest korzeniem udziału. ## Co musisz zrobić Runbook: [`README-stan-prezentacji.md`](astrololo/README-stan-prezentacji.md). Trzy kroki, komendy `midclt` w konwencji DAN-25. Krok 2 to **test zapisu z węzła, do wykonania przed wdrożeniem** — dokładnie ten, którego zabrakło za pierwszym razem: ```bash ssh 192.168.1.73 'sudo mount -t nfs 192.168.1.34:/mnt/Tank1/astrololo-state /mnt/test \ && sudo touch /mnt/test/proba && echo "ZAPIS DZIAŁA" \ && sudo rm /mnt/test/proba; sudo umount /mnt/test' ``` ## ⚠️ To samo czeka DAN-27 Zarządzanie plikami baz (wgrywanie, archiwizacja, kasowanie) wymaga zapisu do **udziału z bazami** — a ten jest `ro`. PR `feat/pliki-zapis` **nie zadziała** w obecnej postaci: zdjąłem tam `readOnly` z montowania, ale eksport nadal jest read-only. Celowo tego tu nie rozwiązuję, bo to osobna decyzja: oznacza rezygnację z gwarancji DAN-25, że baz nie da się zmienić przez NFS. Napiszę o tym osobno. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gitea added 1 commit 2026-08-07 15:46:13 +00:00
Pod presentation nie wstawał: CreateContainerConfigError, „failed to create
subPath directory for volumeMount state".

MÓJ BŁĄD, NIE ZAGADKA. Udział z bazami jest wyeksportowany `ro: true`
z `root_squash` — ustawiłem to runbookiem DAN-25 i sam tam napisałem ostrzeżenie,
że po tej zmianie nikt nic nie wgra. Dokładając wolumen na konta zmieniłem
`readOnly` przy MONTOWANIU w podzie i uznałem sprawę za załatwioną, nie sprawdzając
eksportu po stronie serwera.

Przyczyna była zresztą podwójna i za każdym razem ta sama:
  1. kubelet nie mógł utworzyć podkatalogu, bo udział jest tylko do odczytu,
  2. a gdyby nawet mógł — kontenery działają jako root, a root_squash mapuje
     roota na nobody, więc aplikacja i tak nie zapisałaby tam pliku kont.

ROZWIĄZANIE BEZ RUSZANIA DAN-25: osobny, mały udział /mnt/Tank1/astrololo-state,
zapisywalny, zawężony do tych samych trzech węzłów, z mapall_user na
nieuprzywilejowanego użytkownika (bezpieczniejsze niż no_root_squash, bo nie
oddaje roota). Udział z bazami ZOSTAJE tylko do odczytu.

Przy okazji znika subPath, czyli znika potrzeba, żeby kubelet cokolwiek zakładał —
katalog istnieje, bo jest korzeniem udziału.

Runbook README-stan-prezentacji.md zawiera test zapisu Z WĘZŁA do wykonania PRZED
wdrożeniem — dokładnie ten, którego zabrakło za pierwszym razem.

UWAGA: DAN-27 (zarządzanie plikami baz) uderzy w tę samą ścianę, bo wymaga zapisu
do udziału z BAZAMI. Ten commit tego nie rozwiązuje i celowo nie rusza DAN-25 —
to osobna decyzja, opisana na końcu runbooka.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gitea merged commit aff4de4e49 into master 2026-08-07 16:37:30 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/deploy#17