Kubernetes node.kubernetes.io/memory-pressure:NoSchedule

问题描述

下午好

由于以下错误我有两个吊舱无法吊起:

prometheus-k8s-0 0/3 Pending 0 56s
prometheus-k8s-1 2/3 Running 0 69s

Warning FailedScheduling <unkNown> default-scheduler 0/4 nodes are available: 1 node (s) had taint {node.kubernetes.io/memory-pressure:},that the pod didn't tolerate,3 node (s) had volume node affinity conflict

kubectl describe nodes aks-bbagentpool-39730754-vmss000000 | grep -i taint
Taints: node.kubernetes.io/memory-pressure:NoSchedule

我看不到任何节点的高消耗:

kubectl top nodes

NAME cpu (cores) cpu% MEMORY (bytes) MEMORY%

aks-bbagentpool-39730754-vmss000000 153m 8% 920Mi 17%
aks-bbagentpool-39730754-vmss000001 1854m 97% 5357Mi 99%
aks-bbinfra-39730754-vmss000000 211m 5% 2038Mi 16%
aks-bbinfra-39730754-vmss000001 111m 2% 1706Mi 13%

prometheus解决方案来自Coreos,我看到守护程序可以运行

kubectl get daemonsets.apps -n monitoring

NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE

node-exporter 4 4 4 4 4 kubernetes.io/os=linux 3d13h

我想知道发生此故障的原因以及如何解决节点的状态。

解决方法

当没有足够的内存来安排任何新的Pod时,节点控制器会自动添加

Talent node.kubernetes.io/memory-pressure

在您的情况下,特定节点在某个时候可能会遇到内存问题,并且节点控制器已添加了此污点,以防止该节点吸引任何新的pod调度,并且在适当的时候,内存将被释放并出现恢复正常。控制器可以根据特定条件自动应用污渍,但不会自动将其清除。

您有两种方法可以解决此问题。

  1. 从节点kubectl taint nodes aks-bbagentpool-39730754-vmss000000 node.kubernetes.io/memory-pressure:NoSchedule-移除污渍
  2. 或向您的广告连播添加容忍度(我个人不喜欢)

您可以获取有关DocsBlog的更多详细信息

谢谢

,

要从节点上去除异味,请使用

kubectl taint node <nodename> node.kubernetes.io/memory-pressure:NoSchedule-

别忘了-

或者另一种方式如下

如果您想保持节点上的污点原状,并且仍然想在该节点上安排Pod,则将其包含在pod / deployment.yaml文件中。

  spec:
    containers:
    - name: nginx
      image: nginx
      imagePullPolicy: IfNotPresent
    tolerations: # <---------------------------- This part
    - key: "node.kubernetes.io/memory-pressure"
      operator: "Exists"
      effect: "NoSchedule"