zoukankan      html  css  js  c++  java
  • k8s 删除ns 卡住的解决办法

    在某些情况下,在k8s中会无法删除某个namespace,它会一直卡在terminating状态下。解决这个问题的步骤为:

    kubectl api-resources --verbs=list --namespaced -o name   | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
    

     这个指令找到阻碍这个namespace删除的资源,然后手动删除这些资源。

    但是大部分时候,这些资源也杀不掉,解决办法是执行

    kubectl edit pod -o json
    

     然后找到里面的"finalizers",把它的值设置成一个空数组。

    解决这些资源后,参照以下文档删除那个ns:

    Resolution

    To delete a namespace stuck in the finalizing state:

    1. Enable docker admin client bundle

    2. GET the namespace object

      $ NAMESPACE=skynet
      $ kubectl get ns $NAMESPACE -o json > /tmp/${NAMESPACE}.json
      $ cat /tmp/${NAMESPACE}.json
      {
      "apiVersion": "v1",
      "kind": "Namespace",
      "metadata": {
      "creationTimestamp": "2019-02-04T16:15:06Z",
      "name": "skynet",
      "resourceVersion": "20879144",
      "selfLink": "/api/v1/namespaces/skynet",
      "uid": "0951bcf9-2898-11e9-8e38-0242ac11000b"
      },
      "spec": {
      "finalizers": [
      "kubernetes"
      ]
      },
      "status": {
      "phase": "Active"
      }
      }
      
    3. Use a text editor to delete the all elements in finalizer array, leaving only an empty array [] such as below example:

      {
      "apiVersion": "v1",
      "kind": "Namespace",
      "metadata": {
      "creationTimestamp": "2019-02-04T16:15:06Z",
      "name": "skynet",
      "resourceVersion": "20879144",
      "selfLink": "/api/v1/namespaces/skynet",
      "uid": "0951bcf9-2898-11e9-8e38-0242ac11000b"
      },
      "spec": {
      "finalizers": [
      ]
      },
      "status": {
      "phase": "Active"
      }
      }
      
    4. PUT the namespace object without the finalizer

      a. Get a bearer token

      ```
      UCP_URL=ucp.example.com
      USERNAME=admin
      PASSWORD=supersecretadminpassword
      curl -sk -d "{"username":"$USERNAME","password":"$PASSWORD"}" https://${UCP_URL}/auth/login | jq -r .auth_token > auth-token
      ```
      

      b. Issue an HTTP PUT

      `curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/skynet/finalize`
      
      Example: `curl -k -H "Content-Type: application/json" -H "authorization: Bearer $(cat ./auth-token)" -X PUT --data-binary @/tmp/skynet.json https://ucp.example.com/api/v1/namespaces/skynet/finalize`
      

    After the finalizer array is empty and the status is in terminating, kubernetes will delete the namespace.

    参考:https://success.docker.com/article/kubernetes-namespace-stuck-in-terminating

  • 相关阅读:
    介绍自己
    第六周作业
    第五周作业
    第四周作业
    秋季学期学习总结
    币值转化
    justintime compiler
    PostgreSQL windows下安装出现问题的解决办法
    Java语言的异常处理,完全理解下面4点就可以了
    Ultraedit用途【来自网络】
  • 原文地址:https://www.cnblogs.com/elnino/p/11104084.html
Copyright © 2011-2022 走看看