chinazjK零SK壹S
- 已编辑
namespace Terminating 问题
问题现象是运行下面命令卡住的情况,具体看https://github.com/kubernetes/kubernetes/issues/60807
kubectl delete ns XXXXX
网上绝大部分关于namespace Terminating的解决方式来自于github
但是这个方法有陷阱,通过删除finalize,确实可以删除namespace。但是这个也破坏了kubernetes的级联删除。导致该namespace的下属资源依旧存在。如果大量的使用这种删除方式,则会导致etcd数据量大等一系列问题。如下结果。
资源回收
kubernetes 的资源有三种删除方式,也叫kubernetes资源回收
直接删除。运行kubelet delete时,立刻删除资源,不管资源的下属资源
前台级联删除。运行kubelet delete时,先删除下属资源,最后删除本资源
后台级联删除。运行kubelet delete时,先删除本资源,然后删除下属资源
前台级联删除
当运行kubelet delete时,步骤如下
- kubernetes会给本资源打上两个标签:finalize、deletetimestamp。
- 删除下属资源,如果下属资源删除完成,就删除finalize标签
- 因为finalize标签没有,deletetimestamp标签有。所以删除本资源
当资源上有finalize标签时,就不能删除资源。
所以当你通过删除finalize来删除namespace就会出现问题。你的namespace下属资源没有删除干净。这将会导致两个问题:1. 无效的资源不断的集聚。2. 更深层次的原因不及时发现。几乎所有的Terminating都不是资源本身的问题。
目前已知的namespace Terminating 问题方向为两个,1. pod Terminating 2. webhook 的验证不通过