( kisg | 2021. 05. 06., cs – 12:37 )

Kétféle konténer van: stateless és stateful. A stateless minden perzisztens adattárolását külső szolgáltatással oldja meg (adatbázis, S3 ... stb.).

Egy stateful konténer a megadott PersistenceVolumeClaim alapján kapott Volume-ba dolgozik, alapvetően azt a Volume-ot kell menteni. Az, hogy ezt hogy érdemes, nagyon függ attól, hogy pontosan hogy van ez a storage megvalósítva.

Tegyük fel, hogy van 3 Vmware szervered, mindegyiken elindítasz 1-1 worker node-ot, rendelsz hozzájuk tárhelyet, és a HA PostgreSQL szolgáltatást nyújtó stateful konténereket úgy állítod be, hogy workerenként 1 fusson, local storage-on, akkor a Postgres intézi az adatok replikációját, és a 3 VM-ben ott vannak redundánsan az adatok.

Ha van egy külső storage (pl. NAS vagy egy Ceph Cluster), amihez meg van írva a Kubernetes támogatás (szerintem kb. minden ilyenhez megvan, amihez nincs, attól én tartanék), akkor be lehet állítani, hogy a Kubernetes ha kap egy PersistenceVolumeClaim-et, akkor csináljon a NAS-on egy volume-ot, és azt mountolja fel a konténerbe. 

A poén ebben az, hogy az alkalmazásfejlesztőnek nem kell tudnia, hogy a Kubernetes cluster hogy van összerakva. Azt kell tudnia beállítani, hogy ha egy stateful HA szolgáltatást akar csinálni, akkor az egység, amivel dolgozik, az a konténer + a hozzá tartozó PersistentVolumeClaim, és ezeket kell többszöröznie lehetőleg különálló availability zone-okba (amikre ad a Kubernetes API támogatást).

A mentéseket lehet csinálni központilag is (pl. a node storage-et, NAS-t menteni), vagy alkalmazásszinten is, ez az adott környezettől függ. Azt is el tudom képzelni, hogy egy Ops csapat azt mondja, hogy mi azt biztosítjuk, hogy ami a mi S3 kompatibilis szolgáltatásunkba bemegy, az ott is marad. Ezen kívül persze adunk block storage-et is, ami RAID, de azokat nem mentjük külön, és a kedves alkalmazásfejlesztő lesz szíves összerakni a mentését, hogy amit meg akar őrizni az utókornak az felkerüljön az S3 kompatibilis storage-ba az alkalmazásnak megfelelő ütemezéssel, illetve az alkalmazás szintű disaster recovery úgy néz ki, hogy a konténer induláskor (ha a korábbi volume nincs meg és újat kapott), akkor lehúzza az S3-ról a mentést és abból állítja fel magát.