Od Kubernetes 1.8 wydaje się, że muszę wyłączyć swap na moich węzłach (lub ustawić --fail-swap-on
na false
).
Nie mogę znaleźć technicznego powodu, dla którego Kubernetes nalega na wyłączenie wymiany. Czy to ze względu na wydajność? Względy bezpieczeństwa? Dlaczego przyczyna tego nie jest udokumentowana?
kubernetes
swap
Jeroen Jacobs
źródło
źródło
Powodem tego jest, jak rozumiem, to, że kubelet nie jest przeznaczony do obsługi sytuacji wymiany, a zespół Kubernetes nie planuje tego zaimplementować, ponieważ celem jest dopasowanie strąków do pamięci hosta.
z tego numeru
źródło
Nieprawidłowe użycie zamiany TL; DR to tylko leniwy hack, który pokazuje słabe zrozumienie podsystemów pamięci i brak podstawowych umiejętności administrowania systemami. Projektowanie usług infrastrukturalnych i niezrozumienie tych systemów zakończy się niepowodzeniem.
Mam więc komentarz na ten temat, wydaje mi się to raczej lenistwem niż cechą lub wymaganiem. Jest absolutnie możliwe, aby poprawnie obsługiwać swap, analizować pamięć i określać, jak właściwie korzystać z podsystemu pamięci bez uderzania w swap. Wokół tego zbudowana jest litania narzędzi i możesz zagwarantować, że proces nie wykorzysta swap dość łatwo, więc punkt wydajności jest nieprawidłowy. To po prostu leniwe kodowanie, aby nie wkładać tego oprzyrządowania, a ogólnie całkowite usunięcie swapów będzie ze szkodą dla wydajności systemu. Kluczem tutaj jest prawidłowe korzystanie z niego. Zgadzam się, że zamiana zasobników na dyski wpłynie na wydajność, jednak istnieje wiele rzeczy, które należy wymienić na dysk.
Ponadto jądro Linuksa zostało zaprojektowane tak, aby wykorzystywać swap, a całkowite wyłączenie go będzie miało negatywne konsekwencje. Lepszym sposobem na poradzenie sobie z tym byłoby przypięcie zasobników do pamięci głównej i niedopuszczenie do zamiany na dysk, zmniejszenie ciśnienia pamięci podręcznej VFS, aby nie zamieniało się, chyba że jest to absolutnie konieczne, a nawet wtedy można spowodować zawieść MALLOC w przypadku wyczerpania pamięci głównej.
W zależności od procesów w pojemnikach, w których uszkodzenie pojemnika lub jego zabicie przez zabójcę OOM może spowodować katastrofalne skutki. Rozumiem jednak, że procesy uruchomione w tych kontenerach powinny idealnie być bezstanowe i efemeryczne, ale w ciągu 20 lat działania systemów nie widziałem, by wszyscy w 100% stosowali zamierzony projekt.
Co więcej, nie uwzględnia to przyszłych technologii, takich jak pamięć nieulotna, oraz nowszych systemów pamięci, takich jak intel xpoint, które można wykorzystać do znacznego rozszerzenia pamięci głównej za pomocą hybrydowych systemów dyskowych / pamięci. W tego rodzaju systemach mogą używać ich bezpośrednio jako dodatkowej pamięci głównej lub wykorzystywać pliki wymiany w celu rozszerzenia pamięci głównej z niewielkim wpływem na wydajność.
źródło
Jest bilet, aby go włączyć ponownie, uzyskasz więcej wglądu
https://github.com/kubernetes/kubernetes/issues/53533
źródło