Jak przestać przepłacać za chmurę i zacząć żyć z Kubernetes Autoscaler
Wyobraź sobie taką sytuację: uruchomiłeś kampanię reklamową, ruch gwałtownie rośnie, a Twoje pody w Kubernetes zaczynają "dusić się" pod obciążeniem. Albo odwrotnie: zapada noc, użytkownicy śpią, ale dziesiątki kosztownych instancji nadal działają w chmurze, pochłaniając budżet firmy. Brzmi znajomo?
Zazwyczaj w takich momentach ludzie przypominają sobie o autoskalowaniu. W ekosystemie Kubernetes zajmuje się tym repozytorium kubernetes/autoscaler. To nie jest pojedyncze narzędzie, ale cały zestaw narzędzi, które pomagają klastrowi "oddychać" wraz z obciążeniem. Postanowiłem sprawdzić, co kryje się pod maską i dlaczego jest to must-have dla każdego środowiska produkcyjnego.
Co kryje się pod maską
W repozytorium znajdują się trzy główne komponenty. Każdy rozwiązuje swoje specyficzne zadanie i często są ze sobą mylone.
Cluster Autoscaler: gdy brakuje "żelaza"
To prawdopodobnie najpopularniejsze narzędzie w zestawie. Jego zadanie jest proste: jeśli w klastrze pojawią się pody, które nie mogą wystartować z powodu braku zasobów (status Pending), Cluster Autoscaler udaje się do dostawcy chmury i prosi o dodanie nowego węzła.
Działa to również w drugą stronę. Jeśli jakiś węzeł przez dłuższy czas jest w połowie pusty i jego pody mogą być bezpiecznie przeniesione na inne węzły, autoskaler usunie nadmiarowy sprzęt. To bezpośrednie oszczędności kosztów, zwłaszcza jeśli korzystasz z AWS, GCP lub Azure.
Vertical Pod Autoscaler (VPA): Magia dostrajania zasobów
Jeśli Cluster Autoscaler zmienia liczbę węzłów, to VPA zmienia "rozmiar" samych podów. Często programiści ustalają requests i limits na oko. Rezultatem jest albo aplikacja crashuje z OutOfMemory, albo rezerwujemy 2 GB RAM, podczas gdy potrzeba tylko 200 MB.
VPA monitoruje rzeczywiste zużycie zasobów i automatycznie dostosowuje limity. Projekt jest obecnie w statusie beta, ale już teraz robi coś naprawdę cool — tryb rekomendacji. Możesz po prostu obserwować, jakie zasoby sugeruje ustawić, bez powierzania mu automatycznego restartu podów.
Addon Resizer: Mikro-zarządzanie dla usług systemowych
To uproszczona wersja vertical autoscalera. Potrzebna jest dla usług, których zużycie zasobów skaluje się liniowo z rozmiarem klastra. Na przykład metrics server potrzebuje więcej pamięci, jeśli masz 100 węzłów zamiast 10. Addon Resizer monitoruje liczbę węzłów i odpowiednio skaluje takie pomocnicze komponenty.
Jak to działa w praktyce
Powiedzmy, że używasz Go. Aby zacząć pracować z kodem projektu lokalnie, musisz przestrzegać struktury ścieżek, do której przyzwyczaił się Kubernetes. Kod powinien znajdować się w k8s.io, a nie w github.com.
Ciekawe: Cluster Autoscaler obsługuje dziesiątki dostawców. Są tam nie tylko giganci jak AWS, ale także specyficzne rozwiązania dla bare-metal lub klastrów lokalnych. Jeśli budujesz własną usługę chmurową, będziesz musiał zaimplementować interfejs CloudProvider, a Twój klaster też nauczy się skalować.
Dlaczego to jest ważne dla programistów
Wielu myśli, że autoskalowanie to zadanie inżyniera DevOps. W rzeczywistości zrozumienie, jak działa vertical-pod-autoscaler, znacznie ułatwia życie programistom backendu.
- Możesz zapomnieć o zgadywaniu podczas konfigurowania zasobów.
- Aplikacje stają się bardziej odporne na nagłe skoki ruchu.
- Widzisz rzeczywisty profil zużycia pamięci i CPU swojego kodu.
Przy okazji, repozytorium zawiera oficjalne wykresy Helm do szybkiej instalacji. To znacznie wygodniejsze niż ręczne wdrażanie manifestów.
Czy warto wdrażać to od razu?
Jeśli pracujesz w chmurze i Twoje rachunki za infrastrukturę rosną, to Cluster Autoscaler to fundament. Zwróci czas poświęcony na konfigurację w pierwszym miesiącu działania.
Sytuacja z Vertical Pod Autoscaler jest bardziej skomplikowana. Ponieważ restartuje pody, aby zmienić zasoby (do czasu aż K8s dostanie właściwe in-place resource updates), należy go używać ostrożnie. Sugerowałbym zacząć od trybu Recommender. Otrzymasz listę wskazówek dotyczących optymalizacji zasobów, ale VPA niczego nie zmieni.
Projekt żyje i ma się dobrze, wspierany przez ogromną społeczność (prawie 9000 gwiazdek i tysiące forków). Jeśli masz pytania, ludzie są aktywni na kanale Kubernetes Slack #sig-autoscaling.
Więc jeśli Twój klaster wciąż jest statyczny — rzuć okiem na to repozytorium. Czas sprawić, by chmura pracowała dla Ciebie, nie przeciwko Tobie.
Powiązane projekty