网站合同需要注意什么呢,深圳网站优化多少钱,windows优化大师功能,房地产网站开发公司电话不平衡问题排查
问题描述#xff1a; 1、业务部署大量pod(据反馈#xff0c;基本为任务型进程)过程中#xff0c;k8s node内存使用率表现不均衡#xff0c;范围从80%到百分之几#xff1b; 2、单个node内存使用率超过95%#xff0c;仍未发生pod驱逐#xff0c;存在node…不平衡问题排查
问题描述 1、业务部署大量pod(据反馈基本为任务型进程)过程中k8s node内存使用率表现不均衡范围从80%到百分之几 2、单个node内存使用率超过95%仍未发生pod驱逐存在node不可正常运维风险 期望效果 尽量保持pod调度平衡 node内存使用率达到一定阈值开始触发pod驱逐
分析过程
原理依据
K8S调度涉及到亲和性、资源可用情况等因素而本案例是可调度但是调度后造成节点内存使用率差距很大也即pod分布基于内存使用率不平衡 Kube-Scheduler作为控制面节点接触负责pod如何绑定到node的逻辑执行一般默认为default-scheduler,且支持插件化配置和开发 Kubelet作为K8S Node Agent实际执行着创建、销毁以及驱逐pod的逻辑其中驱逐分为软驱逐和硬驱逐参数名为
--evited-hardmemory.available100Mi
--evited-softmemory.available100Mi其中memory.available设置了触发驱逐的阈值也即大于等于此阈值则在当前node发生pod驱逐
案例分析
Pod分布不平衡按内存使用率
内存使用率范围0%85%监控如下图
驱逐
未明确设定驱逐参数如下图
改进方案
Pod分布不平衡按内存使用率
由第二章分析可知目前集群使用的调度器是default-scheduler,而该调度器不会直接监控节点的内存使用率,因此需要将节点的内存使用率加入调度逻辑一般是算分阶段进而影响最终排序考虑到改动时间成本等因素(可参考第五章使用第三方调度等单改动较大风险也大)可以指定scheduler启动配置文件如下
cat KubeSchedulerConfiguration.yamlapiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
profiles:- schedulerName: default-schedulerplugins:score:enabled:- name: PodTopologySpread- name: NodeResourcesFitpluginConfig:- args:scoringStrategy:resources:- name: cpuweight: 1- name: memoryweight: 10type: LeastAllocatedname: NodeResourcesFit- name: PodTopologySpreadargs:defaultingType: ListdefaultConstraints:- maxSkew: 1topologyKey: kubernetes.io/hostnamewhenUnsatisfiable: ScheduleAnywaymemoryWeight: 5 # 设置 memory 权重为 5表示内存使用更重要
参数形如 --config/path/to/ KubeSchedulerConfiguration.yaml 启动形如kube-scheduler --config/path/to/ KubeSchedulerConfiguration.yaml ...其他参数 效果
驱逐
前提需要安装集群monitor 根据分析过程分析可知kubelet未指定驱逐参数此时kubelet会以memory.available100Mi 运行而node节点的内存范围为[376G750G],默认驱逐值明显不适用因此建议设置合理值目前推荐如下 --evited-hardmemory.available40G --evited-softmemory.available50G或者按如下kubelet配置 效果如下
建议
此问题反映出资源分配和调度的问题涉及范围较为综合运维侧提供了较为稳定的iaas平台环境很多场景可以保证资源的使用率此时从资源充分使用角度落地方案当节点数固定时提出了资源使用平衡,则调度器需要较为实时感知到资源使用情况此案例为内存使用率以选择适合的节点进行绑定调度。
参考
案例参考https://segmentfault.com/a/1190000042005893 其他组件 Trimaran 官网地址https://github.com/kubernetes-sigs/scheduler-plugins/tree/master/pkg/trimaran descheduler 官网地址https://github.com/kubernetes-sigs/descheduler