Pisze jako adept spraw backendowych.
Próbuję zrozumieć kiedy należy używać kubernetes, kiedy można zrobić to (imho prościej dla początkujących) za pomocą docker compose a kiedy po prostu trzymać kilka instancji i loadbalancować do nich za pomocą nginx.
Kubernetes jest trudny (relatywnie) do postawienia, w każdym razie w sposób który nie będzie kopał developerów utrzymujących aplikacje na klastrze K8s. Dla pojedynczej aplikacji nie warto, nawet jeśli ma wiele instancji, jak zaczyna pojawiać się ich kilka, potem kilkanaście itd. to już lepiej mieć dowolny orkiestrator. Taki dajmy na to Nomad, ma mniejsze możliwości ale jest też prostszy. Choć prawdę mówiąc łatwiej mi odnaleźć się w świecie K8s, może z przyzwyczajenia.
Oprócz uproszczenia samego deploymentu, orkiestracja odpowiada m.in. za service discovery i rozkładanie obciążenia (działających kontenerów) na worker node'ach. To nawet ważniejsze, niż robienie deploymentu przez YAMLa zamiast SSH.
Dla porównania, w docker-compose
właściwie nie ma czego stawiać, ale i możliwości zarządzania czymkolwiek są ograniczone. Compose używam właściwie wyłącznie do zdefiniowania sobie prostego, lokalnego środowiska do testów i developmentu, nigdy jako narzędzie do deploymentu - choć w przypadkach za prostych na Kubernetesa pewnie by się sprawdził
Stawianie kilku instancji (ale jak, ręcznie?) i samodzielne spinanie z load balancerem to już jest poziom, na którym bym się zastanowił nad jakimkolwiek IaC, choćby najprostszym, i automatyzacją.
Jeśli to jedna aplikacja i nie opłaca się robić pod to klastra K8s, ani nawet babrać w docker-compose, rozważ jakiś prosty playbook Ansible, w którym zdefiniujesz sobie taki deployment w kodzie, i dorzucisz konfigurację z listą serwerów na których ma działać aplikacja, serwer dla load balancera, itd. itd. a Ansible przeprowadzi instalację według instrukcji, np. załaduje binarkę i dorzuci usługę do systemd
. Kiedyś zrobiliśmy tak automatyzację w labie, gdzie na fizycznych serwerach chodziły Gitlab runnery, a ręczne zarządzanie rosnącą liczbą runnerów było nieefektywne. Ansible spodobał mi się o tyle, że na zarządzanych przez niego serwerach nie trzeba instalować nic, żadnych daemonów ani agentów - wystarczy dostęp po SSH.