k8s怎么驱逐node上pod(k8s nodeport)
原标题:k8s怎么驱逐node上pod(k8s nodeport)
导读:
K8s污点容忍度横向主节点污点是K8s高级调度的特性,用于限制哪些Pod可以被调度到某一个节点。在普通节点横向时我们可以使用污点容忍度创建恶意pod来对主节点进行横向控制。k...
K8S污点容忍度横向主节点
污点是K8s高级调度的特性,用于限制哪些Pod可以被调度到某一个节点。在普通节点横向时我们可以使用污点容忍度创建恶意POD来对主节点进行横向控制。kube-scheduler 是 kubernetes 集群的默认调度器,并且是集群控制面(master)的一部分。
管理节点污点与pod的容忍度是Kubernetes系统中的关键操作。通过调整节点的污点配置与Pod的容忍度设置,能够实现节点资源的高效分配与Pod的灵活调度。操作中,需注意污点与容忍度的匹配关系,确保系统运行的稳定与高效。
容错能力 高可用:K8s高可用集群通常配置有多个主节点(Master节点),并具备在主节点故障时进行自动故障转移的能力。这种设置确保了即使一个或多个主节点出现问题,其他主节点也能接管管理任务,从而保持集群的正常运行。非高可用:非高可用K8s集群可能只有一个主节点,缺乏相应的故障恢复和容错机制。
原因:调度器可能由于某些原因无法找到合适的节点来部署Pod。解决方法:检查Pod的YAML配置文件中的亲和性/反亲和性规则以及污点/容忍度设置,确保它们与集群中的节点相匹配。镜像拉取问题:原因:如果Pod的镜像无法从指定的镜像仓库中拉取,Pod将无法启动,并处于Pending状态。
主节点(Master)主节点是k8s集群的控制中心,包含以下关键组件:APIserver 功能:作为集群的统一入口,apiserver负责处理所有对象资源的增删改查和监听操作。这些操作通过RESTFUL API接口提供,并最终提交给etcd存储。作用:apiserver是集群中各组件的协调者,确保集群状态的一致性和准确性。
k8s架构包括主节点和工作节点。主节点作为控制面板,包含API服务器、调度器、控制器和ETCd等组件,负责集群的管理和控制。工作节点运行容器,通过kubelet和kubeproxy组件与主节点通信,实现容器的管理和网络调度。Pod:Pod是k8s的基本调度单位,包含一组相关容器,运行在同一个工作节点上。
一次意想不到的pod内存驱逐问题
答案:此次Pod驱逐问题的原因是K8S集群中的kubelet服务未正确识别到节点内存扩容后的新配额,导致在内存使用达到原配额上限时触发了Pod驱逐。详细分析:案发现场:客户反馈门户网站无法打开,多个Pod状态为Evicted(驱逐)。
以下是三个大厂K8s集群故障案例:案例一:电商平台促销活动Pod驱逐故障问题现象:促销活动期间,超30%的Pod进入Evicted状态,多个Worker节点内存使用率超95%,用户支付失败率从0.1%升至15%。根因分析:节点内存不足触发kubelet主动驱逐机制,recommEndation - Service的Pod内存占用异常高且未设置内存限制。
在Linux系统层面,内存不足导致进程被kill的现象较为常见。通过命令`dMESg | tail -N`,您可以查看近N行系统日志,寻找被kill的进程信息。
KuberneTES OOM(内存不足)问题 Pod 中的每个容器都需要内存才能运行。当容器使用的内存超过其限制时,linux 内核的 OOM Killer 会终止该进程以回收内存。OOM 的触发条件:容器使用的内存超过其设置的 limits。节点上的内存资源不足,导致 Kubernetes 需要驱逐一些 Pod 以释放内存。
...容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
在面临Docker容器被频繁kill掉,以及k8s中该节点pod被驱赶的情况时,要找出问题的根源,关键在于深入分析容器的运行状态、内存使用情况以及系统资源的分配状况。以下为解决此类问题时,可以采取的步骤与工具,帮助您更直观地找出问题所在。首先,要从容器输出和状态详情入手。
POD启动异常、部分节点无法启动pod 原因及解决办法:资源过剩:大量POD在同一个物理节点上运行,可能导致资源占用过多,进而使物理节点宕机。此时,需要合理分配资源,避免单个节点负载过高。内存和CPU超标:Pod中的应用出现内存泄露等问题,导致内存迅速增加,可能被系统kill,影响节点正常提供服务。
配置错误Pod描述文件错误:检查YAML文件中镜像名称、端口映射、环境变量等配置是否正确。例如,镜像名称拼写错误或版本号不匹配会导致拉取失败。资源限制配置不当:若为容器设置的内存或cpu限制过低,集群资源紧张时可能因资源不足无法启动。需调整resources.limits字段至合理值。
容器状态:waiting:容器正在等待其它条件满足,如等待Pod调度完成或等待KuberNETes事件处理。Running:容器正在运行,执行其任务。Terminated:容器已经运行完成并被终止,可能是正常结束或异常退出。Unknown:容器状态无法确定,可能是因为与容器所在节点的通信问题。

