-
Notifications
You must be signed in to change notification settings - Fork 41.9k
Description
Is this a BUG REPORT or FEATURE REQUEST?:
Uncomment only one, leave it on its own line:
/kind bug
/kind feature
What happened:
Kubelet/Kubernetes 1.8 does not work with Swap enabled on Linux Machines.
I have found this original issue #31676
This PR #31996
and last change which enabled it by default 71e8c8e
If Kubernetes does not know how to handle memory eviction when Swap is enabled - it should find a way how to do that, but not asking to get rid of swap.
Please follow kernel.org Chapter 11 Swap Management, for example
The casual reader may think that with a sufficient amount of memory, swap is unnecessary but this brings us to the second reason. A significant number of the pages referenced by a process early in its life may only be used for initialisation and then never used again. It is better to swap out those pages and create more disk buffers than leave them resident and unused.
In case of running a lot of node/java applications I have seen always a lot of pages are swapped, just because they aren't used anymore.
What you expected to happen:
Kubelet/Kubernetes should work with Swap enabled. I believe instead of disabling swap and giving users no choices kubernetes should support more use cases and various workloads, some of them can be an applications which might rely on caches.
I am not sure how kubernetes decided what to kill with memory eviction, but considering that Linux has this capability, maybe it should align with how Linux does that? https://www.kernel.org/doc/gorman/html/understand/understand016.html
I would suggest to rollback the change for failing when swap is enabled, and revisit how the memory eviction works currently in kubernetes. Swap can be important for some workloads.
How to reproduce it (as minimally and precisely as possible):
Run kubernetes/kublet with default settings on linux box
Anything else we need to know?:
Environment:
- Kubernetes version (use
kubectl version): - Cloud provider or hardware configuration**:
- OS (e.g. from /etc/os-release):
- Kernel (e.g.
uname -a): - Install tools:
- Others:
/sig node
cc @mtaufen @vishh @derekwaynecarr @dims