• 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,重复以上操作,删除即可!

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    linux:centos7开启指定端口,开放外网访问
    zookeeper 集群搭建
    单机安装zookeeper的3.4.7版本
    CentOS7下安装jdk1.8并配置环境变量,防火墙设置开关
    Redis分布式锁的正确实现方式
    MySQl5.7 忘记密码怎么办?
    Flink 之Window(窗口)
    Flink之Sink(文件、Kafka、Redis、Es、Mysql)
    Canal同步Mysql数据至Hbase
    Flink 之分流Select与Split
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/13924581.html
Copyright © 2020-2023  润新知