为什么kubernetes因内存资源限制而报告调度错误?

时间:2017-05-02 14:28:44

标签: kubernetes

我正在尝试使用资源限制来定义作业,这是一个基本的pod定义:

apiVersion: v1
kind: Pod
metadata:
    name: busybox
    labels:
        app: busybox
spec:
    containers:
        - name: busybox
          image: busybox
          args: [/bin/sh, -c, 'sleep 600']
          resources:
            limits:
                memory: "1Gi"
                cpu: "1"
            requests:
                cpu: "0.1"
                memory: "400Mi"
    nodeSelector:
        gitlab: "true"

当声明资源请求为“300Mi”的作业时,这有效,但是如果请求为“400Mi”,则会失败:

  

52m 29s 183 default-scheduler警告FailedScheduling没有可用的节点匹配以下所有谓词::内存不足(3),MatchNodeSelector(2)。

kubectl describe node <relevant node>获取相关信息会在资源下显示以下内容:

  

容量:
   cpu:2
   记忆:2052872Ki
   豆荚:110
  可分配:
   cpu:2
   记忆:1950472Ki
   豆荚:110

再往下,通过系统信息,我得到以下内容:

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests    CPU Limits  Memory Requests Memory Limits
  ------------    ----------  --------------- -------------
  150m (7%)   1 (50%)     12Mi (0%)   128Mi (6%)
Events:       <none>

现在,为什么这个工作拒绝安排400Mi的请求,但在请求300Mi时工作正常?我添加或减去的任何内容都不能告诉我2GiB可访问内存(根据上面的“Allocatable”)会导致此作业无法安排。

我只有一个容器(busybox用于演示)。

命名空间没有资源配额。

重新启动apiserver似乎允许pod安排,但只有一段时间。

1 个答案:

答案 0 :(得分:0)

正确的答案是:

因为我使用的是旧版本的etcd

具体来说,升级到3.1.7或更高版本可以解决问题。