我正在尝试使用资源限制来定义作业,这是一个基本的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安排,但只有一段时间。
答案 0 :(得分:0)
正确的答案是:
因为我使用的是旧版本的etcd
具体来说,升级到3.1.7或更高版本可以解决问题。