Kubernetes Pod被驱逐原因详解
Kubernetes
小编为大家讲一讲KubernetesIT技巧方面的经验,接下来分享详细内容。
Kubernetes官方给出了下属Pod被驱逐的原因:
- 抢占驱逐 (Preemption and Eviction)[1]
- 节点压力驱逐 (Node-pressure)[2]
- 污点驱逐 (Taints)[3]
- 使用API发起驱逐 (API-initiated)[4]
- 排出Node上的Pod (drain)[5]
- 被 controller-manager 驱逐

抢占和优先级
抢占是指当节点资源不足以运行新添加的Pod时,kube-scheduler 会检查低优先级Pod而后驱逐掉这些Pod以将资源分配给优先级高的Pod。
这个过程称为 “抢占” 例如这个实例是 kube-proxy 被驱逐的场景
节点压力驱逐
节点压力驱逐是指,Pod所在节点的资源,如CPU, 内存, inode等,这些资源被分为可压缩资源CPU (compressible resources) 与不可压缩资源 (incompressible resources) 磁盘IO, 内存等,当不可压缩资源不足时,Pod会被驱逐。
对于此类问题的驱逐 是每个计算节点的 kubelet 通过捕获 cAdvisor 指标来监控节点的资源使用情况。
被 controller-manager 驱逐
kube-controller-manager会定期检查节点的状态,如节点处于NotReady超过一定时间,或Pod部署长时间失败,这些Pod由控制平面controller-manager创建新的Pod已替换存在问题的Pod
通过API发起驱逐
Kubernetes为用户提供了驱逐的API,用户可以通过调用API来实现自定义的驱逐。
对于 1.22 以上版本,可以通过API policy/v1 进行驱逐
curl -v \
-H 'Content-type: application/json' \
https://your-cluster-api-endpoint.example/api/v1/namespaces/default/pods/quux/eviction -d '\
{
"apiVersion": "policy/v1",
"kind": "Eviction",
"metadata": {
"name": "quux",
"namespace": "default"
}
}'
例如,要驱逐Pod netbox-85865d5556-hfg6v,可以通过下述命令
# 1.22+
$ curl -v 'https://10.0.0.4:6443/api/v1/namespaces/default/pods/netbox-85865d5556-hfg6v/eviction' \
--header 'Content-Type: application/json' \
--cert /etc/kubernetes/pki/apiserver-kubelet-client.crt \
--key /etc/kubernetes/pki/apiserver-kubelet-client.key \
--cacert /etc/kubernetes/pki/ca.crt \
-d '{
"apiVersion": "policy/v1",
"kind": "Eviction",
"metadata": {
"name": "netbox-85865d5556-hfg6v",
"namespace": "default"
}
}'
# 1.22-
curl -v 'https://10.0.0.4:6443/api/v1/namespaces/default/pods/netbox-85865d5556-hfg6v/eviction' \
--header 'Content-Type: application/json' \
--cert /etc/kubernetes/pki/apiserver-kubelet-client.crt \
--key /etc/kubernetes/pki/apiserver-kubelet-client.key \
--cacert /etc/kubernetes/pki/ca.crt \
-d '{
"apiVersion": "policy/v1beta1",
"kind": "Eviction",
"metadata": {
"name": "netbox-85865d5556-hfg6v",
"namespace": "default"
}
}'
相关阅读
-
什么是K8s Kubernetes是什么
小编为大家说一说什么是K8s的相关介绍,具体详情如下: Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。 该项目托管在 CNCF。 Kubernetes 提供了部署容器
-
Git基础入门教程:从零开始掌握版本控制
你是不是想知道Git基础入门教程方面的介绍,一起来了解了解吧。 Git是一个分布式版本控制系统,它在软件开发中被广泛应用,用于跟踪和管理代码的版本更改。 无论你是开发人员,还是想学
-
简单网页制作模板代码 web网页制作代码了解
IT袋网为大家说一说简单网页制作模板代码和web网页制作代码了解方面的讲解,一起来了解了解吧。 想要制作一个网站,但不能编写代码吗?还是你找不到网页模板代码?在这种情况下,你会
-
InnoDB的一次更新事务是怎么实现的?
跟大家聊一聊InnoDB的一次更新事务是怎么实现的方面的介绍,相关内容具体如下: InnoDB的一次更新事务涉及到多个组件和步骤,包括Buffer Pool、BinLog、UndoLog、RedoLog以及物理磁盘。 下面是一次


