request
容器使用的最小资源需求, 作为容器调度时资源分配的判断依赖。
只有当前节点上可分配的资源量 >= request 时才允许将容器调度到该节点。
request参数不限制容器的最大可使用资源。
假如:节点上的可用内存只有 2 G,而我们在启动 pod 的时候设置的 request 为 2050 MB,这显然超过了当前节点上可分配的资源量,这样的情况下启动 pod 会出现什么情况呢?
如下:这里我们通过 webui 创建了一个 deployment,副本数为 2,request 为 2050 MB:
修改之后更新,然后查看 pod 的启动情况:
[root@zabbix_server /root]# kubectl describe pod nginxapp-7ccf547d86-dmgg9 -n dev
Name: nginxapp-7ccf547d86-dmgg9
Namespace: dev
Priority: 0
Node: <none>
Labels: k8s-app=nginxapp
pod-template-hash=7ccf547d86
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/nginxapp-7ccf547d86
Containers:
nginxapp:
Image: nginx
Port: <none>
Host Port: <none>
Requests:
cpu: 1
memory: 2050Mi
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-jcrln (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
kube-api-access-jcrln:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 34d default-scheduler 0/3 nodes are available: 2 Insufficient cpu, 3 Insufficient memory.
Warning FailedScheduling 34d (x1 over 34d) default-scheduler 0/3 nodes are available: 2 Insufficient cpu, 3 Insufficient memory.
## 可以看到 evsents 提示,三个节点都是不可用的,cpu 不足、内存不足。
limit
容器能使用资源的最大值
设置为0表示对使用的资源不做限制, 可无限的使用
request 和 limit 关系
request能保证pod有足够的资源来运行, 而limit则是防止某个pod无限制的使用资源, 导致其他pod崩溃. 两者的关系必须满足:
0 <= request <= limit
如果limit=0表示不对资源进行限制, 这时可以小于request。