KubernetesPod被驱逐原因详解

KubernetesPod被驱逐原因详解。小编来告诉你更多相关信息。Kubernetes小编为大家讲一讲KubernetesIT技巧方面的经验,接下来分享详细内容。Kubernetes官方给出了下属Po...

KubernetesPod被驱逐原因详解。小编来告诉你更多相关信息。

Kubernetes

小编为大家讲一讲KubernetesIT技巧方面的经验,接下来分享详细内容。

Kubernetes官方给出了下属Pod被驱逐的原因:

  • 抢占驱逐 (Preemption and Eviction)[1]
  • 节点压力驱逐 (Node-pressure)[2]
  • 污点驱逐 (Taints)[3]
  • 使用API发起驱逐 (API-initiated)[4]
  • 排出Node上的Pod (drain)[5]
  • 被 controller-manager 驱逐

KubernetesPod被驱逐原因详解-图1

抢占和优先级

抢占是指当节点资源不足以运行新添加的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\"    }}\'

KubernetesPod被驱逐原因详解。小编来告诉你更多相关信息。

Kubernetes

可以看到结果,旧Pod被驱逐,而新Pod被创建,在这里实验环境节点较少,所以体现为没有更换节点

$ kubectl get pods -o wideNAME                      READY   STATUS        RESTARTS   AGE    IP              NODE             NOMINATED NODE   READINESS GATESnetbox-85865d5556-hfg6v   1/1     Terminating   0          101d   192.168.1.213   master-machine              netbox-85865d5556-vlgr4   1/1     Running       0          101d   192.168.0.4     node01                      netbox-85865d5556-z6vqx   1/1     Running       0          11s    192.168.1.220   master-machine              

通过API驱逐返回状态

  • 200 OK|201 Success:允许驱逐,Eviction 类似于向Pod URL发送 DELETE 请求
  • 429 Too Many Requests:由于API限速可能会看到该相应,另外也为配置原因,不允许驱逐 poddisruptionbudget (PDB是一种保护机制,将总是确保一定数量或百分比的Pod 被自愿驱逐)
  • 500 Internal Server Error:不允许驱逐,存在错误配置,如多个PDB引用一个 Pod

排出Node上的Pod

drain是kubernetes 1.5+之后提供给用户维护命令,通过这个命令 (kubectl drain ) 可以驱逐该节点上运行的所有Pod,已用来对节点主机进行操作(如内核升级,重启)

Notes:kubectl drain 一次只能接一个nodename [6]

污点驱逐

污点通常与容忍度同时使用,拥有污点的node,Pod将不会被调度至该节点,而容忍度将允许一定的污点来调度 pod。

在Kubernetes 1.18+后,允许基于污点的驱逐机制,即kubelet在某些情况下会自动添加节点从而进行驱逐:

Kubernetes内置了一些污点,此时 Controller 会自动污染节点:

  • node.kubernetes.io/not-ready: Node故障。对应 NodeCondition 的Ready = False。
  • node.kubernetes.io/unreachable:Node控制器无法访问节点。对应 NodeCondition Ready= Unknown。
  • node.kubernetes.io/memory-pressure:Node内存压力。
  • node.kubernetes.io/disk-pressure:Node磁盘压力。
  • node.kubernetes.io/pid-pressure:Node有PID压力。
  • node.kubernetes.io/network-unavailable:Node网络不可用。
  • node.kubernetes.io/unschedulable:Node不可调度。

以上就是Kubernetes 跟 Pod被驱逐原因详解的具体内容,供大家参考操作。

阅读前请先查看【免责声明】本文内容由互联网用户自发贡献,该文观点仅代表作者本人,本站仅供展示。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 1217266901@qq.com 举报,一经查实,本站将立刻删除。 转载请注明出处:https://www.jingfakeji.com/tech/34439.html

上一篇 2023年11月05日 12:59
下一篇 2023年11月05日 13:01

相关推荐

  • 简述dubbo的分层设计

    简述dubbo的分层设计。小编来告诉你更多相关信息。简述dubbo的分层设计跟大家说一说简述dubbo的分层设计的相关经验,请看下面详细的介绍。Service,业务层,就是咱们开发的业务...

    2024年02月06日
    22
  • Redis事务实现原理(深入解析Redis事务的实现机制)

    深入解析Redis事务的实现机制,Redis事务实现原理。小编来告诉你更多相关信息。Redis事务实现原理关于这方面的知识你知道吗?Redis事务实现原理方面的内容,下面为您详细介绍事务开始MULTI命令的执行,标识着...

    2024年02月06日
    20
  • Vue.js入门指南从安装到创建第一个应用程序

    Vue.js入门指南从安装到创建第一个应用程序。小编来告诉你更多相关信息。Vue.js入门指南从安装到创建第一个应用程序为网友们详解Vue.js入门指南从安装到创建第一个应用程序方面的内容,一起跟随小编看看吧...

    2024年02月06日
    32
  • dubbo的工作流程

    dubbo的工作流程。小编来告诉你更多相关信息。dubbo的工作流程本文导读:dubbo的工作流程的教程内容,一起跟随小编看看吧!Start:启动Spring容器时,自动启动Dubb...

    2024年02月05日
    20
  • Dubbo支持的注册中心有哪些?

    Dubbo支持的注册中心有哪些?。小编来告诉你更多相关信息。Dubbo支持的注册中心有哪些今日重点为您介绍Dubbo支持的注册中心有哪些方面的知识,下面来一起了解一下吧。Zookeeper(官方...

    2024年02月05日
    29
  • 为什么netflix从大单体演进到联合网关了

    为什么netflix从大单体演进到联合网关了。小编来告诉你更多相关信息。为什么netflix从大单体演进到联合网关了小编为大家解答为什么netflix从大单体演进到联合网关了的电脑方面的小经验,接下来一起来...

    2024年02月05日
    26

联系我们

在线咨询: QQ交谈

邮箱:1217266901@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信