我有一个“卡住”的名称空间,我删除显示在这个永恒的“终止”状态。
当前回答
将ambassador替换为您的名称空间
检查名称空间是否卡住
kubectl get ns ambassador
NAME STATUS AGE
ambassador Terminating 110d
这个卡了很久了
打开管理终端/cmd提示符或powershell并运行
kubectl代理
这将启动本地web服务器
打开另一个终端并运行
kubectl get ns ambassador -o json >tmp.json
编辑tmp文件。Json使用vi或nano
从这个
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"ambassador\"}}\n"
},
"creationTimestamp": "2021-01-07T18:23:28Z",
"deletionTimestamp": "2021-04-28T06:43:41Z",
"name": "ambassador",
"resourceVersion": "14572382",
"selfLink": "/api/v1/namespaces/ambassador",
"uid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"conditions": [
{
"lastTransitionTime": "2021-04-28T06:43:46Z",
"message": "Discovery failed for some groups, 3 failing: unable to retrieve the complete list of server APIs: compose.docker.com/v1alpha3: an error on the server (\"Internal Server Error: \\\"/apis/compose.docker.com/v1alpha3?timeout=32s\\\": Post https://0.0.0.1:443/apis/authorization.k8s.io/v1beta1/subjectaccessreviews: write tcp 0.0.0.0:53284-\u0026gt;0.0.0.0:443: write: broken pipe\") has prevented the request from succeeding, compose.docker.com/v1beta1: an error on the server (\"Internal Server Error: \\\"/apis/compose.docker.com/v1beta1?timeout=32s\\\": Post https://10.96.0.1:443/apis/authorization.k8s.io/v1beta1/subjectaccessreviews: write tcp 0.0.0.0:5284-\u0026gt;10.96.0.1:443: write: broken pipe\") has prevented the request from succeeding, compose.docker.com/v1beta2: an error on the server (\"Internal Server Error: \\\"/apis/compose.docker.com/v1beta2?timeout=32s\\\": Post https://0.0.0.0:443/apis/authorization.k8s.io/v1beta1/subjectaccessreviews: write tcp 1.1.1.1:2284-\u0026gt;0.0.0.0:443: write: broken pipe\") has prevented the request from succeeding",
"reason": "DiscoveryFailed",
"status": "True",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2021-04-28T06:43:49Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2021-04-28T06:43:49Z",
"message": "All content successfully deleted",
"reason": "ContentDeleted",
"status": "False",
"type": "NamespaceDeletionContentFailure"
}
],
"phase": "Terminating"
}
}
to
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"ambassador\"}}\n"
},
"creationTimestamp": "2021-01-07T18:23:28Z",
"deletionTimestamp": "2021-04-28T06:43:41Z",
"name": "ambassador",
"resourceVersion": "14572382",
"selfLink": "/api/v1/namespaces/ambassador",
"uid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"spec": {
"finalizers": []
}
}
通过删除终结器中的状态和kubernetes
现在使用该命令并用您的名称空间替换ambassador
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/ambassador/finalize
运行之前,您将看到另一个json
然后运行命令
kubectl get ns ambassador
Error from server (NotFound): namespaces "ambassador" not found
如果它仍然显示终止或任何其他错误,请确保以适当的方式格式化json,并再次尝试上述步骤。
其他回答
我发现删除“终止”名称空间的唯一方法是删除“终结器”部分中的条目。我试过——强制删除它和——grace-period=0没有一个工作,但是,这个方法做到了:
在命令行中显示命名空间的信息:
$ kubectl get namespace your-rogue-namespace -o yaml
这将给你yaml输出,寻找类似于这样的一行:
deletionTimestamp: 2018-09-17T13:00:10Z
finalizers:
- Whatever content it might be here...
labels:
然后只需编辑名称空间配置并删除终结器容器中的项。
$ kubectl edit namespace your-rogue-namespace
这将打开一个编辑器(在我的例子中是VI),浏览我想删除的行并删除它,我按D键两次删除整行。
保存它,退出编辑器,就像变魔术一样。rogue-namespace应该消失了。
为了证实这一点:
$ kubectl get namespace your-rogue-namespace -o yaml
在我的案例中,问题是由自定义指标引起的。
要了解导致问题的原因,只需运行以下命令:
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 名称}/完成
它消失了
**
解决方案:
使用下面的命令,不做任何更改。这招很管用。
NS=`kubectl get ns |grep Terminating | awk 'NR==1 {print $1}'` && kubectl get namespace "$NS" -o json | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" | kubectl replace --raw /api/v1/namespaces/$NS/finalize -f -
享受
将ambassador替换为您的名称空间
检查名称空间是否卡住
kubectl get ns ambassador
NAME STATUS AGE
ambassador Terminating 110d
这个卡了很久了
打开管理终端/cmd提示符或powershell并运行
kubectl代理
这将启动本地web服务器
打开另一个终端并运行
kubectl get ns ambassador -o json >tmp.json
编辑tmp文件。Json使用vi或nano
从这个
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"ambassador\"}}\n"
},
"creationTimestamp": "2021-01-07T18:23:28Z",
"deletionTimestamp": "2021-04-28T06:43:41Z",
"name": "ambassador",
"resourceVersion": "14572382",
"selfLink": "/api/v1/namespaces/ambassador",
"uid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"conditions": [
{
"lastTransitionTime": "2021-04-28T06:43:46Z",
"message": "Discovery failed for some groups, 3 failing: unable to retrieve the complete list of server APIs: compose.docker.com/v1alpha3: an error on the server (\"Internal Server Error: \\\"/apis/compose.docker.com/v1alpha3?timeout=32s\\\": Post https://0.0.0.1:443/apis/authorization.k8s.io/v1beta1/subjectaccessreviews: write tcp 0.0.0.0:53284-\u0026gt;0.0.0.0:443: write: broken pipe\") has prevented the request from succeeding, compose.docker.com/v1beta1: an error on the server (\"Internal Server Error: \\\"/apis/compose.docker.com/v1beta1?timeout=32s\\\": Post https://10.96.0.1:443/apis/authorization.k8s.io/v1beta1/subjectaccessreviews: write tcp 0.0.0.0:5284-\u0026gt;10.96.0.1:443: write: broken pipe\") has prevented the request from succeeding, compose.docker.com/v1beta2: an error on the server (\"Internal Server Error: \\\"/apis/compose.docker.com/v1beta2?timeout=32s\\\": Post https://0.0.0.0:443/apis/authorization.k8s.io/v1beta1/subjectaccessreviews: write tcp 1.1.1.1:2284-\u0026gt;0.0.0.0:443: write: broken pipe\") has prevented the request from succeeding",
"reason": "DiscoveryFailed",
"status": "True",
"type": "NamespaceDeletionDiscoveryFailure"
},
{
"lastTransitionTime": "2021-04-28T06:43:49Z",
"message": "All legacy kube types successfully parsed",
"reason": "ParsedGroupVersions",
"status": "False",
"type": "NamespaceDeletionGroupVersionParsingFailure"
},
{
"lastTransitionTime": "2021-04-28T06:43:49Z",
"message": "All content successfully deleted",
"reason": "ContentDeleted",
"status": "False",
"type": "NamespaceDeletionContentFailure"
}
],
"phase": "Terminating"
}
}
to
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"ambassador\"}}\n"
},
"creationTimestamp": "2021-01-07T18:23:28Z",
"deletionTimestamp": "2021-04-28T06:43:41Z",
"name": "ambassador",
"resourceVersion": "14572382",
"selfLink": "/api/v1/namespaces/ambassador",
"uid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"spec": {
"finalizers": []
}
}
通过删除终结器中的状态和kubernetes
现在使用该命令并用您的名称空间替换ambassador
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/ambassador/finalize
运行之前,您将看到另一个json
然后运行命令
kubectl get ns ambassador
Error from server (NotFound): namespaces "ambassador" not found
如果它仍然显示终止或任何其他错误,请确保以适当的方式格式化json,并再次尝试上述步骤。
推荐文章
- 命名空间“卡住”作为终止,我如何删除它
- Kubernetes如何使部署更新映像
- 如何在c++中正确使用名称空间?
- 如何在gcloud和minikube之间切换kubectl集群
- 如何让容器在Kubernetes上运行?
- 如何手动触发Kubernetes计划作业?
- 如何从Kubernetes复制控制器的所有pod中获取日志?
- 删除Kubernetes pod时重新创建
- 如何正确重载ostream的<<操作符?
- 使用/healthz进行应用程序运行状况检查的约定来自哪里?
- 什么是名称空间?
- Kubernetes Service定义中targetPort和port的区别
- Kubernetes服务外部ip挂起
- 我如何强迫Kubernetes重新拉一张图片?
- 通过反射获取命名空间中的所有类型