AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 881517
Accepted
Jeroen Jacobs
Jeroen Jacobs
Asked: 2017-11-03 05:22:56 +0800 CST2017-11-03 05:22:56 +0800 CST 2017-11-03 05:22:56 +0800 CST

为什么禁用 Kubernetes 上的交换

  • 772

从 Kubernetes 1.8 开始,我似乎需要在我的节点上禁用交换(或设置--fail-swap-on为false)。

我找不到 Kubernetes 坚持禁用交换的技术原因。这是出于性能原因吗?安全原因?为什么没有记录其原因?

kubernetes
  • 4 4 个回答
  • 55379 Views

4 个回答

  • Voted
  1. Best Answer
    Mike
    2017-11-03T05:28:18+08:002017-11-03T05:28:18+08:00

    Kubernetes 的想法是将实例紧密打包到尽可能接近 100% 的利用率。所有部署都应使用 CPU/内存限制。因此,如果调度程序将 pod 发送到机器,它根本不应该使用交换。你不想交换,因为它会减慢速度。

    主要是为了性能。

    • 50
  2. Michael Rutledge
    2018-09-21T21:52:08+08:002018-09-21T21:52:08+08:00

    TL;DR 没有正确使用交换只是一种懒惰的技巧,表明对内存子系统的理解很差,并且缺乏基本的系统管理技能。设计基础设施服务而不理解这些系统注定会以失败告终。

    所以,我对此有一些评论,这对我来说似乎更像是懒惰,而不是功能或要求。完全可以正确处理交换、分析内存并确定如何正确利用内存子系统而不会遇到交换。围绕此构建了一连串工具,您可以保证进程不会很容易地使用交换,因此性能点是不正确的。不放入此工具只是懒惰的编码,总体而言,完全删除交换将损害系统性能。这里的关键是正确使用它。我同意将 pod 换出到磁盘会影响性能,但是有许多东西应该换出到磁盘。

    此外,Linux 内核旨在利用交换,完全禁用它会产生负面影响。解决这个问题的更好方法是将 pod 固定到主内存中,并且不允许它们交换到磁盘,减少 vfs 缓存压力,以便除非绝对必要,否则它不会交换,即使那样你也可能导致固定进程在主内存耗尽的情况下使 MALLOC 失败。

    根据容器中的进程,容器发生硬故障或被 OOM 杀手杀死可能会导致一些非常灾难性的结果。然而,我理解在这些容器中运行的进程在理想情况下应该是无状态的和短暂的,但是在运行系统的 20 年中,我从未见过每个人都 100% 地遵循预期的设计。

    此外,这还没有考虑到诸如非易失性存储器之类的未来技术,以及可用于使用混合磁盘/存储器系统显着扩展主存储器的英特尔 xpoint 等较新的存储器系统。使用这些类型的系统,他们可以直接将它们用作补充主内存或利用交换文件来扩展主内存,而对性能的影响可以忽略不计。

    • 35
  3. Rory McCune
    2017-12-03T04:33:04+08:002017-12-03T04:33:04+08:00

    据我了解,原因是 kubelet 并非旨在处理交换情况,Kubernetes 团队也不打算实现这一点,因为目标是 pod 应该适合主机的内存。

    从这个 GitHub 问题 #53533

    对交换的支持非常重要。有保证的 pod 永远不需要交换。Burstable pod 应该在不需要交换的情况下满足它们的请求。BestEffort pod 无法保证。kubelet 现在缺乏在 pod 之间提供适量可预测行为的智能。

    • 26
  4. rzr
    2019-08-03T10:04:29+08:002019-08-03T10:04:29+08:00

    有票可以再次启用它,您将在那里获得更多见解

    https://github.com/kubernetes/kubernetes/issues/53533

    • 1

相关问题

  • 无法通过 Docker 在本地运行 Hyperkube (kubernetes)

  • 跨 Kubernetes 分散工作负载

  • Kubernetes升级回滚机器类型

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve