整体认识K8s之PriorityClass优先级调度/HPA自动扩缩容机制
调度机制priority class
k8s中的调度机制priority class,它不是一个独立的pod或者资源对象,而是一个用于给pod分配优先级分数的k8s对象,它允许管理员定义不同重要性的pod的类别。当k8s发现有多个pod在等待调度,这时候他会优先选择优先级最高的pod进行调度;当一个高优先级的pod无法调度,会选择低优先级的一个或多个pod驱逐,这是抢占。被选中的低优先级的pod不会被立刻杀死,而是会受到一个SIGTERM信号,有一段优雅终止的时间来完成清理工作。虽然抢占功能强大,但是需要谨慎使用,不当的配置可能会导致低优先级的应用频繁被中断,造成服务抖动。通常建议只为少数真正关键的系统组件分配高优先级。
HPA自动扩缩容机制
HPA的本质是一个经典的闭环控制系统,三个组件完美的构成了这个循环,一是metric server,它是指标的来源,它负责收集所有的pod的CPU和内存使用率。当然,除了CPU和内存,HPV还可以从更多的来源来获取其他指标,这里我们不介绍;第二是HPA controller是HPA的大脑,它内置于kube-controller-manager中定期查询指标,向metric API发起请求,获取当前的指标,然后计算所有pod的指标的平均使用率,将平均使用率与在HPA清单中设定的目标值进行比较,然后做出决策,决定是扩容缩容还是保持不变;HPA控制器只是去修改目标deployment或者statefulset中的.spec.replicas字段,deployment controller等控制器会监听状态,一旦他发现yaml文件被HPA更新了,他就会去完成真正的扩缩容的工作