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 / 问题 / 1089638
Accepted
Daigo
Daigo
Asked: 2022-01-11 23:50:09 +0800 CST2022-01-11 23:50:09 +0800 CST 2022-01-11 23:50:09 +0800 CST

Kubernetes Pod 在调度后立即以 OutOfMemory 状态失败

  • 772

我正在裸机 Kubernetes 集群(版本 1.22.1)上测试我的应用程序,并且在将我的应用程序作为作业启动时遇到问题。

我的集群有两个节点(主节点和工作节点),但工作节点被封锁。在主节点上,21GB 内存可供应用程序使用。

我试图同时将我的应用程序作为三个不同的工作启动。由于我将 16GB 的内存设置为资源请求和限制,因此只启动了一个 Job,其余两个处于 Pending 状态。我已将 backoffLimit: 0 设置为 Jobs。

NAME            READY   STATUS     RESTARTS   AGE
app1--1-8pp6l   0/1     Pending    0          42s
app2--1-42ssl   0/1     Pending    0          45s
app3--1-gxgwr   0/1     Running    0          46s

第一个 Pod 完成后,应该只启动两个处于 Pending 状态的 Pod 中的一个。但是,一个已启动,另一个处于 OutOfMemory 状态,即使 Pod 中没有启动任何容器。

NAME            READY   STATUS        RESTARTS   AGE
app1--1-8pp6l   0/1     Running       0          90s
app2--1-42ssl   0/1     OutOfmemory   0          93s
app3--1-gxgwr   0/1     Completed     0          94s

OutOfMemory Pod 的事件如下:

Events:
  Type     Reason            Age                   From               Message
  ----     ------            ----                  ----               -------
  Warning  FailedScheduling  3m41s (x2 over 5m2s)  default-scheduler  0/2 nodes are available: 1 Insufficient memory, 1 node(s) were unschedulable.
  Normal   Scheduled         3m38s                 default-scheduler  Successfully assigned test/app2--1-42ssl to master
  Warning  OutOfmemory       3m38s                 kubelet            Node didn't have enough resource: memory, requested: 16000000000, used: 31946743808, capacity: 37634150400

似乎 Pod 已分配给节点,即使没有足够的空间给它,因为另一个 Pod 刚刚启动。

我想这不是 Kubernetes 的预期行为,有人知道这个问题的原因吗?

kubernetes
  • 2 2 个回答
  • 439 Views

2 个回答

  • Voted
  1. Best Answer
    Mikolaj S.
    2022-01-14T04:34:54+08:002022-01-14T04:34:54+08:00

    这是版本的已知问题1.22.x- 您可以找到有关此的多个 GitHub 和 Stackoverflow 主题,例如:

    • 无论资源是否不足,Pod 都会被调度
    • 1.22 回归:Kubelet 拒绝使用应由已完成 pod 释放的资源的 pod

    该问题的修复包含在 1.23 版本中:

    • 修复了一个回归,其中 Kubelet 在决定是否允许更多 pod 时,无法从计算当前使用的资源数量中排除已完成的 pod。(#104577, @smarterclayton)

    因此,请将您的 Kubernetes 集群升级到最新的稳定版本。

    我希望它会对您有所帮助,但请记住,即使应用了修复程序,Github 上仍存在另一个类似问题(此处提到大约 10 天前 - 状态为 2022 年 1 月 13 日):

    在此处链接以确保完整性 - 如#106884中所述,在此修复后可能会出现类似的症状。kubelet 认为用于终止 pod 的资源正在使用中(它们是!),但调度程序忽略终止 pod 并调度新 pod。因为 kubelet 现在考虑终止 pod,所以它拒绝那些快速重新调度的 pod。

    那么,可能唯一的解决方案就是降级到 1.21 版本。

    • 1
  2. Liran Cohen
    2022-02-01T05:26:21+08:002022-02-01T05:26:21+08:00

    您可以发布 pod 的 yaml 吗?

    我在我的一个客户那里遇到过类似的情况,他们在内存限制(860m 而不是 860Mi)处有错字,值得一看

    • 0

相关问题

  • Nvidia Config 后 Containerd 无法启动

  • 在使用 kubeadm 引导集群之前,如何修改 CoreDNS 配置映射?

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