Cztery główne wyzwania Kubernetesa - wnioski po kilku latach pracy zespołu DevOps
Od kilku lat rozwijamy rozwiązania chmurowe w oparciu o konteneryzację Google. Podczas tego okresu musieliśmy stawić czoła wielu wyzwaniom związanym ze skalowalnością, szybkością procesów czy problemami charakterystycznymi dla e-commerce. Chcemy opisać pokrótce każde z nich oraz zaprosić do wysłuchania wystąpienia na ten temat.
Czym jest Kubernetes
Użytkownicy oczekują od współczesnych serwisów internetowych dostępności non-stop, a deweloperzy chcą mieć możliwość instalowania nowych wersji swoich serwisów nawet kilka razy dziennie. Szczególnie w e-commerce bardzo ważna jest dostęp klientów do oferty sklepu. Kubernetes pozwala uruchamiać aplikację w kontenerach. Oznacza to, że za ich pomocą można przygotowywać oprogramowanie w taki sposób, aby mogło być instalowane i aktualizowane łatwo, nie powodując żadnych przestojów. Kubernetes może działać w środowiskach produkcyjnych, co daje ogrom możliwości w tym dostarczanie oprogramowania w modelu CI/CD.
Kubernetes został zaprojektowany przez Joego Bedę, Brendana Burnsa i Craiga McLuckiego — inżynierów firmy Google — w 2014 roku. Szybko został udostępniony w modelu open source i stał się prężnie działającym ekosystemem chmurowym. Nazwa Kubernetes pochodzi ze starożytnej grecji i oznacza kapitana lub sternika. Jako ciekawostkę można dodać, że Kubernetes stał się jednym z najszybciej rozwijających się projektów open source w historii. Obecnie system ma ponad 2300 współtwórców i został szeroko wdrożony przez duże i małe firmy, w tym przez połowę listy Fortune 100.
Jakie przewagi daje zastosowanie tego rozwiązania? Dzięki kontenerom zyskujemy pewność, że aplikacje mają wszystko, czego potrzebują do działania, są stale aktualne i skalowalne. W miarę dodawania kolejnych kontenerów — które często zawierają mikrousługi — możemy nimi automatycznie zarządzać i je dystrybuować.
Kubernetes to także wyzwania
W przypadku Merce chcieliśmy pójść o krok dalej i stać się niezależną marką, która dostarcza w sposób ciągły i bezpieczny rozwiązania, które sprawiają, że staniemy na czele peletonu technologicznego i wyróżnimy się na tle konkurencji. Jednakże, jak to zwykle bywa, w przypadku takich dużych projektów pojawiają się wyzwania. Oto cztery najważniejsze z nich:
Wyzwania środowiska developerskiego
Rozpoczęcie pracy wymaga dobrania odpowiednich narzędzi dla developerów do zarządzania całym środowiskiem developerskim. Tutaj też mówimy o dodatkowych udogodnieniach i rozwiązaniach automatyzujących poszczególne etapy naszych działań. Wyzwaniem stało się też wykorzystanie Gitlaba, jako narzędzia wspierającego codzienną pracę całych zespołów.
Wyzwana powiązanie z publikacją nowych wersji
Pierwsze prace wymagały przygotowania odpowiedniego środowiska. Początkowo na runnerach uruchamiane były konfiguracje compose, które używały tych samych obrazów jednak compose to nie K8s.
Z tego powodu niektóre problemy pojawiały się dopiero na produkcji, a prędkość działania pozostawiała wiele do życzenia. Nie było też możliwości sterowania zasobami. Dopiero dzięki zaawansowanym rozwiązaniom Gitlab CI można projektować pipeline’y, które krok po kroku przetestują wrzucane zmiany oraz znajdą ewentualnie nieprawidłowości w kodzie lub logice biznesowej.
Wyzwania środowiska produkcyjnego
Początki wdrażania serwisów na K8s nie posiadały sensownego rozwiązania przechowywania danych, szczególnie jeśli chodzi o bazy danych. Bardzo złym, ale najprostszym rozwiązaniem było użycie NFS, czyli systemu plików udostępnianego po protokole TCP. Jego niebywałą zaletą była możliwość podpinania tego samego zasobu do wielu podów. Jednak jak się okazało, jest to zgubna metoda, szczególnie w przypadku baz danych, które często traciły pakiety. W najgorszych sytuacjach powodowało fizyczne uszkodzenie plików DB. Pośrednim rozwiązaniem jest zastosowanie wolumenu logicznego (LVM), które daje nam możliwość podpięcia dysków blokowych oraz jest bardzo szybkie. Niestety powoduje to uzależnienie się od noda, na którym dane zostaną zainicjowane.
Problemy pojawiające się w modelu CI/CD
Ciągłe dostarczanie nie jest łatwe, ale możliwe do zrealizowania. Kluczowym czynnikiem jest zmiana sposobu myślenia zespołów, między innymi o codziennym commitowaniu i odseparowaniu nowych zmian, korzystania z podstawowych technik nawet takich jak toogle feature do czasu ostatecznego wdrożenia rozwiązania. Wykorzystanie tego modelu to tak naprawdę wprowadzanie małych zmian, ale w sposób ciągły, co ogranicza możliwość pojawienia się błędów.
Chcesz wiedzieć więcej?
Powyżej zaznaczyliśmy tylko niektóre z napotkanych wyzwań. Wszystkie opisane wyzwania wraz z rozwinięciem porusza obszerna prezentacja pt.: „Jakie wyzwania napotkaliśmy podczas 4 lat tworzenia prywatnego klastra K8S”, którą przygotował Paweł Babilas nasz DevOps Lead. Zawiera ona rozwinięcie poszczególnych punktów i przedstawia historię wielu zmian w naszej firmie, które doprowadziły do obecnego etapu dostarczania rozwiązań e-commerce opartych na chmurze. Prezentacja pierwotnie została wygłoszona podczas konferencji PHPers SUMMIT 2022. Dziękujemy organizatorom PHPers SUMMIT 2022 za udostępnienie nagrania.