K8S delete node 运维的示例分析

K8S delete node 运维的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

kubelet v1.16 源码

K8S delete node 运维的示例分析

delete node 流程剖析

目前版本的k8s node 由controller-manager 中的NodeLifecycleController控制,

该版本,不会默认开启TaintBasedEvictions feature, 去对not ready的node进行 NoExecute 污点和容忍的处理。可通过以下命令确认。 grep -r "Controller is using taint based evictions." kube-controller-manager.INFO

而NodeLifecycleController 对node的Delete 事件,并没有相应的handler进行处理。而是通过ZonePodEvictor 的map结构体去记录哪些超时的节点上的pod需要被主动删除。

--node-monitor-grace-period duration Default: 40s
// workers that evicts pods from unresponsive nodes.
zonePodEvictor map[string]*scheduler.RateLimitedTimedQueue

controller会起一个goroutine 每隔NodeEvictionPeriod 时间间隔100ms, doEvictionPass的操作对每个ZonePodEvictor队列 中存储的node节点上的pod进行删除。

doEvictionPass()
  -> nodeutil.DeletePods()
    -> kubeClient.CoreV1().Pods(pod.Namespace).Delete(pod.Name, nil)

node controller 通过monitorNodeStatus goroutine进行node状态监控。

通过把本地informer的node数据 和etcd中的比较,把node节点分为几类(added, deleted,newZoneRepresentatives),观测到node存在added,deleted列表,但获取zone状态为空时,加入newZoneRepresentatives列表,确认后会把node加入ZonePodEvictor队列 。

kubectl delete node 是一个危险的操作,执行后触发节点上所有pod的evict驱逐。请一定谨慎。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对亿速云的支持。