Levný ale výkonný Kubernetes Cluster

Levný ale výkonný Kubernetes Cluster
Poprvé jsem s k8s experimentoval již v roce 2016, tehdy jsem ale nevyřešil neustálé problémy s ETCD. Cluster se vždy do měsíce rozpadl.

Když jsem se na přelomu roku 2017/2018 rozhodoval kam dál posunout svoje zkušenosti s Dockerizováním aplikací, Kubernetes (k8s) byla jasná volba.

Stál jsem ale před rozhodnutím, jestli jít cestou managed clusteru na AWS EKS (Elastic Container Service for Kubernetes) - tehdy ještě BETA, Microsoft AKS (Azure Container Service) nebo Google GKE.

V té době jsem počítal s následující konfigurací hardware:

  • celkem 3 servery
  • 2xCPU
  • 8GB ram
  • 80GB SSD Storage + block storage

Podrobnější zkoumání tehdy ale skončilo na vysoké ceně za pronajatý hardware.

Pro ukázku tu mám aktuální kalkulaci na Google Compute Engine: 3servery * 63$ = 189$ * 22.8,-CZK = 4309,-CZK.

Google Compute Engine pricing - 2019-06

Tehdy jsem se na doporučení kamaráda Jakuba Dorňáka dozvěděl o Hetzner Cloud a jejich bezkonkurenční cenou za pronájem serveru.

Hetzner Cloud pricing 2019-06

3x9€ = 27€ * 25.6,-CZK = 691,- CZK a to je panečku jiné kafe.

Dnes běžím ve vyšší konfiguraci 3xCX41 + Load Balancer CX11 + Floating IP + Block Storages a jsem na ceně 56€ = 1433,- CZK / měsíc. Na Google Compute Engine bych se při obdobné konfiguraci dostal na 8550,- CZK / měsíc.

A co se týká výkonu serveru a aplikace. Provozuji zde 2x MariaDB v HA konfiguraci, které beží na všech 3 serverech. Pokud jeden server zahodím a nahodím nový (například při upgrade na novější verzi Ubuntu), databáze se tam během pár minut zreplikuje a instance MariaDB se přidá do clusteru. K databázi přistupuje PHP aplikace postavená na Symfony, která dále komunikuje s RabbitMQ a odtud se pak řeší fronta rozesílání newsletteru nebo generování náhledů nových fotografií a přidávání vodoznaku v custom NodeJS aplikaci. Dále zde běží Redis, ElasticSearch, Ghost Blogy a v neposlední řadě Gitlab, přes který realizuji CI/CD.

Screenshot z Google Webmaster tools

Po úspěšném přechodu na Kubernetes 600ms->257ms. 1 denní peak 2400ms byla chyba v konfiguraci Load Balanceru.

V současné době se pohybuji na průměru 183ms a nejlépe 107 ms. Důležité je ale zmínit, že 2 CX41 běží v lokaci Falkenstein spolu s Load Balancerem a 1 CX41 běží v Norimbergu, což může mít i nějaký vliv na výkon aplikace. Mám tak ale pocit většího bezpečí HA databáze.