我有一个“卡住”的名称空间,我删除显示在这个永恒的“终止”状态。
当前回答
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
这对我来说很有效,命名空间消失了。
详细的解释可以在https://github.com/rook/rook/blob/master/Documentation/ceph-teardown.md链接中找到。
这发生在我中断kubernetes安装(Armory Minnaker)时。然后我继续删除名称空间并重新安装它。由于终结器的原因,我被困在豆荚的终止状态中。我把命名空间放到了tmp中。Json,从tmp删除终结器。Json文件,并执行curl命令。 解决这个问题后,我使用脚本卸载集群以消除残留,并重新安装。
其他回答
我写了一个简单的脚本,删除您卡住的名称空间基于@Shreyangi Saxena的解决方案。
cat > delete_stuck_ns.sh << "EOF"
#!/usr/bin/env bash
function delete_namespace () {
echo "Deleting namespace $1"
kubectl get namespace $1 -o json > tmp.json
sed -i 's/"kubernetes"//g' tmp.json
kubectl replace --raw "/api/v1/namespaces/$1/finalize" -f ./tmp.json
rm ./tmp.json
}
TERMINATING_NS=$(kubectl get ns | awk '$2=="Terminating" {print $1}')
for ns in $TERMINATING_NS
do
delete_namespace $ns
done
EOF
chmod +x delete_stuck_ns.sh
该脚本可以检测到所有处于终止状态的命名空间,并将其删除。
PS:
这可能在MacOS中不起作用,因为MacOS中的本机sed与GNU sed不兼容。 你可能需要在MacOS中安装GNU sed,请参考这个答案。 请确认您可以通过命令kubectl访问您的kubernetes集群。 已在kubernetes v1.15.3版本上测试
更新
我找到了一个更简单的解决办法:
kubectl patch RESOURCE NAME -p '{"metadata":{"finalizers":[]}}' --type=merge
在我的案例中,问题是由自定义指标引起的。
要了解导致问题的原因,只需运行以下命令:
kubectl api-resources | grep -i false
这将告诉您是哪些api资源导致了问题。一旦识别出来,就删除它:
kubectl delete apiservice v1beta1.custom.metrics.k8s.io
一旦删除,命名空间就会消失。
单行命令
kubectl patch ns <Namespace_to_delete> -p '{"metadata":{"finalizers":null}}'
简单的技巧
你只能在控制台编辑命名空间kubectl编辑<命名空间名称>删除/删除“Kubernetes”从终结器部分(应该像“finalizers”:[])并按enter或保存/应用更改。
你也可以一步完成。
诀窍:1
Kubectl获取命名空间烦扰-命名空间-删除-o json > tmp.json 然后编辑tmp。从终结器中删除“kubernetes 打开另一个终端运行命令kubectl代理,在Curl下面运行
curl -k -H "Content-Type: application/json" -X PUT——data-二进制 @tmp。json https://localhost:8001/api/v1/namespaces/<NAMESPACE NAME TO DELETE>/finalize . json
它应该删除您的名称空间。
循序渐进指南
使用命令启动代理:
kubectl代理
kubectl代理&开始服务 127.0.0.1:8001
找到名称空间
Kubectl得到ns
{您的命名空间名称}终止1d
把它归档
kubectl获取命名空间{您的命名空间名称}-o json > tmp.json
编辑tmp文件。Json并删除终结器
"spec" "finalizers" "kubernetes"
编辑之后,它应该是这样的
,“规范”:{“终结者”:[]},
我们现在只需运行curl并更新其中的名称空间值就差不多了
curl -k -H "Content-Type: application/json" -X PUT——data-二进制 @tmp。json http://127.0.0.1:8001/api/v1/namespaces/{Your namespace 名称}/完成
它消失了
**
请尝试以下命令:
kubectl patch ns <your_namespace> -p '{"metadata":{"finalizers":null}}'
1. 使用Curl命令
问题提及:https://amalgjose.com/2021/07/28/how-to-manually-delete-a-kubernetes-namespace-stuck-in-terminating-state/
export NAMESPACE=<specifice-namespace>
kubectl get namespace $NAMESPACE -o json > tempfile.json
编辑JSON文件并从spec.finalizers中删除所有值
保存它,然后在单独的选项卡上应用此命令 (必须在单独的标签打开)
kubectl proxy
并在同一选项卡上运行此命令:
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tempfile.json http://127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
检查命名空间是否删除了终止命名空间
kubectl get namespaces
2. 使用Kubectl命令
提到的问题:https://aws.amazon.com/premiumsupport/knowledge-center/eks- terminated-namespaces/
以如下格式保存JSON文件:
export NAMESPACE=<specifice-namespace>
kubectl get namespace $NAMESPACE -o json > tempfile.json
编辑JSON文件并从spec.finalizers中删除所有值 要应用更改,运行如下命令:
kubectl replace --raw "/api/v1/namespaces/$NAMESPACE/finalize" -f ./tempfile.json
验证终止命名空间已被删除:
kubectl get namespaces
推荐文章
- Printf与std::字符串?
- Kubectl连续日志
- 我的kubernetes豆荚不断崩溃与“CrashLoopBackOff”,但我找不到任何日志
- 如何从kubectl配置中删除集群和上下文?
- Kubernetes支持多个环境(Staging、QA、生产等)
- CSS中*和*|*的区别是什么?
- Kubernetes API -获取特定节点上的pod
- 我如何调试“ImagePullBackOff”?
- Django:“projects”vs“apps”
- 在Kubernetes中更新configmap时重新启动pod ?
- 输入对象的datetime。Datetime没有Datetime属性
- 为部署的Kubernetes服务获取YAML ?
- 如何在kubernetes中切换命名空间
- \(反斜杠)在PHP(5.3+)中做什么?
- 位于另一个名称空间中的服务