节点资源预留情况
背景知识
在kubernetes中可以通过给kubelet配置参数预留资源给系统进程和kubernetes进程保证它们稳定运行。目前能实现到cpu、memory、ephemeral-storage层面的资源预留。
cpu:配置cpu shares实际上对应的是cpu的优先级,简单来说,这个在cpu繁忙时,它能有更高优先级获取更多cpu资源。
ephemeral-storage:kubernetes1.8开始引入的一个资源限制的对象,kubernetes 1.10版本中kubelet默认已经打开的了,到目前1.11还是beta阶段,主要是用于对本地临时存储使用空间大小的限制,如对pod的empty dir、/var/lib/kubelet、日志、容器可读写层的使用大小的限制。
配置
- Node capacity:节点总共的资源
- kube-reserved:给kubernetes进程预留的资源
- system-reserved:给操作系统预留的资源
- eviction-threshold:kubelet eviction的阈值
- allocatable:留给pod使用的资源
node_allocatable=Node_capacity-(kube-reserved+system-reserved+hard-eviction)
eviction-threshold
分两类:
- kube-control-manager周期性的接收kubelet发送过来的心跳,检查所有节点的状态,当节点属于no ready时,驱逐重建上面的pod(默认超时5分钟)。
- kubelet周期性的检查host上的资源,与配置项里面的配置进行比对,达到阈值后,按照优先级驱逐pod。
eviction-threshold实际上是对pod limit_resource的补充,因为limit_resource只能针对单个pod做资源限制,当这个pod达到限制的阈值后,kubelet便会oom_killer掉这个container,而eviction-threshold根据事先设定的Eviction Thresholds来触发Eviction,调用算法筛选出合适的几个pod,kill掉一个或多个pod回收资源,被eviction掉的pod会被kube-scheduler在其他节点重新调度起来。
eviction-threshold分两种类型
Soft Eviction Thresholds:达到触发值后,并不是马上去驱逐pod,而是等待一个缓冲时间,这个配置参考
https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/
Hard Eviction Thresholds:达到触发值后,直接筛选出对应的pod kill掉
两种配置方式
- 绝对值:memory.available<5Gi
- 百分比:memory.available<5%
修改完配置后需要重启kubelet
systemctl restart kubelet
k8s-node1 (stable)
Capacity:
cpu: 8
ephemeral-storage: 41151808Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16431804Ki
Allocatable:
cpu: 7200m
ephemeral-storage: 30666048Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 11823804Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=800m,memory=1500Mi --eviction-hard=memory.available<3000Mi,nodefs.available<10Gi 系统保留CPU资源800m,内存资源1500Mi
节点内存小于3000Mi,或者磁盘可用空间少于10Gi,立即触发Pod驱除机制
k8s-node5 (stable)
Capacity:
cpu: 8
ephemeral-storage: 515928504Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16431788Ki
Allocatable:
cpu: 7500m
ephemeral-storage: 421556664Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 14334636Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=500m,memory=1024Mi --eviction-hard=memory.available<1024Mi,nodefs.available<90Gi系统保留CPU资源500m,内存资源1024Mi
节点内存小于1024Mi,或者磁盘可用空间少于90Gi,立即触发Pod驱除机制
k8s-node-extend0 (stable)
Capacity:
cpu: 4
ephemeral-storage: 82437788Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8174704Ki
Allocatable:
cpu: 3600m
ephemeral-storage: 75974665296
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7548016Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=200m,memory=256Mi --kube-reserved=cpu=200m,memory=256Mi系统保留CPU资源200m,内存资源256Mi
k8s保留CPU资源200m,内存资源256Mi
外部服务(未部署到ks8)
- drone
k8s-node2 (computing)
Capacity:
cpu: 4
ephemeral-storage: 41151808Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8174812Ki
Allocatable:
cpu: 2
ephemeral-storage: 34860352Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 5553372Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=1500m,memory=1024Mi --kube-reserved=cpu=500m,memory=512Mi --eviction-hard=memory.available<1Gi,nodefs.available<6Gi,imagefs.available<1Gi --eviction-minimum-reclaim="memory.available=0.6Gi,nodefs.available=5Gi,imagefs.available=1Gi"系统保留CPU资源1500m,内存资源1024Mi
k8s保留CPU资源500m,内存资源512Mi
节点内存小于1Gi,磁盘可用空间少于6Gi,容器镜像可用磁盘空间少于1Gi,立即触发Pod驱除机制
每次pod驱除至少回收资源:内存不小于0.6Gi,磁盘不小于5Gi,容器镜像不小于1Gi
外部服务(未部署到ks8)
- nginx
k8s-node3 (computing)
Capacity:
cpu: 12
ephemeral-storage: 103080204Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 24688684Ki
Allocatable:
cpu: 9
ephemeral-storage: 82108684Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 19445804Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=3000m,memory=3Gi --eviction-hard=memory.available<2Gi,nodefs.available<20Gi系统保留CPU资源3000m,内存资源3Gi
节点内存小于2Gi,磁盘可用空间少于20Gi,立即触发Pod驱除机制
外部服务(未部署到ks8)
- rabbitmq
k8s-node4 (computing)
Capacity:
cpu: 8
ephemeral-storage: 302250Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16431788Ki
Allocatable:
cpu: 6500m
ephemeral-storage: 302250Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 12235436Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=1500m,memory=2048Mi --eviction-hard=memory.available<2050Mi系统保留CPU资源1500m,内存资源2048Mi
节点内存小于2050Mi,立即触发Pod驱除机制
k8s-node9 (computing)
Capacity:
cpu: 8
ephemeral-storage: 302250Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 16431788Ki
Allocatable:
cpu: 6
ephemeral-storage: 301226Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 12237484Ki/etc/default/kubelet
KUBELET_EXTRA_ARGS=--system-reserved=cpu=1000m,memory=2048Mi --kube-reserved=cpu=1000m,memory=1024Mi --eviction-hard=memory.available<1024Mi,nodefs.available<1Gi,imagefs.available<1Gi系统保留CPU资源1000m,内存资源2048Mi
k8s保留CPU资源1000m,内存资源1024Mi
节点内存小于1024Mi,磁盘可用空间少于1Gi,容器镜像可用磁盘空间小于1Gi,立即触发Pod驱除机制