zoukankan      html  css  js  c++  java
  • k8s强制删除资源


    注意:以下操作方法十分危险,三思而行!!!

    如果名称空间、pod、pv、pvc全部处于“Terminating”状态时,此时的该名称空间下的所有控制器都已经被删除了,之所以出现pod、pvc、pv、ns无法删除,那是因为kubelet 阻塞,有其他的资源在使用该namespace,比如CRD等,尝试重启kubelet,再删除该namespace 也不好使。

    正确的删除方法:删除pod--> 删除pvc ---> 删除pv --> 删除名称空间

    一、强制删除pod

    $ kubectl delete pod <your-pod-name> -n <name-space> --force --grace-period=0
    

    解决方法:加参数 --force --grace-period=0,grace-period表示过渡存活期,默认30s,在删除POD之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止POD

    二、强制删除pv、pvc

    $ kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'
    $ kubectl patch pvc xxx -p '{"metadata":{"finalizers":null}}'
    

    直接删除k8s etcd数据库中的记录!

    三、强制删除ns

    在尝试以下命令强制删除也不好使:

    $ kubectl delete ns <terminating-namespace> --force --grace-period=0
    

    解决方法:

    1)运行以下命令以查看处于“Terminating”状态的namespace:

    $ kubectl get namespaces
    

    2)选择一个Terminating namespace,并查看namespace 中的finalizer。运行以下命令:

    $ kubectl get namespace <terminating-namespace> -o yaml
    

    输出信息如下:

    apiVersion: v1
    kind: Namespace
    metadata:
      creationTimestamp: "2019-11-20T15:18:06Z"
      deletionTimestamp: "2020-01-16T02:50:02Z"
      name: <terminating-namespace>
      resourceVersion: "3249493"
      selfLink: /api/v1/namespaces/knative-eventing
      uid: f300ea38-c8c2-4653-b432-b66103e412db
    spec:
      finalizers:
      - kubernetes
    status:
    

    3)导出json格式到文件

    $ kubectl get namespace <terminating-namespace> -o json >tmp.json
    

    4)编辑tmp.josn,删除finalizers 字段的值

    {
      "apiVersion": "v1",
      "kind": "Namespace",
      "metadata": {
        "creationTimestamp": "2019-11-20T15:18:06Z",
        "deletionTimestamp": "2020-01-16T02:50:02Z",
        "name": "<terminating-namespace>",
        "resourceVersion": "3249493",
        "selfLink": "/api/v1/namespaces/knative-eventing",
        "uid": "f300ea38-c8c2-4653-b432-b66103e412db"
      },
      "spec": {
        "finalizers": []
      },
      "status": {
        "phase": "Terminating"
      }
    }
    

    5)开启proxy

    $ kubectl proxy
    # 执行该命令后,当前终端会被卡住
    

    6)打开新的终端,运行以下命令

    $ curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize
    

    输出信息如下:

    {
      "kind": "Namespace",
      "apiVersion": "v1",
      "metadata": {
        "name": "istio-system",
        "selfLink": "/api/v1/namespaces/istio-system/finalize",
        "uid": "2e274537-727f-4a8f-ae8c-397473ed619a",
        "resourceVersion": "3249492",
        "creationTimestamp": "2019-11-20T15:18:06Z",
        "deletionTimestamp": "2020-01-16T02:50:02Z"
      },
      "spec": {
        
      },
      "status": {
        "phase": "Terminating"
      }
    }
    

    7)确认处于Terminating 状态的namespace已经被删除

    $ kubectl get namespaces
    

    如果还有处于Terminating 状态的namespace,重复以上操作,删除即可!

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/13924581.html
Copyright © 2011-2022 走看看