K8S 中不建议使用 swap 的,主要是因为如果把 swap 作为资源加进来,会有很多工作要做,也就是说目前的实现还不能完全上生产,根本原因还是 K8S 对于 pod 使用 MEM 资源的 request/limit 的 QoS 的定义,因为 K8S 对 POD 的调度与杀死都是基于资源来操作的,举个简单的例子,如果没有开启 swap,那么 POD MEM 资源的 request/limit 就完全依赖于物理内存,有足够物理内存我就调度,没有我就不调度或者杀死其他同宿主机的 POD 来满足。如果有了 swap,pod 还需要维护一个 swap 资源项来表示某个 pod 占用了多少 swap,swap 用完了再给其他的 pod 使用,也要相应的累计,这个实现起来,不是 K8S 单纯的增增减减的事情,还会考虑 Linux 内核实现相关 。再比如,如果有两个POD都使用了同样的mem/cpu,也定义了同样的 QoS,但使用的 swap 不一样,这个时候假设宿主机资源不够了,K8S 会很为难的,它不知道要 KILL 谁,因为它把握不好 swap 使用情况。总之,目前还不建议使用。
收起