深入理解K8S(七)
深入理解K8S(七)
·
容器和系统资源配置
CPU资源
CPU资源申请包含:cpu.request、cpu.limit
1CPU Core = 1000Millicore
调度Pod到Node上如何计算CPU:
如果:CPU Request(当前Pod)+ Pod CPU Request总和(当前Node)<= CPU可分配资源(当前Node),则Pod可以被调度到改Node上,否则该Node被过滤
kubectl describe node可显示当前节点的CPU和内存使用率
kubelet读取Pod的cpu.request和cpu.limit,为pod的CPU CGroup进行资源配置
CPU的CGroup的相关参数设置
可以通过:/sys/fs/cgroup/cpu/cpu.shares和/sys/fs/cgroup/cpu/cpu.cfs_quota_us来获取当前容器的CGroup的CPU信息
当节点资源紧张时:
Pod中有多个init容器:
- kube-scheduler调度时,只计算cpu.request最多的init容器,不是计算init容器总和
- 顺序执行完init容器后,业务容器进入Running状态;在计算该节点被占用的资源时,init容器的资源依然会被纳入计算,因为init容器在有些场景下可能会被再次执行
- Pod中定义了nodeName直接指定了目标节点,就无需通过kube-scheduler调度了;kubelet在启动该Pod之前会计算该节点的空闲CPU,如果资源不被满足,则将Pod标记为OutOfCPU
CGroup层级树结构组织(CGroup驱动基于systemd):
内存资源
Pod spec通过定义requests.memory和limits.memory的值来为Pod申请内存,调度时会判断该节点的内存容量是否满足当前Pod的request.memory
调度完成后,kubelet会将容器申请的内存资源设置到该容器对应的memory CGroup中
更多推荐
已为社区贡献5条内容
所有评论(0)