k8s之调度、抢占和驱逐

        在Kubernetes(K8s)中,抢占、调度和驱逐是管理Pod在集群中分布和资源分配的重要机制。下面将详细介绍这三种机制。

1. 抢占(Preemption)

定义
        抢占是指在Kubernetes集群中,当高优先级的Pod因资源不足而无法调度时,调度器(kube-scheduler)会主动终止(驱逐)一些低优先级的Pods,以便为高优先级的Pod腾出空间进行调度的过程。

工作流程

  • 当一个高优先级的Pod创建后,kube-scheduler尝试将其调度到集群中的某个节点上。
  • 如果集群中没有足够的资源来满足这个高优先级Pod的需求,kube-scheduler会检查集群中已存在的Pods,并评估它们的优先级。
  • 如果找到低优先级的Pods,且它们的终止能够释放足够的资源来调度高优先级的Pod,kube-scheduler会发起抢占操作,即终止这些低优先级的Pods。
  • 一旦低优先级的Pods被终止,高优先级的Pod就可以被调度到相应的节点上。

注意

  • 抢占功能需要启用,并且Pod需要配置优先级(通过priorityClassName指定)。
  • 被抢占的Pods会进入Pending状态,等待集群中有足够的资源时重新调度。

2. 调度(Scheduling)

定义
        调度是指将未调度的Pods自动分配到集群中的节点的过程。这是Kubernetes集群管理的一个核心功能,确保Pods能够在集群中合理分布,以最大化资源利用率和保证应用的高可用性。

工作流程

  • 用户通过Kubernetes API创建Pod对象,并在其中指定Pod的资源需求、容器镜像等信息。
  • kube-scheduler监视集群中的未调度Pod对象。
  • 对于每个未调度的Pod,kube-scheduler会评估集群中所有节点的资源使用情况、Pod的资源需求、亲和性和反亲和性等因素。
  • 通过一系列算法(如过滤和打分),kube-scheduler选择一个最优的节点来运行Pod。
  • kube-scheduler将Pod和节点之间的绑定信息保存在etcd数据库中。
  • 节点定期检查etcd数据库中的Pod调度信息,并启动相应的Pod。

调度算法

  • 过滤阶段:排除不满足Pod调度需求的节点。
  • 打分阶段:对剩余的节点进行打分,选择得分最高的节点。

3. 驱逐(Eviction)

定义
        驱逐是指在Kubernetes集群中,由于某些原因(如节点资源不足、节点故障等),将Pods从节点上删除或标记为不可用的过程。驱逐可以是由kubelet、kube-controller-manager或kube-scheduler发起的。

工作流程(以kubelet发起的驱逐为例)

  • kubelet周期性检查自身节点的资源压力(如CPU、内存、磁盘等)。
  • 当节点资源压力达到一定的阈值时,kubelet会根据配置的驱逐策略决定是否驱逐Pods。
  • 如果决定驱逐Pods,kubelet会选择一个或多个Pods进行驱逐。
  • 被驱逐的Pods会进入Failed状态,并触发上层控制器(如ReplicaSet)重新创建新的Pods。

其他类型的驱逐

  • kube-controller-manager发起的驱逐:当节点出现故障或不可用时,NodeLifecycleController会触发驱逐操作。
  • kube-scheduler发起的驱逐:在抢占过程中,为了调度高优先级的Pods而驱逐低优先级的Pods。

        总结来说,抢占、调度和驱逐是Kubernetes集群中管理Pod和资源分配的重要机制。它们共同协作,确保Pods能够在集群中合理分布,以最大化资源利用率和保证应用的高可用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值