误删后如何将Terminating状态的Kubernetes命名空间恢复至Active?
撤销处于Terminating状态的Kubernetes命名空间删除操作
可以撤销删除操作,恢复命名空间并保留其中所有对象。直接创建同名命名空间会失败,因为原命名空间的元数据仍存在于etcd集群中,正确的做法是通过修改命名空间的Finalizers字段终止删除流程:
导出目标命名空间的当前配置到临时文件:
kubectl get namespace <你的命名空间名称> -o yaml > ns.yaml移除命名空间的Finalizers约束(二选一即可):
- 编辑刚才导出的
ns.yaml文件,找到metadata.finalizers字段,将其值改为空数组[],保存后执行:kubectl replace --raw "/api/v1/namespaces/<你的命名空间名称>/finalize" -f ./ns.yaml - 直接用patch命令修改(更快捷):
kubectl patch namespace <你的命名空间名称> -p '{"metadata":{"finalizers":[]}}' --type=merge
- 编辑刚才导出的
执行完成后等待10-30秒,命名空间会从Terminating状态恢复为Active状态,其中的所有对象都会完整保留。
原理是:Kubernetes通过Finalizers字段控制命名空间的删除流程,移除该字段后,集群会认为删除前的清理操作已完成,从而终止删除流程,恢复命名空间的正常状态。
内容的提问来源于stack exchange,提问作者Rustam Almukhametov
相关产品推荐
相关产品推荐

