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 / 问题 / 989750
Accepted
aspyct
aspyct
Asked: 2019-10-30 01:47:57 +0800 CST2019-10-30 01:47:57 +0800 CST 2019-10-30 01:47:57 +0800 CST

Kubernetes - 如何调试失败的调度“0 个节点可用”

  • 772

我经常发现自己试图启动一个新的 pod,却得到一个错误,说没有可用的节点。就像是:

0/9 nodes are available: 1 node(s) had no available volume zone, 8 node(s) didn't match node selector.

当我收到这些消息时,我总是不知所措。我应该如何调试它?

kubernetes
  • 1 1 个回答
  • 7781 Views

1 个回答

  • Voted
  1. Best Answer
    Mark
    2019-10-30T09:51:47+08:002019-10-30T09:51:47+08:00

    一开始我的建议是看一下Kubernetes 调度程序组件:

    master 上的组件,它监视没有分配节点的新创建的 pod,并选择一个节点供它们运行。[-] 调度决策考虑的因素包括个人和集体资源需求、硬件/软件/策略约束、亲和力和反关联规范、数据局部性、工作负载间干扰和截止日期。

    调度程序监视没有分配节点的新创建的 Pod。对于调度程序发现的每个 Pod,调度程序负责为该 Pod 找到运行的最佳节点。对于每个新创建的 Pod 或其他未调度的 Pod,kube-scheduler 选择一个最佳节点供它们运行。但是,Pod 中的每个容器对资源的要求都不同,每个 Pod 也有不同的要求。因此,需要根据具体的调度要求对现有节点进行过滤。

    根据文档:

    在集群中,满足 Pod 调度要求的节点称为可行节点。如果没有合适的节点,则 pod 将保持未调度状态,直到调度程序能够放置它。

    kube-scheduler 在 2 步操作中为 pod 选择一个节点。基于默认策略的标准 kube-scheduler :

    • 过滤
    • 计分

    查看这两项政策,您可以找到更多关于做出决策的信息。例如:

    for scoring at the stage CalculateAntiAffinityPriorityMap This policy helps implement pod anti-affinity.
    

    您可以在下面找到基于影响Kubernetes 调度程序决策的快速回顾

    • 节点名称:通过将节点的主机名添加到 Pod 定义的 .spec.nodeName 参数中,您可以强制此 Pod 在该特定节点上运行。调度程序使用的任何选择算法都将被忽略。这种方法是最不推荐的。
    • 节点选择器:通过在您的节点上放置有意义的标签,Pod 可以使用 nodeSelector 参数来指定一个或多个键值标签映射,这些映射必须存在于目标节点上才能被选中以运行该 Pod。更推荐这种方法,因为它增加了很多灵活性,并建立了松散耦合的 node-pod 关系。
    • 节点亲和性:在选择应考虑调度特定 Pod 的节点时,此方法增加了更大的灵活性。使用 Node Affinity,Pod 可能严格要求在具有特定标签的节点上调度。它还可以通过影响调度程序赋予它们更多权重来表达对特定节点的某种程度的偏好。
    • Pod 亲和和反亲和:当 Pod 必须与同一节点上的其他 Pod 共存(或不共存)时,可以使用这种方法。Pod 亲和性允许 Pod 要求将其部署在运行具有特定标签的 Pod 的节点上。类似地,Pod 可能会强制调度程序不要将其放置在具有特定标签的 Pod 的节点上。
    • 污点和容忍度:在此方法中,您无需决定将 Pod 调度到哪些节点,而是决定哪些节点根本不应该接受任何 Pod 或只接受选定的 Pod。通过污染节点,您指示调度程序不要将此节点用于任何 Pod 放置,除非 Pod 容忍污染。容忍度由键、值和污点的效果组成。使用运算符,您可以决定是整个 taint 必须与成功放置 Pod 的容差匹配,还是只有数据的子集必须匹配。

    根据k8s 文档:

    1 . NodeName是最简单的节点选择约束形式,但由于其局限性,通常不使用它。使用 nodeName 选择节点的一些限制是:

    • 如果命名节点不存在,则该 pod 将不会运行,并且在某些情况下可能会被自动删除。
    • 如果命名节点没有资源来容纳 pod,则 pod 将失败,其原因将说明原因,例如 OutOfmemory 或 OutOfcpu。云环境中的节点名称并不总是可预测或稳定的。

    2 . 亲和/反亲和功能,极大地扩展了您可以表达的约束类型。主要改进是: - 语言更具表现力(不仅仅是“精确匹配的 AND”) - 您可以指示规则是“软”/“偏好”而不是硬要求,所以如果调度程序不能满足这样,pod 仍将被调度 - 您可以限制在节点(或其他拓扑域)上运行的其他 pod 上的标签,而不是节点本身上的标签,这允许关于哪些 pod 可以和不能位于同一位置的规则

    亲和性特性包括两种亲和性,节点亲和性和Pod 间亲和性/反亲和性。节点亲和力类似于现有的 nodeSelector(但具有上面列出的前两个好处),

    目前有两种类型的 pod 亲和和反亲和,称为requiredDuringSchedulingIgnoredDuringExecution和PreferredDuringSchedulingIgnoredDuringExecution,分别表示“硬”和“软”需求。

    希望这有帮助。

    其他资源:

    • 亲和和反亲和

    • 调度器性能调优

    • 理解 Kubernetes 中的污点和容忍度

    • Kubernetes 污点和容忍度 PreferNoSchedule

    • 4

相关问题

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