A jakie masz doświadzcenie z Kubernetesem i Swarmem?
Generalnie (przepraszam za porównanie) to tak jakby pytać czy lepiej Python czy Java na serwerze. Tzn. oba rozwiązania mają jakieś zalety, ale skoro ktoś o to pyta to znaczy że jest na dość wczesnym etapie planowania projektu. Tymczasem kubernetes to gigantyczny framework i mimo pracy z nim od ~2 lat, stawiania i zarządzania około 5 klastrami, a nawet doświadczenia od środka "u źródła" nie czuję się ekspertem w tym temacie :P. Swarm jest trochę prostszy, ale to dalej kombajn. Przede wszystkim, oba mają inne podejście do zarządzania niż adminowanie "bare metal".
Zatem zastanawiam się (zakładając że mamy do dyspozycji tylko jedną maszynę) czy pójść w stronę Docker Swarm czy Kubernetes?
Pierwszy problem - klaster z jedną maszyną to kiepski klaster :P. Można wiedzieć czemu takie założenie? Nie mówię że to na pewno zły pomysł (np. moja prywatna strona i usługi tak stoją), ale może się nie ograniczać tak od razu na etapie planowania. Bo np. czemu nie rozważyć k8s hostowanego zewnętrznie? To naprawdę fajne rozwiązanie jak ktoś nie chce za dużo się martwić adminowaniem - czyli np dobre dla 4p :P).
Zależałoby mi na "zero downtime deployment" czyli usługi musiałyby się móc replikować (ale to akurat i swam i k8s potrafi).
"To skomplikowane". I swarm i k8s potrafią bez problemu zrobić update (i nawet rollback jeśli się je dobrze skonfiguruje). Ale w przypadku jednej maszyny będzie downtime chociażby przy aktualizacji paczek na hoście.
W ogóle, @TurkucPodjadek ładnie problemy wylistował. K8s to naprawdę nie jest coś co się stawia w jeden wieczór z zerową wiedzą i "samo działa" :P. Swarm trochę lepszy, ale też ciężki.
Z kubernetesm mam jakieś doświadczenie i wydaje mi się że na potrzeby 4programmers.net jest to zbyt duża kobyła. Ze Swarmem nie miałem jednak do czynienia ale wydaje się o wiele prostsze.
Hmm, skoro tak to sam sobie odpowiedziałeś trochę. To prawda, swarm jest znacznie prostszy. Jest też gorzej wspierany (k8s wygrał tę wojnę), ale na potrzeby 4p powinno wystarczyć.
Stack wygląda tak: serwer WWW to nginx oraz PHP-FPM. Baza PostgreSQL. Serwer websocket w Pythonie. Cache, sesje w Redis. Jest jeszcze RabbitMQ oraz Elasticsearch. To właściwie wszystko
No i usługi poboczne (z głowy: certbot, postfix z całym otoczeniem, etc). Chyba że one zostają "natywnie"?
Podstawową trudnością było to, że nginx oraz php-fpm muszą mieć dostęp do tych samych plików kodu źródłowego.
Hmm, czemu to problem? W sensie, chyba buduje się obraz z plikami, wrzuca na jakiegoś dockerhuba (ew. prywatne registry) i jakoś działa. Tzn. nginx i php-fpm mają osobne obrazy, ale zbudowane z tych samych plików? Chyba że pliki się muszą zmieniac, ale to wtedy nie uciekniesz przed jakimś volumem (chociażby dla perzystencji).
Jak koniecznie musi to być ta sama maszyna, to poszedłbym prędzej w microk8s
Proszę, nie. Microk8s na produkcji to rak i czarna plama na powierzchni świata. Microk8s sam z siebie zbyt stabilny nie jest, ale powiedzmy jako coś służącego do developmentu się sprawdza. Ale błagam, nie na produkcji, bo jest:
-
- dziurawy jak sito pod względem bezpieczeństwa
-
- niestabilny (autoaktualizacje regularnie niszczą wsteczną kompatybilność)
-
- wolny (YMMV)
-
- słabo debugowalny (niektóre rzeczy robi się przez
microk8s.enable
, które jest wygodne, ale robi rzeczy w automagiczny sposób i naciąłem się parę razy próbując dociec niskopoziomowo czemu coś działa tak jak działa)