检查宿主节点行为:确认资源限制:检查Pod是否有适当的资源限制设置,避免未设置资源限制导致Pod无限制地使用内存。查看宿主机日志:分析宿主机日志,确认是否由Cgroup限制触发的OOMKilLED。可以使用如dmesg或journalctl等工具查看相关日志。
聊聊kube-scheduler如何完成调度和调整调度权重
1、首先,当用户通过API或kubectl创建Pod时,kube-apiserver将请求信息存储于etcd中。Kube-scheduler通过watch机制监听apiserver,获取待调度的Pod列表。接着,Kube-scheduler逐个尝试为每个Pod分配node。
2、actions:定义了调度流程,实现了主要的调度动作。在actions中,使用逗号作为分隔符配置各需要执行的action。action的配置顺序就是scheduler的执行顺序。tiers:配置了注册到scheduler中的plugin列表。plugin中实现的算法将被action调用。tiers将plugin分为几类,并在session打开时进行注册,在执行action时调用。
3、调度器(kube-scheduler)的任务是将未调度的 Pod 分配到合适的节点。它通过监测机制发现新创建但未调度的 Pod,然后基于一系列规则进行选择。调度流程包括过滤和打分两个步骤。过滤阶段,调度器筛选出满足条件的节点;打分阶段,对筛选出的节点进行评分,最终选择得分最高的节点部署 Pod。
4、在Kubernetes 项目中,默认调度器(default scheduler)的主要职责,就是为一个新创建出来的 Pod,寻找一个最合适的节点(Node)。 而这里“最合适”的含义,包括三层: 所以在具体的调度流程中,默认调度器会首先调用一组叫作 Predicate 的调度算法,来检查每个 Node。
5、kube-controller-manager:后台任务执行器,管理节点状态、Pod数量等。kube-scheduler:资源分配器,基于资源请求、亲和性等策略调度Pod。etcd:分布式键值存储,保存集群状态(需独立部署)。数据平面(Data Plane)kubelet:节点代理,执行Pod生命周期管理(如启动容器、挂载卷)。
5分钟搞懂K8S的污点和容忍度(理论+实战)
1、管理节点污点与Pod的容忍度是Kubernetes系统中的关键操作。通过调整节点的污点配置与Pod的容忍度设置,能够实现节点资源的高效分配与Pod的灵活调度。操作中,需注意污点与容忍度的匹配关系,确保系统运行的稳定与高效。
2、而污点容忍的作用举个例子,如果像上面污点一样设置了 NoSchedule 污点的节点,那么创建pod的时候是必不被调度到的,但是如果我使用污点容忍,那这个节点可以在设置 NoSchedule 污点的情况下可能又被调度,类似于亲和性那种作用。
3、Pod 的生命周期经历多个阶段,正常情况下,从 Pending 到 Running 只需几秒。然而,当遇到问题时,Pod 会停滞,直到问题得到解决。例如,当没有足够的节点资源,节点不可调度,或者由于污点和容忍度限制时,Pod 将保持 Pending 状态。调度问题是最常见的原因。
4、年大厂实战场景面试题精析(附真题拆解)场景题1:高并发秒杀中的超卖与数据一致性挑战题目:“现有电商秒杀活动,预估峰值QPS 50K+。当前方案:redis缓存库存,预扣减成功后异步写MQ通知下游扣减数据库库存。线上发现存在超卖(实际库存不足但下单成功)且偶发用户支付成功但库存未扣。



