docs(nfs): po zmianie eksportu rollout restart nie wystarcza
Najdroższy czasowo moment pierwszego wdrożenia, więc zapisany wprost. FAKT: eksport poprawiony (mapall_user), usługa NFS zrestartowana, pod zrestartowany przez `rollout restart` — a zapis z poda nadal odbijał się o Permission denied. Jednocześnie ręczne zamontowanie TEGO SAMEGO eksportu z TEGO SAMEGO węzła pozwalało pisać. HIPOTEZA (niepotwierdzona u źródła): jądro współdzieli strukturę montowania NFS między montowania tego samego eksportu na węźle, razem z cache odpowiedzi ACCESS. `rollout restart` zostawia stary i nowy pod na chwilę współistniejące — widać to w jego własnym logu jako „1 old replicas are pending termination" — więc montowanie ani na moment nie zostaje bez użytkownika i nowy pod dziedziczy odpowiedź sprzed zmiany. ROZWIĄZANIE (zweryfikowane): zejść do zera replik, poczekać na zniknięcie podów, wrócić do jednej. W ArgoCD ten sam skutek daje force delete poda. Dopisany też test rozdzielający winę serwera od winy klienta: ręczny montaż z węzła z pominięciem Kubernetesa. SERWER-OK przy jednoczesnej odmowie w podzie znaczy, że na NAS-ie nie ma czego poprawiać — i oszczędza rundy zmian w konfiguracji udziału, które niczego nie dają. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -217,9 +217,47 @@ sudo ls -ld /mnt/Tank1/astrololo-state
|
|||||||
Zestaw, który DZIAŁA: kontener jako `uid=0(root)`, udział z `ro: false`
|
Zestaw, który DZIAŁA: kontener jako `uid=0(root)`, udział z `ro: false`
|
||||||
i `mapall: root`, katalog `drwxrwx--- root root`.
|
i `mapall: root`, katalog `drwxrwx--- root root`.
|
||||||
|
|
||||||
Po każdej zmianie eksportu: `midclt call service.restart nfs`, a potem
|
### ⚠️ Po zmianie eksportu `rollout restart` NIE WYSTARCZA
|
||||||
`kubectl -n astrololo rollout restart deploy/presentation`. Sama zmiana
|
|
||||||
konfiguracji nie przeładowuje eksportów.
|
To kosztowało najwięcej czasu przy pierwszym wdrożeniu, więc zapisane wprost.
|
||||||
|
|
||||||
|
**Objaw:** eksport poprawiony, `service.restart nfs` wykonany, pod zrestartowany —
|
||||||
|
a zapis z poda nadal odbija się o `Permission denied`. Przy czym **ręczne
|
||||||
|
zamontowanie tego samego eksportu z tego samego węzła działa** i pozwala pisać.
|
||||||
|
|
||||||
|
**Co z tym zrobić:** doprowadzić do stanu, w którym ŻADEN pod nie trzyma tego
|
||||||
|
montowania.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl -n astrololo scale deploy/presentation --replicas=0
|
||||||
|
kubectl -n astrololo wait --for=delete pod -l app=presentation --timeout=90s
|
||||||
|
kubectl -n astrololo scale deploy/presentation --replicas=1
|
||||||
|
kubectl -n astrololo rollout status deploy/presentation
|
||||||
|
```
|
||||||
|
|
||||||
|
`rollout restart` tego nie osiąga, bo stary i nowy pod na chwilę WSPÓŁISTNIEJĄ —
|
||||||
|
w logu widać `1 old replicas are pending termination`. Montowanie ani na moment
|
||||||
|
nie zostaje bez użytkownika. (W ArgoCD ten sam skutek daje `force delete` poda.)
|
||||||
|
|
||||||
|
**Dlaczego (hipoteza, nie potwierdzona u źródła):** jądro współdzieli strukturę
|
||||||
|
montowania NFS między montowania tego samego eksportu na węźle, razem z cache
|
||||||
|
odpowiedzi ACCESS. Nowy pod podpina się do żywego montowania i dziedziczy
|
||||||
|
odpowiedź sprzed zmiany eksportu.
|
||||||
|
|
||||||
|
**Test, który rozstrzyga, czy winny jest serwer czy klient** — montaż ręczny
|
||||||
|
z węzła, z pominięciem Kubernetesa:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh <węzeł> 'sudo mkdir -p /mnt/t && sudo mount -t nfs 192.168.1.34:/mnt/Tank1/astrololo-state /mnt/t \
|
||||||
|
&& sudo touch /mnt/t/proba && echo SERWER-OK || echo SERWER-NIE; sudo umount /mnt/t'
|
||||||
|
```
|
||||||
|
|
||||||
|
`SERWER-OK` przy jednoczesnym `Permission denied` w podzie znaczy, że konfiguracja
|
||||||
|
NAS-a jest dobra i **nie ma czego na nim poprawiać** — problem jest po stronie
|
||||||
|
klienta.
|
||||||
|
|
||||||
|
Osobno pamiętaj: sama zmiana konfiguracji udziału nie przeładowuje eksportów.
|
||||||
|
Po każdej zmianie `midclt call service.restart nfs`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user