K8S 强制删除卡在Terminating状态的namespaces 记录

问题

[root@master ~]# kubectl get ns
NAME              STATUS        AGE
default           Active        46d
kube-node-lease   Active        46d
kube-public       Active        46d
kube-system       Active        46d
monitoring        Terminating   46d

使用 --force 强制删除,比如删除命名空间 test,执行如下命令

kubectl delete ns monitoring --force --grace-period=0

调用API接口删除

[root@master ~]# netstat -ntlp | grep kube-apiserve
tcp6       0      0 :::6443                 :::*                    LISTEN      7737/kube-apiserver 
#API接口查询 
[root@master ~]# kubectl get ns monitoring -ojson > tmp.json
#导出信息

修改文件内容

[root@master ~]# cat tmp.json
{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "annotations": {
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
        },
        "creationTimestamp": "2020-04-24T01:39:40Z",
        "deletionTimestamp": "2020-06-09T07:22:46Z",
        "name": "monitoring",
        "resourceVersion": "30261",
        "selfLink": "/api/v1/namespaces/monitoring",
        "uid": "3fdd71e6-9693-4d44-bd8a-f1e54799cde4"
    },
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
    },
    "status": {
        "phase": "Terminating"
    }
}

删除以下代码段

"spec": {
    "finalizers": [
        "kubernetes"
    ]
},

权限问题

修改完成后,直接调用API接口会有报错如下


curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://127.0.0.1:6443/api/v1/namespaces/monitoring/finalize
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "namespaces \"monitoring\" is forbidden: User \"system:anonymous\" cannot update resource \"namespaces/finalize\" in API group \"\" in the namespace \"monitoring\"",
  "reason": "Forbidden",
  "details": {
    "name": "monitoring",
    "kind": "namespaces"
  },
  "code": 403

此时需要创建匿名用户的权限,命令如下

kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:annymous

再次调用

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://127.0.0.1:6443/api/v1/namespaces/monitoring/finalize
{
  "kind": "Namespace",
  "apiVersion": "v1",
  "metadata": {
    "name": "monitoring",
    "selfLink": "/api/v1/namespaces/monitoring/finalize",
    "uid": "3fdd71e6-9693-4d44-bd8a-f1e54799cde4",
    "resourceVersion": "30261",
    "creationTimestamp": "2020-04-24T01:39:40Z",
    "deletionTimestamp": "2020-06-09T07:22:46Z",
    "annotations": {
      "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"monitoring\"}}\n"
    }
  },
  "spec": {
    
  },
  "status": {
    "phase": "Terminating"
  }

删除成功

[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46d
kube-node-lease   Active   46d
kube-public       Active   46d
kube-system       Active   46d
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在 Kubernetes 集群中删除所有处于 Terminating 状态的 Pod,可以使用以下命令: ``` kubectl delete pod --field-selector=status.phase=Terminating ``` 请注意,这将删除所有处于 Terminating 状态的 Pod,并且无法撤消。因此,应谨慎使用此命令。 ### 回答2: Kubernetes(K8s)是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。要删除所有处于Terminating(终止)状态的Pod,可以使用以下语句: ``` kubectl get pods --field-selector=status.phase=Terminating -o json | kubectl delete -f - ``` 该语句使用了kubectl命令,并结合了一些参数和标志来执行特定的操作。 - `kubectl get pods`:获取当前集群中的所有Pod。 - `--field-selector=status.phase=Terminating`:使用字段过滤器,仅返回状态Terminating的Pod。 - `-o json`:输出格式为JSON,以便用于后续的操作。 - `|`:管道命令符,将前一个命令的输出作为后一个命令的输入。 - `kubectl delete -f -`:从标准输入中读取JSON文件,并根据其内容删除对应的资源。 这样,执行该语句后,Kubernetes将会删除所有处于Terminating状态的Pod。 需要注意的是,使用该语句删除Pod时,确保你有足够的权限执行操作,并且在执行前仔细确认一次,以免误删除正在使用或重要的Pod。同时,建议根据具体情况调整语句,以确保只删除目标Pod。 ### 回答3: 要删除所有Terminating状态的pod,可以使用以下命令: kubectl delete pod --all --grace-period=0 --force 这个命令中的参数含义如下: - "kubectl delete pod":删除pod的命令 - "--all":指定要删除所有的pod - "--grace-period=0":设置pod的终止期为0,即立即终止 - "--force":强制删除pod,即使pod处于Terminating状态 通过使用这个命令,所有处于Terminating状态的pod都会被立即删除,不会等待额外的终止期。 需要注意的是,执行此命令可能会导致数据丢失或应用程序中断,因此在执行之前请谨慎确认。另外,删除操作是不可逆的,无法恢复被删除的pod,所以请确保操作的可行性和必要性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值