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 / 问题 / 1042049
Accepted
Ben Davis
Ben Davis
Asked: 2020-11-11 08:13:51 +0800 CST2020-11-11 08:13:51 +0800 CST 2020-11-11 08:13:51 +0800 CST

为什么当节点有足够的可用资源时,Pod 无法调度?

  • 772

我的应用程序中的 pod 扩展为每个用户 1 个 pod(每个用户都有自己的 pod)。我对应用程序容器设置的限制如下:

  resources:
    limits:
      cpu: 250m
      memory: 768Mi
    requests:
      cpu: 100m
      memory: 512Mi

我的节点池中的节点每个都有 8GB 内存。我启动了一堆用户实例来开始测试,并看着我的资源指标随着我启动每个实例而上升:

中央处理器:

在此处输入图像描述

记忆:

在此处输入图像描述

在 15:40,我看到事件日志显示了这个错误(注意:第一个节点被排除在外):

0/2 nodes are available: 1 Insufficient memory, 1 node(s) didn't match node selector.

当内存/cpu 请求仍远低于总容量(cpu 约为 50%,mem 约为 60%)时,为什么会发生这种情况?

以下是一些相关信息kubectl describe node:

Non-terminated Pods:          (12 in total)
  Namespace                   Name                                                               CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                                               ------------  ----------  ---------------  -------------  ---
  ide                         theia-deployment--ac031811--football-6b6d54ddbb-txsd4              110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    13m
  ide                         theia-deployment--ac031811--footballteam-6fb7b68794-cv4c9          110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    12m
  ide                         theia-deployment--ac031811--how-to-play-football-669ddf7c8cjrzl    110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    14m
  ide                         theia-deployment--ac031811--packkide-7bff98d8b6-5twkf              110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    9m54s
  ide                         theia-deployment--ac032611--static-website-8569dd795d-ljsdr        110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    16m
  ide                         theia-deployment--aj090111--spiderboy-6867b46c7d-ntnsb             110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    2m36s
  ide                         theia-deployment--ar041311--tower-defenders-cf8c5dd58-tl4j9        110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    14m
  ide                         theia-deployment--np091707--my-friends-suck-at-coding-fd48ljs7z    110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    4m14s
  ide                         theia-deployment--np091707--topgaming-76b98dbd94-fgdz6             110m (5%)     350m (18%)  528Mi (9%)       832Mi (15%)    5m17s
  kube-system                 csi-azurefile-node-nhbpg                                           30m (1%)      400m (21%)  60Mi (1%)        400Mi (7%)     12d
  kube-system                 kube-proxy-knq65                                                   100m (5%)     0 (0%)      0 (0%)           0 (0%)         12d
  lens-metrics                node-exporter-57zp4                                                10m (0%)      200m (10%)  24Mi (0%)        100Mi (1%)     6d20h

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource                       Requests      Limits
  --------                       --------      ------
  cpu                            1130m (59%)   3750m (197%)
  memory                         4836Mi (90%)  7988Mi (148%)
  ephemeral-storage              0 (0%)        0 (0%)
  hugepages-1Gi                  0 (0%)        0 (0%)
  hugepages-2Mi                  0 (0%)        0 (0%)
  attachable-volumes-azure-disk  0             0
kubernetes azure aks autoscaling
  • 2 2 个回答
  • 3909 Views

2 个回答

  • Voted
  1. Piotr Malec
    2020-11-13T07:43:27+08:002020-11-13T07:43:27+08:00

    根据 kubernetes文档:

    如何调度具有资源请求的 Pod

    创建 Pod 时,Kubernetes 调度程序会选择一个节点供 Pod 运行。每个节点对每种资源类型都有一个最大容量:它可以为 Pod 提供的 CPU 和内存量。调度器确保对于每种资源类型,调度的Containers的资源请求总和小于节点的容量。请注意,尽管节点上的实际内存或 CPU 资源使用率非常低,但如果容量检查失败,调度程序仍会拒绝在节点上放置 Pod。当资源使用量随后增加时,例如,在请求率的每日峰值期间,这可以防止节点上的资源短缺。

    可以在此处找到有关如何运行 pod 限制的更多信息。


    更新:

    可以通过重新调整内存限制和添加适合您偏好的驱逐策略来优化资源消耗。您可以在此处和此处的 kubernetes 文档中找到更多详细信息。


    更新 2:

    为了更好地理解调度程序拒绝将 Pod 放置在节点上的原因,我建议在您的 AKS 群集中启用资源日志。查看 AKS文档中的本指南。从常见日志中查找kube-scheduler日志以查看更多详细信息。

    • 2
  2. Best Answer
    Ben Davis
    2020-11-20T16:07:40+08:002020-11-20T16:07:40+08:00

    我发现在查看可用容量时,您需要注意Allocatable,而不是Capacity。来自 Azure 支持:

    如果我们按照该文档上的示例(使用整数到每个节点 8GB),请查看此文档“资源预留”:

    0.75 + (0.25*4) + (0.20*3) = 0.75GB + 1GB + 0.6GB = 2.35GB / 8GB = 29.37% reserved

    对于 8GB 的​​服务器,预留量约为 29.37%,这意味着:

    node = 保留的内存量29.37% * 8000 = 2349。Allocatable剩余内存=5651前9个pods将使用=9 * 528 = 4752 第一个pods后分配的剩余内存= 899(kubectl describe节点中显示的可分配内存,应该是OS预留后可用的数量)

    在最后一个数字中,我们必须考虑它需要运行的操作系统预留,因此可能在占用操作系统预留内存之后,节点上没有足够的空间容纳更多的 pod,因此消息。

    考虑到计算,这将导致预期的行为。

    • 2

相关问题

  • 无法通过 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