Kubernetes i Docker zrewolucjonizowały sposób wdrażania i uruchamiania aplikacji poprzez konteneryzację. Kontenery współdzielą zasoby hosta, w tym pamięć RAM, co wymaga starannego zarządzania limitami i rezerwacjami pamięci. Nieprawidłowe zarządzanie pamięcią w środowiskach kontenerowych prowadzi do typowych problemów: OOMKiller (Out of Memory Killer) kończący procesy, degradacja wydajności przez swap, trudna diagnostyka problemów pamięciowych w mikrousługach.
Opisujemy, jak Kubernetes i Docker zarządzają pamięcią RAM, jak ustawiać limity i rezerwacje pamięci dla kontenerów i jak diagnozować problemy z pamięcią w środowiskach kontenerowych.
Docker i limity pamięci – jak Docker alokuje pamięć kontenerom?
Docker pozwala ustawiać limity pamięci dla kontenerów przez flagę --memory i --memory-swap. Bez ustawionych limitów: kontener może używać całej dostępnej pamięci hosta, co prowadzi do zagłodzenia innych kontenerów i systemu hosta. --memory 512m: kontener może użyć maksymalnie 512 MB RAM; przy przekroczeniu – OOMKiller kończy procesy wewnątrz kontenera. --memory-swap 1g: łączna suma RAM + swap dla kontenera. Gdy kontener przekracza swój limit RAM: Linux OOMKiller (Kernel Out Of Memory Killer) identyfikuje procesy zużywające zbyt wiele pamięci i je zabija (SIGKILL) – dlatego aplikacje w kontenerach nieoczekiwanie kończą działanie bez oczywistej przyczyny.