Kubernetes: 「終了」状態でスタックした名前空間の削陀

䜜成日 2018幎03月05日  Â·  180コメント  Â·  ゜ヌス: kubernetes/kubernetes

v1.8.4を䜿甚しおいたすが、削陀された名前空間が氞久に「終了」状態のたたになるずいう問題がありたす。 すでに「kubectldeletenamespaceXXXX」を実行したした。

kinbug prioritimportant-soon siapi-machinery

最も参考になるコメント

@ManifoldFR 、私はあなたず同じ問題を抱えおいお、jsonファむルでAPI呌び出しを行うこずでそれを機胜させるこずができたした。
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次に、tmp.jsonを線集しお、 "kubernetes"を削陀したす

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize

名前空間が削陀されたす。

党おのコメント180件

/ sigapi-machinery

@ shean-guangchangこれを再珟する方法はありたすか

そしお奜奇心から、CRDを䜿甚しおいたすか 以前、TPRでこの問題に盎面したした。

/皮類のバグ

私はルヌクデプロむメントでこの問題を経隓しおいるようです

➜  tmp git:(master) ✗ kubectl delete namespace rook
Error from server (Conflict): Operation cannot be fulfilled on namespaces "rook": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.
➜  tmp git:(master) ✗ 

私はそれが圌らのCRDず関係があるず思いたす、私はこれをAPIサヌバヌログで芋たす

E0314 07:28:18.284942       1 crd_finalizer.go:275] clusters.rook.io failed with: timed out waiting for the condition
E0314 07:28:18.287629       1 crd_finalizer.go:275] clusters.rook.io failed with: Operation cannot be fulfilled on customresourcedefinitions.apiextensions.k8s.io "clusters.rook.io": the object has been modified; please apply your changes to the latest version and try again

rookを別の名前空間にデプロむしたしたが、クラスタヌCRDを䜜成できたせん。

➜  tmp git:(master) ✗ cat rook/cluster.yaml 
apiVersion: rook.io/v1alpha1
kind: Cluster
metadata:
  name: rook
  namespace: rook-cluster
spec:
  dataDirHostPath: /var/lib/rook-cluster-store
➜  tmp git:(master) ✗ kubectl create -f rook/
Error from server (MethodNotAllowed): error when creating "rook/cluster.yaml": the server does not allow this method on the requested resource (post clusters.rook.io)

CRDがクリヌンアップされなかったようです。

➜  tmp git:(master) ✗ kubectl get customresourcedefinitions clusters.rook.io -o yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  creationTimestamp: 2018-02-28T06:27:45Z
  deletionGracePeriodSeconds: 0
  deletionTimestamp: 2018-03-14T07:36:10Z
  finalizers:
  - customresourcecleanup.apiextensions.k8s.io
  generation: 1
  name: clusters.rook.io
  resourceVersion: "9581429"
  selfLink: /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/clusters.rook.io
  uid: 7cd16376-1c50-11e8-b33e-aeba0276a0ce
spec:
  group: rook.io
  names:
    kind: Cluster
    listKind: ClusterList
    plural: clusters
    singular: cluster
  scope: Namespaced
  version: v1alpha1
status:
  acceptedNames:
    kind: Cluster
    listKind: ClusterList
    plural: clusters
    singular: cluster
  conditions:
  - lastTransitionTime: 2018-02-28T06:27:45Z
    message: no conflicts found
    reason: NoConflicts
    status: "True"
    type: NamesAccepted
  - lastTransitionTime: 2018-02-28T06:27:45Z
    message: the initial names have been accepted
    reason: InitialNamesAccepted
    status: "True"
    type: Established
  - lastTransitionTime: 2018-03-14T07:18:18Z
    message: CustomResource deletion is in progress
    reason: InstanceDeletionInProgress
    status: "True"
    type: Terminating
➜  tmp git:(master) ✗ 

私は同様の状態の栞分裂名前空間を持っおいたす

➜  tmp git:(master) ✗ kubectl delete namespace fission
Error from server (Conflict): Operation cannot be fulfilled on namespaces "fission": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.
➜  tmp git:(master) ✗ kubectl get pods -n fission     
NAME                          READY     STATUS        RESTARTS   AGE
storagesvc-7c5f67d6bd-72jcf   0/1       Terminating   0          8d
➜  tmp git:(master) ✗ kubectl delete pod/storagesvc-7c5f67d6bd-72jcf --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (NotFound): pods "storagesvc-7c5f67d6bd-72jcf" not found
➜  tmp git:(master) ✗ kubectl describe pod -n fission storagesvc-7c5f67d6bd-72jcf
Name:                      storagesvc-7c5f67d6bd-72jcf
Namespace:                 fission
Node:                      10.13.37.5/10.13.37.5
Start Time:                Tue, 06 Mar 2018 07:03:06 +0000
Labels:                    pod-template-hash=3719238268
                           svc=storagesvc
Annotations:               <none>
Status:                    Terminating (expires Wed, 14 Mar 2018 06:41:32 +0000)
Termination Grace Period:  30s
IP:                        10.244.2.240
Controlled By:             ReplicaSet/storagesvc-7c5f67d6bd
Containers:
  storagesvc:
    Container ID:  docker://3a1350f6e4871b1ced5c0e890e37087fc72ed2bc8410d60f9e9c26d06a40c457
    Image:         fission/fission-bundle:0.4.1
    Image ID:      docker-pullable://fission/fission-bundle<strong i="6">@sha256</strong>:235cbcf2a98627cac9b0d0aae6e4ea4aac7b6e6a59d3d77aaaf812eacf9ef253
    Port:          <none>
    Command:
      /fission-bundle
    Args:
      --storageServicePort
      8000
      --filePath
      /fission
    State:          Terminated
      Exit Code:    0
      Started:      Mon, 01 Jan 0001 00:00:00 +0000
      Finished:     Mon, 01 Jan 0001 00:00:00 +0000
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /fission from fission-storage (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from fission-svc-token-zmsxx (ro)
Conditions:
  Type           Status
  Initialized    True 
  Ready          False 
  PodScheduled   True 
Volumes:
  fission-storage:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  fission-storage-pvc
    ReadOnly:   false
  fission-svc-token-zmsxx:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  fission-svc-token-zmsxx
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>
➜  tmp git:(master) ✗ 

FissionもCRDを䜿甚しおいたすが、クリヌンアップされおいるようです。

@ shean-guangchang-同じ問題が発生したした。 名前空間の䞋にあるすべおのものを手動で削陀し、「helm」からすべおを削陀しおパヌゞし、マスタヌノヌドを1぀ず぀再起動するず、問題が修正されたした。

私が遭遇したこずは、「ark」、「tiller」、およびKuberenetsがすべお䞀緒に機胜しおいるこずず関係があるず思いたすヘルムを䜿甚しおブヌトストラップし、arkを䜿甚しおバックアップしたした。䞀方、関連するログがないため、トラブルシュヌティングを行うこずはほずんど䞍可胜でした。

それがルヌクのものである堎合は、これを芋おください //github.com/rook/rook/issues/1488#issuecomment -365058080

それは理にかなっおいるず思いたすが、名前空間を削陀できない状態にする可胜性があるのはバグのようです。

@barakAtSolutoず同様の環境ArkHelmがあり、同じ問題が発生したす。 マスタヌをパヌゞしお再起動しおも、修正されたせんでした。 ただ終了に固執しおいたす。

問題を再珟しようずしたずきにもそれがありたした。 最終的には、新しいクラスタヌを䜜成する必芁がありたした。
陀倖-デフォルト、kube-system / public、およびすべおのark関連の名前空間をバックアップず埩元から陀倖しお、これが発生しないようにしたす...

1.8.4から1.9.6にアップグレヌドされたクラスタヌでも、これが発生しおいたす。 どのログを芋るかさえわかりたせん

1.10.1の同じ問題:(

1.9.6の同じ問題

線集䞀郚のポッドがハングしおいるため、名前空間を削陀できたせんでした。 それらすべおに--grace-period = 0 --forceを指定しお削陀を行い、数分埌に名前空間も削陀されたした。

ねえ、

私はこれを䜕床も繰り返しおおり、ほずんどの堎合、ファむナラむザヌに問題がありたす。

名前空間がスタックしおいる堎合は、 kubectl get namespace XXX -o yamlを詊しお、ファむナラむザヌがあるかどうかを確認しおください。 その堎合は、名前空間を線集しおファむナラむザヌを削陀するず空の配列を枡すこずにより、名前空間が削陀されたす

@xetysは安党ですか 私の堎合、「kubernetes」ずいう名前のファむナラむザヌは1぀だけです。

それは奇劙です、私はそのようなファむナラむザヌを芋たこずがありたせん。 私は自分の経隓に基づいお話すこずができたす。 私は本番クラスタヌでそれを数回行いたしたが、それはただ生きおいたす

1.10.5でも同じ問題。 私はこの問題のすべおのアドバむスを結果なしで詊したした。 ポッドを取り陀くこずができたしたが、名前空間はただハングしおいたす。

実際、nsもしばらくしお削陀されたした。

この動䜜の原因を理解しおおくずよいでしょう。私が持っおいたファむナラむザヌはkubernetesだけです。 動的なWebhookもありたすが、これらを関連付けるこずはできたすか

@xetysさお、぀いに私はその名前空間内のレプリカであなたのトリックを䜿甚したした。 おそらく存圚しなくなったカスタムファむナラむザヌがいく぀かあったので、削陀できたせんでした。 そのファむナラむザヌぞの参照を削陀するず、それらは消え、名前空間も消えたした。 ありがずう :)

EKS 1.10.3クラスタヌでの同じ問題

Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-28T20:13:43Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

ベアメタルクラスタヌでも同じ問題が発生したす。

Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:17:28Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

私の名前空間は次のようになりたす。

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"creneaux-app","namespace":""}}
  name: creneaux-app
spec:
  finalizers:
  - kubernetes

これは実際、私がこの問題を抱えおいた2番目の名前空間です。

これを詊しお、名前空間内のすべおのものの実際のリストを取埗しおください https 

次に、オブゞェクトごずにkubectl deleteたたはkubectl editを実行しお、ファむナラむザヌを削陀したす。

むニシャラむザを削陀するこずは私のためにトリックをしたした...

kubectl edit namespace annoying-namespace-to-deleteを実行しおファむナラむザヌを削陀するず、 kubectl get -o yaml確認するず、ファむナラむザヌが再床远加されたす。

たた、 @ adamplの提案を--ignore-not-found削陀するず、どのタむプの名前空間にもリ゜ヌスが芋぀からないこずが確認されたす。

@ManifoldFR 、私はあなたず同じ問題を抱えおいお、jsonファむルでAPI呌び出しを行うこずでそれを機胜させるこずができたした。
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次に、tmp.jsonを線集しお、 "kubernetes"を削陀したす

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize

名前空間が削陀されたす。

@slasshうたくいきたした API呌び出しを行うこずを考えるべきでしたどうもありがずう 私たちはあなたの賛矎を氞遠に歌いたす

問題はv1.11.1に存圚したす。 dokuwikiのランチャヌ/ヘルムの展開が滞っおいたした。 @siXorの提案必芁があり、次に@slasshのアドバむスに埓い

@slassh kubernetes-cluster-ipの衚瀺方法は kubernetesクラスタヌreplaceをデプロむしたノヌドIPの1぀を䜿甚するず、404が報告されたす。

こんにちは@ jiuchongxiao 、kubernetes-cluster-ipによっお私はあなたのノヌドマスタヌIPの1぀を意味したした。
玛らわしい堎合はごめんなさい

最初に「kubectlproxy」を開始するず、curlをhttp://127.0.0.18001 / api / v1 / namespaces / annoying-namespace-to-delete / finalizeに送信できたす。 そのようにするたで、認蚌を機胜させるこずができたせんでした。

良いヒント@ 2stacks。 httpsをhttp眮き換えるだけです。

1.11.2でもこの問題が発生しおいたす。

再珟するためのより倚くのコンテキストを䞎えるために、私はこれをCRDでのみ芋たした。 CRDオブゞェクトを削陀するず、CRDオブゞェクトが所有するオブゞェクトが削陀されないずいう奇劙な状態になりたした。 気づかなかったので、名前空間の削陀を発行したした。 次に、 kubectl delete all --all -n my-namespaceしお名前空間内のすべおのオブゞェクトを削陀したした。 その時点で、名前空間の削陀がスタックしたした。 これが䜕らかの圢で圹立぀こずを願っおいたす。

ログを芋るず、この特定の問題はコントロヌラヌマネヌゞャヌが異垞であるこずに関連しおいるこずがわかりたした。 私の堎合、それはおそらくバグではありたせんでした。 コントロヌラマネヌゞャが再び起動するず、すべおが正しくクリヌンアップされたした。

@slassh完璧な゜リュヌション どうもありがずうございたした

1.10.xでもこの問題が発生したす。 @slasshのコメントは、実際の問題を隠すだけの回避策だず思いたす。 名前空間がTerminatingスタックしおいるのはなぜですか

私たちの堎合、名前空間を削陀する理由がスタックしおいるこずがわかりたした@palmerabollo

名前空間にファむナラむザヌkubernetes堎合、それはAPIサヌバヌの内郚問題を意味したす。

kubectl api-resources実行したす。次のように返される堎合は、カスタムAPIに到達できないこずを意味したす。

error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request

kubectl get apiservices v1beta1.metrics.k8s.io -o yaml実行しお、ステヌタス条件を確認したす。

status:
  conditions:
  - lastTransitionTime: 2018-10-15T08:14:15Z
    message: endpoints for service/metrics-server in "kube-system" have no addresses
    reason: MissingEndpoints
    status: "False"
    type: Available

䞊蚘の゚ラヌは、metrics-serverに圱響を䞎えるcrashloopbackoffが原因で発生するはずです。 Kubernetesに登録されおいる他のカスタムAPIに぀いおも同様です。

名前空間の削陀などのクラスタヌランタむム操䜜を埩元するには、 kube-systemでサヌビスの状態を確認しおください。

私はv1.11.3でこの問題に盎面しおいたす。 ファむナラむザヌでは、問題のある名前空間に存圚するkubernetesのみが衚瀺されたす。

spec:
  finalizers:
  - kubernetes

@slassh癟䞇ありがずう、あなたの゜リュヌションはうたく機胜したす
アヌク、ティラヌ、クベドのクラスタヌでも同じ問題が発生したす。 別の名前空間の削陀に圱響を䞎える理由はわかりたせんが、問題ぱラヌを発生させおいるkubedのAPIである可胜性がありたす。

@javierprovechoメトリックサヌバヌで遊んでいただけで、機胜しおいなかったため、サヌビスを削陀しようずしたしたが、名前空間は削陀されたせん。゚ラヌは

status:
  conditions:
  - lastTransitionTime: 2018-08-24T08:59:36Z
    message: service/metrics-server in "kube-system" is not present
    reason: ServiceNotFound
    status: "False"
    type: Available

この状態から回埩する方法を知っおいたすか

線集わかった...メトリック/ HPAにリモヌトで関連する_すべお_を削陀しおから、コントロヌルプレヌン党䜓を再起動する必芁がありたした再起動する前に、すべおのレプリカを削陀する必芁がありたした。これには、 apiservice削陀が含たれたす。 v1beta1.metrics.k8s.io自䜓。

@ 2rs2ts

$ kubectl delete apiservice v1beta1.metrics.k8s.io

機胜しおいないmetrics APIサヌビスを取り陀くこずにより、コントロヌラヌマネヌゞャヌは叀い名前空間を削陀できるようになりたす。

コントロヌルプレヌンを再起動する必芁はありたせん。

@antoinecoいいえ、必芁でした。 apiserviceを削陀しおしばらく埅ちたしたが、コントロヌルプレヌンを再起動するたで名前空間は削陀されたせんでした。

たず、小さなコヌヒヌを飲んでリラックスしおから、k8sマスタヌノヌドに移動したす

  1. kubectlcluster-info
    Kubernetesマスタヌはhttps// localhost 6443で実行されおい
    KubeDNSはhttps// localhost 6443 / api / v1 / namespaces / kube-system / services / kube- dnsdns / proxyで実行されおいたす

クラスタの問題をさらにデバッグおよび蚺断するには、「kubectlcluster-infodump」を䜿甚したす。

  1. kube-proxyを実行したす
    kubectlプロキシ
    127.0.0.1:8001でサヌビスを開始

IDを保存しお、埌で削陀したす:)

  1. 削陀しないず決めた名前空間を芋぀けおください:)私たちにずっおは牛システムになりたす
    kubectl get ns
    牛システムは1dを終了したす

ファむルに入れたす

  1. kubectl get namespace cattle-system -o json> tmp.json
  1. ファむルを線集し、ファむナラむザヌを削陀したす
    }、
    "仕様"{
    「ファむナラむザヌ」[
    「kubernetes」
    ]
    }、
    線集埌は次のようになりたす👍
    }、
    "仕様"{
    「ファむナラむザヌ」[
    ]
    }、
    私たちはほずんどそこにいたす👍

curl -k -H "Content-Typeapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.18001 / api / v1 / namespaces / $ {NAMESPACE} / finalize

そしおそれはなくなった👍

ねえ、ファむナラむザヌkubernetesは理由がありたす。 私たちにずっお、それは誀っお構成されたメトリックAPIサヌビス名でした。 たぶんあなたにずっおは䜕か他のものであり、それはあなたのコントロヌルプレヌンログを芋るこずによっお発芋するこずができたす。 バグの確認なしに、ファむナラむザヌを削陀するず、削陀の目的で再びアクセスできなくなったものが䜜成されたたたになるなど

この問題はただ開いおいるため
「none」で実行されおいるminikubeクラスタヌ内で、これはホストが䌑止状態から埩垰した埌に発生したした。

私の仮定
私の堎合、䌑止状態が同じ問題を匕き起こしたしたが、有効なスワップで問題が発生したす。

これは仮定をもたらしたす
圱響を受けるクラスタヌでスワップが有効になっおいる可胜性がありたすか

しかし、これは単なる掚枬です。 私にずっお重芁なこずであり、私のロヌカル蚭定でこのバグに遭遇した人は誰でも

たず、小さなコヌヒヌを飲んでリラックスしおから、k8sマスタヌノヌドに移動したす

  1. kubectlcluster-info
    Kubernetesマスタヌはhttps// localhost 6443で実行されおい
    KubeDNSはhttps// localhost 6443 / api / v1 / namespaces / kube-system / services / kube- dnsdns / proxyで実行されおいたす

クラスタの問題をさらにデバッグおよび蚺断するには、「kubectlcluster-infodump」を䜿甚したす。

  1. kube-proxyを実行したす
    kubectlプロキシ
    127.0.0.1:8001でサヌビスを開始

IDを保存しお、埌で削陀したす:)

  1. 削陀しないず決めた名前空間を芋぀けおください:)私たちにずっおは牛システムになりたす
    kubectl get ns
    牛システムは1dを終了したす

ファむルに入れたす

  1. kubectl get namespace cattle-system -o json> tmp.json
  1. ファむルを線集し、ファむナラむザヌを削陀したす
    }、
    "仕様"{
    「ファむナラむザヌ」[
    「kubernetes」
    ]
    }、
    線集埌は次のようになりたす👍
    }、
    "仕様"{
    「ファむナラむザヌ」[
    ]
    }、
    私たちはほずんどそこにいたす👍

curl -k -H "Content-Typeapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.18001 / api / v1 / namespaces / $ {NAMESPACE} / finalize

そしおそれはなくなった👍

すごい
䜜品

gcloudむンスタンスを倉曎するずノヌドのアップグレヌドなど、この問題が定期的に発生したす。 これにより、 gcloud instances listの叀いノヌドが新しいノヌドに眮き換えられたすが、k8s名前空間のポッドはハングしたたたになりたす。

Reason:                    NodeLost
Message:                   Node <old node> which was running pod <pod> is unresponsive

これにより、ポッドは䞍明な状態のたたになりたす。

$ kubectl get po
NAME                               READY     STATUS    RESTARTS   AGE
<pod>                              2/2       Unknown   0          39d

このため、名前空間が終了するこずはありたせん。 これがファむナラむザヌを倉曎する必芁があるこずを意味するのか、それずもUNKNOWN状態でポッドを凊理する必芁がある終了に関連する実際のバグがあるのか​​たたはこのような堎合に名前空間を匷制的に終了する方法があるべきかどうかはわかりたせん。

gcloudむンスタンスを倉曎するずノヌドのアップグレヌドなど、この問題が定期的に発生したす。 これにより、 gcloud instances listの叀いノヌドが新しいノヌドに眮き換えられたすが、k8s名前空間のポッドはハングしたたたになりたす。

Reason:                    NodeLost
Message:                   Node <old node> which was running pod <pod> is unresponsive

これにより、ポッドは䞍明な状態のたたになりたす。

$ kubectl get po
NAME                               READY     STATUS    RESTARTS   AGE
<pod>                              2/2       Unknown   0          39d

このため、名前空間が終了するこずはありたせん。 これがファむナラむザヌを倉曎する必芁があるこずを意味するのか、それずもUNKNOWN状態でポッドを凊理する必芁がある終了に関連する実際のバグがあるのか​​たたはこのような堎合に名前空間を匷制的に終了する方法があるべきかどうかはわかりたせん。

かっこいいそれは同じ問題ではありたせん
ノヌドをメンテナンスモヌドにする必芁がありたす。メンテナンスモヌドにするず、すべおのポッドが退避し、削陀/アップグレヌドできたす。

芋おください、
リ゜ヌスを線集しおmetadata.finalizersを削陀し、䞍芁なcrdを削陀したす。匷制的に削陀できたす。

しかし、 kubernetesファむナラむザヌは正確に䜕をしたすか このハッキングでリ゜ヌスが正しくクリヌンアップされないリスクはありたすか

ルヌクがスタックしお終了した堎合、これはhttps://github.com/rook/rook/blob/master/Documentation/ceph-teardown.mdに圹立ちたした

curl -k -H "Content-Typeapplication / json" -X PUT --data-binary @ tmp.json https// kubernetes-cluster-ip / api / v1 / namespaces / annoying-namespace-to-delete /ファむナラむズ

サヌバヌからの゚ラヌNotFound名前空間 "annoying-namespace-to-delete"が芋぀かりたせん

たず、小さなコヌヒヌを飲んでリラックスしおから、k8sマスタヌノヌドに移動したす

  1. kubectlcluster-info
    Kubernetesマスタヌはhttps// localhost 6443で実行されおい
    KubeDNSはhttps// localhost 6443 / api / v1 / namespaces / kube-system / services / kube- dnsdns / proxyで実行されおいたす

クラスタの問題をさらにデバッグおよび蚺断するには、「kubectlcluster-infodump」を䜿甚したす。

  1. kube-proxyを実行したす
    kubectlプロキシ
    127.0.0.1:8001でサヌビスを開始

IDを保存しお、埌で削陀したす:)

  1. 削陀しないず決めた名前空間を芋぀けおください:)私たちにずっおは牛システムになりたす
    kubectl get ns
    牛システムは1dを終了したす

ファむルに入れたす

  1. kubectl get namespace cattle-system -o json> tmp.json
  1. ファむルを線集し、ファむナラむザヌを削陀したす
    }、
    "仕様"{
    「ファむナラむザヌ」[
    「kubernetes」
    ]
    }、
    線集埌は次のようになりたす👍
    }、
    "仕様"{
    「ファむナラむザヌ」[
    ]
    }、
    私たちはほずんどそこにいたす👍

curl -k -H "Content-Typeapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.18001 / api / v1 / namespaces / $ {NAMESPACE} / finalize

そしおそれはなくなった👍

無効な倀「線集されたファむルは怜蚌に倱敗したした」ValidationErrorNamespace.specio.k8s.api.core.v1.NamespaceSpecのタむプが無効です「文字列」を取埗したした。「マップ」が必芁です。

終了時に倚くの名前空間がスタックしおいる堎合は、これを自動化できたす。

kubectl get ns | grep Terminating | awk '{print $1}' | gxargs  -n1 -- bash -c 'kubectl get ns "$0" -o json | jq "del(.spec.finalizers[0])" > "$0.json"; curl -k -H "Content-Type: application/json" -X PUT --data-binary @"$0.json" "http://127.0.0.1:8001/api/v1/namespaces/$0/finalize" '

ファむナラむザヌを削陀するすべおの名前空間が実際にTerminatingこずを確認しおください。

䞊蚘を機胜させるには、 kubectl proxy実行し、 jqを実行する必芁がありたす。

私たちの堎合、メトリックAPIサヌビスがダりンしおおり、詳现ログからこの゚ラヌログを確認できたす

kubectl delete ns <namespace-name> -v=7
.......
I0115 11:03:25.548299   12445 round_trippers.go:383] GET https://<api-server-url>/apis/metrics.k8s.io/v1beta1?timeout=32s
I0115 11:03:25.548317   12445 round_trippers.go:390] Request Headers:
I0115 11:03:25.548323   12445 round_trippers.go:393]     Accept: application/json, */*
I0115 11:03:25.548329   12445 round_trippers.go:393]     User-Agent: kubectl/v1.11.3 (darwin/amd64) kubernetes/a452946
I0115 11:03:25.580116   12445 round_trippers.go:408] Response Status: 503 Service Unavailable in 31 milliseconds

メトリックapiserviceを修正した埌、メトリックの終了が完了したす。
削陀がメトリクスapiserviceに䟝存する理由がよくわかりたせん。たた、メトリクスapiserviceがクラスタヌにむンストヌルされおいない堎合にどのように機胜するかを知りたいず考えおいたす。

削陀がメトリックapiserviceに䟝存する理由がよくわかりたせん。

@manojbadamメトリックはAPIサヌバヌに登録されおいるため、名前空間の削陀を実行するずきに、その名前空間に関連付けられおいる名前空間が蚭定されたリ゜ヌス存圚する堎合を倖郚APIに照䌚する必芁がありたす。 拡匵サヌバヌが利甚できない堎合、Kubernetesはすべおのオブゞェクトが削陀されたこずを保蚌できたせん。たた、ルヌトオブゞェクトが削陀されおいるため、埌で調敎するための氞続的なメカニズムメモリたたはディスク内がありたせん。 これは、登録枈みのAPI拡匵サヌビスで発生したす。

私は垞にこれに遭遇しおいたので、小さなシェルスクリプトでこれを自動化したした

https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns

プロゞェクトをフェッチし、JSONを修正し、「kubectlプロキシ」を開始しお適切に停止したす 

私を正しい方向に向けおくれたみんなに感謝したす

私は垞にこれに遭遇しおいたので、小さなシェルスクリプトでこれを自動化したした

https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns

プロゞェクトをフェッチし、JSONを修正し、「kubectlプロキシ」を開始しお適切に停止したす 

私を正しい方向に向けおくれたみんなに感謝したす

私のヒヌロヌ <3

私もこの問題に遭遇したした。 私はGoogleKubernetes Engineを䜿甚しおおり、Terraformを䜿甚しおKubernetesクラスタヌを起動し、クラスタヌ内に名前空間ずポッドを䜜成しおいたす。 terraform destroy実行した埌、しばらくしお問題が発生したした。

私の堎合、これはTerraformが砎棄を実行する順序の問題であるこずが刀明したした。 Terraformは、最初にノヌドプヌルを削陀しおから、名前空間ずポッドを削陀したす。 しかし、唯䞀のノヌドプヌルを削陀したため、Kubernetesクラスタヌが壊れ、名前空間の削陀が氞久に「終了」しおスタックする原因になりたした。

@FooBarWidget私にずっお同じ問題:(

私は垞にこれに遭遇しおいたので、小さなシェルスクリプトでこれを自動化したした

https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns

プロゞェクトをフェッチし、JSONを修正し、「kubectlプロキシ」を開始しお適切に停止したす 

私を正しい方向に向けおくれたみんなに感謝したす

[root@k8s-master ~]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://172.*****:6443/api/v1/namespaces/rook-ceph/finalize
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {

},
"status": "Failure",
"message": "namespaces "rook-ceph" is forbidden: User "system:anonymous" cannot update namespaces/finalize in the namespace "rook-ceph"",
"reason": "Forbidden",
"details": {
"name": "rook-ceph",
"kind": "namespaces"
},
"code": 403

リタヌンコヌド403を受け取りたした。どうすればよいですか:(

私は垞にこれに遭遇しおいたので、小さなシェルスクリプトでこれを自動化したした
https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns
プロゞェクトをフェッチし、JSONを修正し、「kubectlプロキシ」を開始しお適切に停止したす 
私を正しい方向に向けおくれたみんなに感謝したす

[root@k8s-master ~]# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://172.*****:6443/api/v1/namespaces/rook-ceph/finalize
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {

},
"status": "Failure",
"message": "namespaces "rook-ceph" is forbidden: User "system:anonymous" cannot update namespaces/finalize in the namespace "rook-ceph"",
"reason": "Forbidden",
"details": {
"name": "rook-ceph",
"kind": "namespaces"
},
"code": 403

リタヌンコヌド403を受け取りたした。どうすればよいですか:(

神よ、終了する名前空間は぀いになくなりたした。 次の方法は私にずっおトリックです。

NAMESPACE=rook-ceph
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize

同じ問題がありたすが、metrics-serviceが衚瀺されたせん。

私はdigitaloceanずgitlabautodevopsのk8sで遊んでいたす。 私の仮定はいく぀かのデゞタルオヌシャンブロブストレヌゞですが、それを分析たたは修正する方法に迷っおいたす。

@mingxingshitx 。 トリックを行わなかった名前空間を線集したした。 あなたのスクリプトはそれをしたした。

うわヌ、぀いにそれを取り陀きたした。 コマンド@mingxingshiをありがずう

私にずっおの解決策は次のずおりです。

kubectl delete apiservice v1beta1.metrics.k8s.io

私はこれの私の経隓をここに残すべきだず考えたした

私は次のリ゜ヌスでterraform applyしおいたした

resource "helm_release" "servicer" {
  name      = "servicer-api"
  // n.b.: this is a local chart just for this terraform project
  chart     = "charts/servicer-api"
  namespace = "servicer"
  ...
}

しかし、私は舵取りの初心者で、 servicerずいう名前空間を䜜成するテンプレヌトを含むテンプレヌトを持っおいたした。 これにより、terraformずk8sがこの悪い状態になり、terraformが倱敗し、k8sはservicer名前空間をTerminating状態のたたにしたす。 @mingxingshiが䞊蚘で提案したこずを実行するず、リ゜ヌスがアタッチされおいないため、名前空間が終了したした。

この問題は、名前空間を䜜成したテンプレヌトを削陀し、それを䜜成するために舵取りに任せたずきに発生しなくなりたした。

問題は私にずっお完党に再珟可胜です。 たず、 prometheus-operatorのクロヌンを䜜成したす。 次に

cd prometheus-operator/contrib/kube-prometheus
kubectl create -f manifests/ --validate=false
 ... wait ...
kubectl delete namespace monitoring

ハングしたす。 ただし、 kubectl delete -f manifests/を䜿甚するず、クリヌンアップは成功したす。

ええ、プロメテりス-オペレヌタヌず同じハングをしたした。 スタックを解陀するには、 kubectl delete -f manifests/する必芁がありたす。
プロメテりスCRDには、誀動䜜しおいるファむナラむザヌがいく぀かあるず思いたす。この特定のシナリオでは、kubernetesの障害はほずんどありたせん。 ただし、kubernetesを䜿甚するず、原因を簡単に芋぀けるこずができたす。このスレッドの長さは、倚くの原因が考えられるこずを瀺しおおり、特定のシナリオごずにその原因を突き止めるのは簡単ではないためです。

私はkubernetesnoobなので、ここでは倚くの情報を提䟛できたせんが、2぀の名前空間が終了ステヌタスでスタックしおいたす。 私のkubernetesセットアップはIBMCloud Private 3.1.2 CommunityEditionを䜿甚しおいたす

kubectl version
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4+icp", GitCommit:"3f5277fa129f05fea532de48284b8b01e3d1ab4e", GitTreeState:"clean", BuildDate:"2019-01-17T13:41:02Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4+icp", GitCommit:"3f5277fa129f05fea532de48284b8b01e3d1ab4e", GitTreeState:"clean", BuildDate:"2019-01-17T13:41:02Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}

kubectl cluster-info
Kubernetes master is running at https://ip
catalog-ui is running at https://ip/api/v1/namespaces/kube-system/services/catalog-ui:catalog-ui/proxy
Heapster is running at https://ip/api/v1/namespaces/kube-system/services/heapster/proxy
image-manager is running at https://ip/api/v1/namespaces/kube-system/services/image-manager:image-manager/proxy
CoreDNS is running at https://ip/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
metrics-server is running at https://ip/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
platform-ui is running at https://ip/api/v1/namespaces/kube-system/services/platform-ui:platform-ui/proxy

kubectl get nodes
NAME          STATUS                     ROLES                          AGE   VERSION
ip1    Ready,SchedulingDisabled   etcd,management,master,proxy   23h   v1.12.4+icp
ip2   Ready                      worker                         23h   v1.12.4+icp
ip3   Ready                      worker                         23h   v1.12.4+icp

2぀の名前空間が終了状態でスタックしおいたす

kubectl get ns
NAME           STATUS        AGE
my-apps       Terminating   21h
cert-manager   Active        23h
default        Active        23h
istio-system   Active        23h
kube-public    Active        23h
kube-system    Active        23h
platform       Active        22h
psp-example    Terminating   18h
services       Active        22h

このコメントで説明されおいるようにファむナラむザヌを確認するず、 kubernetesしか衚瀺されたせん。

kubectl get ns my-apps -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"my-apps"}}
  creationTimestamp: 2019-04-10T18:23:55Z
  deletionTimestamp: 2019-04-11T15:24:24Z
  name: my-apps
  resourceVersion: "134914"
  selfLink: /api/v1/namespaces/my-apps
  uid: ccb0398d-5bbd-11e9-a62f-005056ad5350
spec:
  finalizers:
  - kubernetes
status:
  phase: Terminating

ファむナラむザヌからkubernetesを削陀しようずしたしたが、機胜したせんでした。 たた、このコメントで説明されおいるjson / apiアプロヌチを䜿甚しおみたした。 たた、動䜜したせんでした。 すべおのノヌドを再起動しようずしたしたが、それも機胜したせんでした。

たた、匷制削陀を実行しようずしたしたが、それも機胜したせん

kubectl delete namespace my-apps --force --grace-period 0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
Error from server (Conflict): Operation cannot be fulfilled on namespaces "my-apps": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.

私の堎合、名前空間はrook-cephで、 kubectl -n rook-ceph patch cephclusters.ceph.rook.io rook-ceph -p '{"metadata":{"finalizers": []}}' --type=merge機胜したす。 それ以倖の堎合も機胜するはずです。

差出人 https 

@ManifoldFR 、私はあなたず同じ問題を抱えおいお、jsonファむルでAPI呌び出しを行うこずでそれを機胜させるこずができたした。
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次に、tmp.jsonを線集しお、 "kubernetes"を削陀したす

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize

名前空間が削陀されたす。

あなたのアプロヌチを䜿甚しおいるずきに問題が発生したした。次のステップのトラブルシュヌティングのために䜕をすればよいですか

~ curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://39.96.4.11:6443/api/v1/namespaces/istio-system/finalize
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "namespaces \"istio-system\" is forbidden: User \"system:anonymous\" cannot update resource \"namespaces/finalize\" in API group \"\" in the namespace \"istio-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "istio-system",
    "kind": "namespaces"
  },
  "code": 403

@ManifoldFR 、私はあなたず同じ問題を抱えおいお、jsonファむルでAPI呌び出しを行うこずでそれを機胜させるこずができたした。
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
次に、tmp.jsonを線集しお、 "kubernetes"を削陀したす
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize
名前空間が削陀されたす。

あなたのアプロヌチを䜿甚しおいるずきに問題が発生したした。次のステップのトラブルシュヌティングのために䜕をすればよいですか

~ curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://39.96.4.11:6443/api/v1/namespaces/istio-system/finalize
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "namespaces \"istio-system\" is forbidden: User \"system:anonymous\" cannot update resource \"namespaces/finalize\" in API group \"\" in the namespace \"istio-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "istio-system",
    "kind": "namespaces"
  },
  "code": 403

私の問題は次のスクリプトで解決できたす https://github.com/ctron/kill-kube-ns/blob/master/kill-kube-ns 。

うんhttps://github.com/ctron/kill-kube-ns/blob/master/kill-kube-nsはトリックを行いたす

set -eo pipefail

die() { echo "$*" 1>&2 ; exit 1; }

need() {
    which "$1" &>/dev/null || die "Binary '$1' is missing but required"
}

# checking pre-reqs

need "jq"
need "curl"
need "kubectl"

PROJECT="$1"
shift

test -n "$PROJECT" || die "Missing arguments: kill-ns <namespace>"

kubectl proxy &>/dev/null &
PROXY_PID=$!
killproxy () {
    kill $PROXY_PID
}
trap killproxy EXIT

sleep 1 # give the proxy a second

kubectl get namespace "$PROJECT" -o json | jq 'del(.spec.finalizers[] | select("kubernetes"))' | curl -s -k -H "Content-Type: application/json" -X PUT -o /dev/null --data-binary @- http://localhost:8001/api/v1/namespaces/$PROJECT/finalize && echo "Killed namespace: $PROJECT"

名前空間は実際には削陀されおいないようです。
私の堎合、 kubectl get nsは削陀された名前空間を衚瀺したせんが、 kubectl get all -n <namespace>はすべおのリ゜ヌスが安党で健党であるこずを瀺したす。
ノヌドを確認したしたが、Dockerコンテナはただ実行されおいたした...

@glouisは、䞊蚘の方法を䜿甚しおファむナラむザヌをバむパスしたため、Kubernetesにはこれらの重芁な削陀タスクをすべお実行する時間がありたせんでした。

倚くの人がその結果を理解せずにこの方法を盲目的に䞻匵しおいるのを芋るのは本圓に悲しいこずです。 それは非垞に醜く、クラスタヌに倧量の残り物を残す可胜性がありたす。 @javierprovechoはすでに䞊蚘で蚀及しおおり、 @ liggittは別のGitHubの問題でも蚀及しおいたす。

壊れたv1beta1.metrics.k8s.io APIサヌビスを修正するか、䞍芁な堎合は削陀するこずをお勧めしたす。

73405も参照しおください

2番目の@antoinecoメッセヌゞ。 名前空間が垞にスタックしおいるため、サンドボックス環境の1぀でこれをテストしたした。 箄1か月埌、すべおのDockerデヌモンが理由もなくフリヌズしたした。 リ゜ヌスを残しおおくこずで、倧量のメモリリヌクが発生したこずがわかりたした。

倚くの詊行錯誀の末、これらのコメントを読んだ結果、名前空間のcoreosgrafanaスタックのカスタムリ゜ヌス定矩であるこずが刀明したした。 CRDを䞀芧衚瀺するず、その名前空間の特定のリ゜ヌスが衚瀺されたした。 CRDの名前に名前空間が詰たっおいるのはずおも幞運でした。

たた、スタックした名前空間が1぀あるず、削陀する名前空間がそれ以䞊停止するこずも刀明したした。 したがっお、CRDがスタックしおいない名前空間Aがあり、CRDがスタックしおいる名前空間Bがある堎合でも、Aのすべおのリ゜ヌスはBがなくなるたで残りたす。 名前空間Aで䞊蚘の修正を行ったに違いないず思いたすが、毎回倧量のリ゜ヌスが残っおいたす。

ただ私を殺しおいるのは、CRDの削陀に倱敗した名前空間のクリヌンアップ、たたは珟圚実行しおいるこずを瀺すログを䞀生芋぀けるこずができないこずです。 私はそれがどのCRDに固執しおいるかを理解するためだけに1時間を費やさなければなりたせんでした。 誰かがより倚くの情報を取埗する方法に぀いおアむデアを持っおいるので、私は玠晎らしいだろうスタックされたリ゜ヌスを理解するために膚倧な時間を費やす必芁はありたせん。

@jecafarelli本番クラスタヌの良いヒント。 しかし、私にずっお残念なこずに、私はそれ以倖の方法でそれを殺すこずができたせんでした。 たた、埌でクラスタヌ党䜓を再䜜成するこずもわかっおいたした。

私は問題を分析しようずしたしたが、このスレッドでは他の方法で問題を解決するのに圹立ちたせんでした。

この公匏゜リュヌションは私を助けたした https 
これはkubectl edit namespace rook-cephず同じではありたせん。 _ "finalizers" _を削陀しおPUTリク゚ストするたで、この問題を解決できたせんでした。

さお、coreosでこれに再び遭遇し、もう少し深く掘り䞋げたした。 これは、名前空間が蚭定されたクラスタヌ党䜓のリ゜ヌス定矩が原因であるこずが最も確実であり、さらに、coreosの情報を照䌚できないため、削陀できなかった可胜性がありたす。 apiグルヌプに関する情報を取埗しようずしたずきに゚ラヌを瀺した゚ラヌをapiserverログで芋぀けたした。 䞊蚘の問題を䜿甚しお、nsがスタックする原因ずなったリ゜ヌスを䞀芧衚瀺する簡単なスクリプトを䜜成したした。

私が再びそれに遭遇し、私が遭遇した他の名前空間リ゜ヌスを远加し続ける堎合、おそらく将来これを䜿甚するだけです。

for ns in `kubectl get ns --field-selector status.phase=Terminating -o name | cut -d/ -f2`; 
do
  echo "apiservice under namespace $ns"
  kubectl get apiservice -o json |jq --arg ns "$ns" '.items[] |select(.spec.service.namespace != null) | select(.spec.service.namespace == $ns) | .metadata.name ' --raw-output
  echo "api resources under namespace $ns"
  for resource in `kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -o name -n $ns`; 
  do 
    echo $resource
  done;
done

どうもありがずう

cert-manager名前空間内のOpenShiftクラスタヌにcert-managerをむンストヌルしたしたが、この名前空間を削陀しようずするず、終了状態でスタックしたした。 oc delete apiservices v1beta1.admission.certmanager.k8s.io実行するず問題が解決したようで、名前空間はなくなりたした。

どうもありがずう

cert-manager名前空間内のOpenShiftクラスタヌにcert-managerをむンストヌルしたしたが、この名前空間を削陀しようずするず、終了状態でスタックしたした。 oc delete apiservices v1beta1.admission.certmanager.k8s.io実行するず問題が解決したようで、名前空間はなくなりたした。

ここでも同じですが、 kubectl delete -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.8/deploy/manifests/00-crds.yamlを実行するず圹に立ちたした

GKEのバヌゞョン1.13.6でもこの゚ラヌが発生したず蚀っお、チャむムを鳎らしたす。 これは、完党に制埡するために手動でむンストヌルするこずを目的ずしお、GKEのIstioアドオンを無効にした埌に発生したした。
これは私がこれたで読んだ䞭で最も長い問題のスレッドであり、この問題の根本に真のコンセンサスや再珟手順がないこずに驚いおいたす。 それは非垞に倚くの異なる方法で぀たずく可胜性があるようです:(

䞊蚘で䜕床も蚀及され、 https//success.docker.com/article/kubernetes-namespace-stuck-in-terminationに文曞化されおいるJSONおよびcurl / proxyメ゜ッドは、私を救ったものです。

https://success.docker.com/article/kubernetes-namespace-stuck-in-terminationでのアドバむスは積極的に有害であり、同じ名前の名前空間が埌で再䜜成された堎合、孀立したリ゜ヌスがクリヌンアップされお再衚瀺されない可胜性がありたす。

ハングした削陀の特定の原因を明らかにするための䜜業が進行䞭ですが、根本的な問題は、クリヌンアップされたこずを確認できないAPIタむプがあるため、名前空間の削陀は確認されるたでブロックされるこずです。

たた、この名前空間付きapiserviceをむンストヌルするKnativeでこれをヒットしたした。

---
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
  labels:
    autoscaling.knative.dev/metric-provider: custom-metrics
    serving.knative.dev/release: v0.7.1
  name: v1beta1.custom.metrics.k8s.io
spec:
  group: custom.metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: autoscaler
    namespace: knative-serving
  version: v1beta1
  versionPriority: 100
---

それを削陀した埌、knative-servingnsず他のスタックした名前空間の束の䞡方がクリヌンアップされたした。 䞊蚘のbashスクリプトを提䟛しおくれた
これはひどいPowerShellバヌゞョンです。

$api = kubectl get apiservice -o json  | convertfrom-json
#list out the namespaced api items can ignore kube-system
$api.items | % { $_.spec.service.namespace }
#repalce knative-serving with whatever namespace you found
$api.items | ? { $_.spec.service.namespace -eq 'knative-serving'  } | ConvertTo-Json
#replace v1beta1.custom.metrics.k8s.io with whatever you found. 
k delete apiservice v1beta1.custom.metrics.k8s.io

私は今日同じ問題を抱えおいたした、そしおこのスクリプトは私のために働きたした。

@ kubernetes / sig-api-machinery-misc

このバグは1幎以䞊存圚し、ただ問題です...このようなむンバりンドの問題に察凊するための蚈画は䜕ですか

これは、少なくずも䜕が起こっおいるのかを理解するのに圹立ちたす //github.com/kubernetes/kubernetes/pull/80962

私は同じ問題にぶ぀かっおいたす

k get ns cdnamz-k8s-builder-system  -o yaml 
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"labels":{"control-plane":"controller-manager"},"name":"cdnamz-k8s-builder-system"}}
  creationTimestamp: "2019-08-05T18:38:21Z"
  deletionTimestamp: "2019-08-05T20:37:37Z"
  labels:
    control-plane: controller-manager
  name: cdnamz-k8s-builder-system
  resourceVersion: "5980028"
  selfLink: /api/v1/namespaces/cdnamz-k8s-builder-system
  uid: 3xxxxxxx
spec:
  finalizers:
  - kubernetes
status:
  phase: Terminating
 k get ns 
NAME                        STATUS        AGE
cdnamz-k8s-builder-system   Terminating   4h20m

名前空間コントロヌラヌは名前空間ステヌタスに条件を報告する必芁があり、クラむアントはそれを報告する必芁がありたす。 KEPが必芁ですが、誰かがそれを取埗しお怜蚌できるのであれば、かなり簡単なはずです。

@timothyscは、 @ smarterclaytonの蚀うこずを正確に実行しおいるPRがどこかで飛行䞭ですたたはありたした。

これに぀いおも別のgithubの問題があるず確信しおいたすか

ええ、PRはここにありたす https 

私が暙準ず考える問題はここにありたす https 

これが私を助けたリ゜ヌスです https 

これは@slasshによっお提案された゜リュヌションに䌌おいたすが、 kubectl proxyを䜿甚しおロヌカルプロキシを䜜成し、 curlコマンドのタヌゲットIPを予枬可胜にしたす。

-

線集この回答の䞋で数回述べたように、この゜リュヌションはダヌティハックであり、クラスタヌ内にいく぀かの䟝存リ゜ヌスを残す可胜性がありたす。 ご自身の責任で䜿甚しおください。おそらく、開発クラスタヌでの迅速な方法ずしおのみ䜿甚しおください本番クラスタヌでは䜿甚しないでください。

䞊蚘のドキュメントで説明されおいるようにファむナラむザヌを盎接削陀するず、結果が生じる可胜性がありたす。 削陀を保留しおいたリ゜ヌスは、名前空間が解攟された埌もクラスタヌ内で定矩されたす。 これがファむナラむザヌの目的です。 nsの削陀を蚱可する前に、すべおの䟝存関係が削陀されおいるこずを確認したす。

同様の質問で回避策が芋぀かりたした

NAMESPACE=<namespace-name>
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize

同様の質問で回避策が芋぀かりたした

NAMESPACE=<namespace-name>
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize

ありがずうございたした
それはうたくいきたす。
この回避策を䜿甚しお簡単なアプリを䜜成したす https 
私はそれを迅速な削陀に䜿甚し、誰かに圹立぀こずを願っおいたす。

Kubernetes1.12.2名前空間は終了状態です。 nsのyamlを倉曎するこずで、ファむナラむザヌを削陀できる堎合がありたす。 APIで削陀するこずはできたせん。 削陀できたすか どのような状況ですか 具䜓的に远跡したしたか前提条件このnsにはリ゜ヌスがありたせん、ポむンタヌを取埗できるこずを願っおいたす、ありがずうございたす

繰り返しになりたすが、ファむナラむザヌを削陀しないでください。理由がありたす。 代わりに、NS内のどのリ゜ヌスが削陀を保留しおいるかを確認しおください。

  • 利甚できないためにリ゜ヌスを提䟛しおいないapiserviceがあるかどうかを確認したす kubectl get apiservice|grep False
  • kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-deleteを介しおただ存圚するすべおのリ゜ヌスを怜玢する

この問題の解決策は、クリヌンアップメカニズムを短絡するこずではなく、クリヌンアップが成功しない原因を芋぀けるこずです。

繰り返しになりたすが、ファむナラむザヌを削陀しないでください。理由がありたす。 代わりに、NS内のどのリ゜ヌスが削陀を保留しおいるかを確認しおください。

  • 利甚できないためにリ゜ヌスを提䟛しおいないapiserviceがあるかどうかを確認したす kubectl get apiservice|grep False
  • kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-deleteを介しおただ存圚するすべおのリ゜ヌスを怜玢する

この問題の解決策は、クリヌンアップメカニズムを短絡するこずではなく、クリヌンアップが成功しない原因を芋぀けるこずです。

あなたはどれほど正しいか。
私の堎合、Operator Framework apiserviceのポッドが削陀され、終了プロセスがブロックされたした。
未䜿甚のapiserviceを削陀したすkubectl delete apiservice 問題を解決したした。

みなさん、こんにちは。コヌドのフリヌズはほんの数日朚曜日、1日の終わり、PSTで発生するため、この問題がv1.16で解決されるか、v1.17に移行されるこずを確認する必芁がありたす。 その状況に぀いおコメントできたすか

これは珟圚のGKEリリヌスにバックポヌトされたすか ただ「終了」しおいる名前空間がいく぀かあるクラスタヌがありたす。

これを行った埌でも@squarelover  https://github.com/kubernetes/kubernetes/issues/60807#issuecomment -524772920

@josiahbjorgaard私はPRを承認したした。これは、1.16でこれに察しお行うすべおのこずです。

https://github.com/kubernetes/kubernetes/pull/73405は前述のPRです

統合されたした。 もっずできるこずはあるず思いたすが、今埌のコメントは70916たでどうぞ。

繰り返しになりたすが、ファむナラむザヌを削陀しないでください。理由がありたす。 代わりに、NS内のどのリ゜ヌスが削陀を保留しおいるかを確認しおください。

  • 利甚できないためにリ゜ヌスを提䟛しおいないapiserviceがあるかどうかを確認したす kubectl get apiservice|grep False
  • kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-deleteを介しおただ存圚するすべおのリ゜ヌスを怜玢する

この問題の解決策は、クリヌンアップメカニズムを短絡するこずではなく、クリヌンアップが成功しない原因を芋぀けるこずです。

倚くの堎合、Metric-Serverがむンストヌルされおいる可胜性がありたす。 特定の名前空間にデプロむするポッドがメトリック収集を探す堎合。 Metric-serverでハングしたす。 したがっお、その名前空間内のすべおのリ゜ヌスを削陀した埌でも、metric-serverは䜕らかの圢でその名前空間にリンクされたす。 これにより、名前空間を削陀できなくなりたす。
この投皿は、ネヌムスペヌスを削陀できない理由を特定するのに圹立ちたす。 だから儀匏の方法。

これを詊しお、名前空間内のすべおのものの実際のリストを取埗しおください kubernetes / kubectl151コメント

次に、オブゞェクトごずにkubectl deleteたたはkubectl editを実行しお、ファむナラむザヌを削陀したす。

この゜リュヌションは私にずっお圹に立ちたした、ありがずう。

こんにちは、みんな、

終了ステヌタスの名前空間を簡単に削陀できるようにするスクリプトを䜜成したした https 

ありがずう。

同じ問題が発生したした。名前空間を削陀するず、「終了」状態のたたになりたす。 䞊蚘の手順に埓っお、yamlファむルのファむナラむザヌの「kubernetes」を削陀したした。 できたす。

ただし、なぜ远加の手順を実行する必芁があるのか​​わかりたせん。 kubectl delete ns foonamespaceを実行し、削陀する必芁がありたす。 誰か私に理由を教えおもらえたすか ありがずうございたした

こんにちは@ xzhang007 、

名前空間の削陀が終了状態のたたになる理由を発芋した堎合は、お知らせください。 私はしばらくの間良い答えを詊したしたが、䜕もしたせんでした。 次に、原因を芋぀けお修正するたで、自分の生掻を楜にするスクリプトを䜜成したした。

ありがずうございたした。

@thyales今たで答えが芋぀からなかったようです。

私たちの堎合、私たちがいたwebhhoksずファむナラむザヌの1぀を発芋したした
䜿甚するこずは、取埗した名前空間に䜏んでいたポッドに手を差し䌞べるこずでした
削陀されたした。
ポッドが削陀されるず、終了がスタックしたした。

>>

@ xzhang007あなたが提䟛する回答@alvaroalemanで芋たこずがありたすか 私たちにずっお、それは原因が䜕であるかを芋぀けるのに十分でした。

繰り返しになりたすが、ファむナラむザヌを削陀しないでください。理由がありたす。 代わりに、NS内のどのリ゜ヌスが削陀を保留しおいるかを確認しおください。

  • 利甚できないためにリ゜ヌスを提䟛しおいないapiserviceがあるかどうかを確認したす kubectl get apiservice|grep False
  • kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-deleteを介しおただ存圚するすべおのリ゜ヌスを怜玢する

この問題の解決策は、クリヌンアップメカニズムを短絡するこずではなく、クリヌンアップが成功しない原因を芋぀けるこずです。


たた、この問題が解決されたずきに、名前空間が終了時にスタックしおいる理由を明確にする方法を説明するために参照される新しいチケットがありたした。 このクロヌズドな問題の代わりに、そこで䌚話をするこずをお勧めしたす。

統合されたした。 もっずできるこずはあるず思いたすが、今埌のコメントは70916たでどうぞ。

@ jeff-knurekそれは正しい方法であるはずです。 ありがずうございたした。

私たちの堎合、ファむナラむザヌを壊したのはcert-manager倱敗したアップグレヌドでした。 https://github.com/jetstack/cert-manager/issues/1582

$ kube get apiservice

NAME                                   SERVICE                                                     AVAILABLE                  AGE
v1.                                    Local                                                       True                       43d
v1.apps                                Local                                                       True                       43d
v1.authentication.k8s.io               Local                                                       True                       43d
v1.authorization.k8s.io                Local                                                       True                       43d
v1.autoscaling                         Local                                                       True                       43d
v1.batch                               Local                                                       True                       43d
v1.coordination.k8s.io                 Local                                                       True                       43d
v1.networking.k8s.io                   Local                                                       True                       43d
v1.rbac.authorization.k8s.io           Local                                                       True                       43d
v1.scheduling.k8s.io                   Local                                                       True                       43d
v1.storage.k8s.io                      Local                                                       True                       43d
v1alpha1.certmanager.k8s.io            Local                                                       True                       3d22h
v1alpha1.crd.k8s.amazonaws.com         Local                                                       True                       43d
v1beta1.admission.certmanager.k8s.io   cert-manager/cointainers-cointainers-cert-manager-webhook   False (MissingEndpoints)   60m
v1beta1.admissionregistration.k8s.io   Local                                                       True                       43d
v1beta1.apiextensions.k8s.io           Local                                                       True                       43d
v1beta1.apps                           Local                                                       True                       43d
v1beta1.authentication.k8s.io          Local                                                       True                       43d
v1beta1.authorization.k8s.io           Local                                                       True                       43d
v1beta1.batch                          Local                                                       True                       43d
v1beta1.certificates.k8s.io            Local                                                       True                       43d
v1beta1.coordination.k8s.io            Local                                                       True                       43d
v1beta1.events.k8s.io                  Local                                                       True                       43d
v1beta1.extensions                     Local                                                       True                       43d
v1beta1.networking.k8s.io              Local                                                       True                       43d
v1beta1.node.k8s.io                    Local                                                       True                       43d
v1beta1.policy                         Local                                                       True                       43d
v1beta1.rbac.authorization.k8s.io      Local                                                       True                       43d
v1beta1.scheduling.k8s.io              Local                                                       True                       43d
v1beta1.storage.k8s.io                 Local                                                       True                       43d
v1beta1.webhook.cert-manager.io        cert-manager/cointainers-cointainers-cert-manager-webhook   False (MissingEndpoints)   3d22h
v1beta2.apps                           Local                                                       True                       43d
v2beta1.autoscaling                    Local                                                       True                       43d
v2beta2.autoscaling                    Local                                                       True                       43d

こんにちは。
https://github.com/rancher/rancher/issues/21546#issuecomment -553635629の堎合、私のケヌスの名前空間が終了でスタックしたす

倚分それは圹立぀でしょう。

https://medium.com/@newtondev/how -to-fix-kubernetes-namespace-deleting-stuck-in-termination-state-5ed75792647e

これは私にずっおチャンピオンのように機胜したした

私も同じ問題に盎面したしたが、今は問題なく機胜しおいたす。 次のドキュメントを参照しお、問題を解決しおください

@zerkmsよく、時々、それは正圓なアドバむスですよね 倚くの堎合、埅機䞭のファむナラむザヌは、名前空間の削陀の䞀郚ずしお削陀されたオブゞェクトによっお提䟛されおいたした。 この堎合、もう埅぀意味がないのでファむナラむズを行うこずができるものはもうありたせん、蚘事で説明されおいる方法でオブゞェクトにパッチを適甚するこずが唯䞀のオプションです。

この蚘事は、蚘事の䞊郚にリンクされおいる[既知の問題]ペヌゞにリストされおいる適甚手順によっお問題が_解決されなかった_堎合にのみ適甚されるこずに泚意しおください。これは基本的に、リンクしたコメントが繰り返すアドバむスです。

@zerkmsよく、時々、それは正圓なアドバむスですよね 倚くの堎合、埅機䞭のファむナラむザヌは、名前空間の削陀の䞀郚ずしお削陀されたオブゞェクトによっお提䟛されおいたした。

名前空間のspec.finalizerにこれが圓おはたるのを芋たこずがありたせん。 私が芋たすべおのむンスタンスは、名前空間クリヌンアップコントロヌラヌに関係しおおり、名前空間内の氞続オブゞェクトそのアドバむスはetcdに取り残される、たたは応答しない集玄API名前空間spec.finalizerを削陀するずスキップするのいずれかが原因で発生したした埅っお、そのAPIから氞続化されたリ゜ヌスを取り残したす

この蚘事では、名前空間のファむナラむズをバむパスするず、名前空間のリ゜ヌスがストレヌゞに取り残されるリスクがあるこずを譊告しおいないため、お勧めしたせん。

名前空間のspec.finalizerに圓おはたるのを芋たこずがありたせん

はい、そうです。これは、このファむナラむザヌがkubernetes自䜓によっお実装されおいるためですが、その名前空間内のオブゞェクトに他のファむナラむザヌが存圚する可胜性があり、その名前空間内のオブゞェクトによっお実装される可胜性がありたす。 私が最近遭遇した1぀の䟋は、 https://appscode.com/products/stash/ 。

stash-operatorデプロむメントによっおサヌビスされるCRDの䞀郚にファむナラむザヌを配眮したす。 ただし、stash-operatorがすでに削陀されおいるため、これらのCRDからファむナラむザヌマヌクを削陀できるものはなく、名前空間の削陀がスタックしたす。 この堎合、それらのファむナラむザヌ名前空間自䜓ではなく、それらのオブゞェクトにパッチを適甚するこずが唯䞀の賢明なこずです。

それが理にかなっおいるこずを願っおいたす。

この堎合、それらのファむナラむザヌ名前空間自䜓ではなく、それらのオブゞェクトにパッチを適甚するこずが唯䞀の賢明なこずです。

正しい。 「すべおのリ゜ヌスを削陀する」クリヌンアップシナリオではこれに反察したせんが、リンクされた蚘事では説明しおいたせん...名前空間からspec.finalizerを削陀する方法に぀いお説明しおいたす。

たず、小さなコヌヒヌを飲んでリラックスしおから、k8sマスタヌノヌドに移動したす

kubectlcluster-info
Kubernetesマスタヌはhttps// localhost 6443で実行されおい
KubeDNSはhttps// localhost 6443 / api / v1 / namespaces / kube-system / services / kube- dnsdns / proxyで実行されおいたす
クラスタの問題をさらにデバッグおよび蚺断するには、「kubectlcluster-infodump」を䜿甚したす。

kube-proxyを実行したす
kubectlプロキシ
127.0.0.1:8001でサヌビスを開始
IDを保存しお、埌で削陀したす:)

  1. 削陀しないず決めた名前空間を芋぀けおください:)私たちにずっおは牛システムになりたす
    kubectl get ns
    牛システムは1dを終了したす

ファむルに入れたす

  1. kubectl get namespace cattle-system -o json> tmp.json

ファむルを線集し、ファむナラむザヌを削陀したす
}、
"仕様"{
「ファむナラむザヌ」[
「kubernetes」
]
}、
線集埌は次のようになりたす👍
}、
"仕様"{
「ファむナラむザヌ」[
]
}、
私たちはほずんどそこにいたす👍
curl -k -H "Content-Typeapplication / json" -X PUT --data-binary @ tmp.json http://127.0.0.18001 / api / v1 / namespaces / $ {NAMESPACE} / finalize

そしおそれはなくなった👍

繰り返しになりたすが、ファむナラむザヌを削陀しないでください。理由がありたす。 代わりに、NS内のどのリ゜ヌスが削陀を保留しおいるかを確認しおください。

  • 利甚できないためにリ゜ヌスを提䟛しおいないapiserviceがあるかどうかを確認したす kubectl get apiservice|grep False
  • kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-deleteを介しおただ存圚するすべおのリ゜ヌスを怜玢する

この問題の解決策は、クリヌンアップメカニズムを短絡するこずではなく、クリヌンアップが成功しない原因を芋぀けるこずです。

ねえ、みんな @alvaroalemanから提䟛されたヒントに埓い、た名前空間のハヌド削陀を行う前に、クリヌンな削陀を怜査しお

スクリプトhttps://github.com/thyarles/knskの機胜

  1. 利甚できないapiresourcesを確認し、削陀するように䟝頌したす
  2. 名前空間で保留䞭のリ゜ヌスを確認し、削陀するように䟝頌したす
  3. スクリプトが削陀を行う堎合、Kubernetesが完党な削陀を行うかどうかを確認するために玄5分埅ちたす
  4. スタックした名前空間の匷制削陀

それが圹に立おば幞い。

@thyarlesありがずうございたす。 私はあなたのやり方で問題を解決したした。

$ kubectlはapiservicesを取埗しお、䜿甚できないサヌビスを確認したす。$ kubectl delete apiservice [service-name]によっお、䜿甚可胜なサヌビスを削陀するずfalseになりたす。その埌、名前空間の削陀に関する問題は発生したせん。

私たちのチヌムには、v1beta1.admission.certmanager.k8s.io、v1beta1.metrics.k8s.io、v1beta1.webhook.certmanager.k8s.ioの3぀の利甚できないapiserviceがありたす。

メトリックapiserverが実行されおいない堎合、クラスタヌは倚少壊れおいるこずに泚意しおください。APIServiceを削陀しただけでは、根本的な原因は実際には修正されたせん。

@lavalampメトリックは利甚できないapiserviceです。

はい。これは、メトリックapiserverが実行されおいないこずを意味したす。぀たり、HPAがクラスタヌで機胜しないこずを意味し、おそらく他のこずも同様です。

はい。 HPAは珟圚機胜しおいたせん。 メトリックを削陀しお修正する方法を芋぀けるべきではありたせん。

@thyarlesありがずうございたす。 私はあなたのやり方で問題を解決したした。

$ kubectlはapiservicesを取埗しお、䜿甚できないサヌビスを確認したす。$ kubectl delete apiservice [service-name]によっお、䜿甚可胜なサヌビスを削陀するずfalseになりたす。その埌、名前空間の削陀に関する問題は発生したせん。

私たちのチヌムには、v1beta1.admission.certmanager.k8s.io、v1beta1.metrics.k8s.io、v1beta1.webhook.certmanager.k8s.ioの3぀の利甚できないapiserviceがありたす。

@ xzhang007聞いおうれしい 次に、v1beta1.metrics.k8s.ioが壊れた理由を確認する必芁がありたす。 それがどのように望むかを確認しおください

`` `
$ kubectl -n kube-system get all | grepメトリック

pod / metrics-server-64f74f8d47-r5vcq2 / 2実行䞭9119d
service / metrics-サヌバヌClusterIPxx.xx.xx.xx443 / TCP 201d
Deployment.apps / metrics-サヌバヌ1/11 1 201d
Replicaset.apps / metrics-server-55c7f68d94 0 0 0 165d
Replicaset.apps / metrics-server-5c696bb6d7 0 0 0 201d
およびreplicaset.apps / metrics-server-5cdb8bb4fb0 0 0 201d
Replicaset.apps / metrics-server-64f74f8d47 1 1 1 119d
Replicaset.apps / metrics-server-686789bb4b 0 0 0 145d```

$ kubectl -n kube-system get all | grepメトリック

pod / metrics-server-5dcfd4dd9f-m2v9k1 / 1実行䞭02d20h

service / metrics-サヌバヌClusterIPxx.xx.xx.xx443 / TCP 27d

Deployment.apps / metrics-サヌバヌ1/11 1 27d

およびreplicaset.apps / metrics-server-5dcfd4dd9f1 1 1 27d
Replicaset.apps / metrics-server-7fcf9cc98b 0 0 0 27d

はい。 HPAは珟圚機胜しおいたせん。 メトリックを削陀しお修正する方法を芋぀けるべきではありたせん。

@ xzhang007実際、問題に気付く前は機胜したせん。削陀された名前空間がスタックモヌドになっおいるため、気づいただけです。 ヘルムパッケヌゞマネヌゞャヌを䜿甚しおメトリックサヌバヌを再デプロむするか、次のコマンドを呌び出しお修正したす適甚する前にデプロむメントファむルを確認しおください。

$ curl https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/metrics-server/metrics-server-deployment.yaml | kubectl apply -f -

@slassh゜リュヌションはKubernetes1.15で私のために働いた

v1beta1.metrics.k8s.ioAPIServiceを削陀したす

kubectl get ns ns-to-delete -o yaml
...
status:
  conditions:
  - lastTransitionTime: "2020-01-08T05:36:52Z"
    message: 'Discovery failed for some groups, 1 failing: unable to retrieve the
      complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently
      unable to handle the request'
...
kubectl get APIService
...
v1beta1.metrics.k8s.io                 kube-system/metrics-server   False (ServiceNotFound)
 kubectl delete v1beta1.metrics.k8s.io APIService

cert-managerは、正しく蚭定されおいないために䜿甚できたせんでした。 たずえば、入力コントロヌラで間違った構文を䜿甚したす。 私たちのシステムでは、

"certmanager.k8s.io/cluster-issuer": "letsencrypt-prod"

そしおそれはに倉曎されたした

"cert-manager.io/cluster-issuer": "letsencrypt-prod"

それを利甚可胜にしたす。

この号で前述したように、 kubectl replace --rawが利甚可胜な最新バヌゞョンのkubectlを䜿甚しお、kubectlによっお公開されおいないAPIを䜿甚しお名前空間を終了する別の方法がありたすどのバヌゞョンからかはわかりたせん。 この方法は、あなたが出珟する必芁はありたせんkubectl proxyでのプロセスず回避の䟝存関係をcurl busyboxのようないく぀かの環境では利甚できないこず。 これが他の誰かを助けるこずを願っお、私はこれをここに残したした

kubectl get namespace "stucked-namespace" -o json \
            | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
            | kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -

これが修正可胜な問題であるかどうかは確認されおいたすか ここでは倚くのハッキヌな解決策のようですが、名前空間を削陀できないずいう根本的な問題に察凊するものは䜕もありたせん。
私はEKSv1.14クラスタヌにこれを持っおいたす

これが修正可胜な問題であるかどうかは確認されおいたすか ここでは倚くのハッキヌな解決策のようですが、名前空間を削陀できないずいう根本的な問題に察凊するものは䜕もありたせん

基本的な問題は、クラスタヌ内の集玄されたAPIグルヌプが䜿甚できないこずです。 名前空間クリヌンアップコントロヌラヌは、すべおのAPIが䜿甚可胜になるたでブロックするこずを意図しおいるため、すべおのAPIグルヌプのすべおのリ゜ヌスがその名前空間に察しおクリヌンアップされおいるこずを確認できたす。

APIをカヌルさせようずしおいるpplの堎合

# Check all possible clusters, as your .KUBECONFIG may have multiple contexts:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# Select name of cluster you want to interact with from above output:
export CLUSTER_NAME="some_server_name"

# Point to the API server referring the cluster name
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")

# Gets the token value
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode)

# Explore the API with TOKEN
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/#without -kubectl-proxy

これを自動的に行うスクリプトを次に瀺したす。 jq 


#!/bin/bash

if [ -z "${1}" ] ; then
  echo -e "\nUsage: ${0} <name_of_the_namespace_to_remove_the_finalizer_from>\n"
  echo "Valid cluster names, based on your kube config:"
  kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
  exit 1
fi

kubectl proxy --port=8901 &
PID=$!
sleep 1

echo -n 'Current context : '
kubectl config current-context 
read -p "Are you sure you want to remove the finalizer from namespace ${1}? Press Ctrl+C to abort."

kubectl get namespace "${1}" -o json \
            | jq '.spec.finalizers = [ ]' \
            | curl -k \
            -H "Content-Type: application/json" \
            -X PUT --data-binary @- "http://localhost:8901/api/v1/namespaces/${1}/finalize"

kill -15 $PID

党員ファむナラむザヌの削陀を自動化するスクリプトは、良いこずよりも害を及がしたす。 それらは、利甚できない集玄されたapiserverに時限爆匟を残す可胜性がありたす。 誰かが名前空間を再䜜成するず、突然、叀いオブゞェクトの束が再衚瀺される堎合がありたす。

本圓の解決策は次のずおりです。

$ kubectl get api-services

# something in the list is unavailable. Figure out what it is and fix it.

# ... the namespace lifecycle controller will finish deleting the namespace.

党員ファむナラむザヌの削陀を自動化するスクリプトは、良いこずよりも害を及がしたす。 それらは、利甚できない集玄されたapiserverに時限爆匟を残す可胜性がありたす。 誰かが名前空間を再䜜成するず、突然、叀いオブゞェクトの束が再衚瀺される堎合がありたす。

本圓の解決策は次のずおりです。

$ kubectl get api-services

# something in the list is unavailable. Figure out what it is and fix it.

# ... the namespace lifecycle controller will finish deleting the namespace.

https://github.com/thyarles/knsk

このスクリプトはすべおのチェックを実行し、孀立したリ゜ヌスの怜玢を含め、完党な削陀を詊みたす。 ナヌザヌがリスクを冒したい堎合、スクリプトは、掚奚されない削陀方法を実行するための--forceオプションを提䟛したす。

タむプミス、apiservicesである必芁がありたす

このコマンドは、䜿甚できないAPIを衚瀺したす。

kubectl get apiservices --template='{{range $api := .items}}{{range $api.status.conditions}}{{if eq .type "Available"}}{{$api.metadata.name}} {{.status}}{{"\n"}}{{end}}{{end}}{{end}}' | grep -i false

この蚘事はきっずあなたに圹立぀でしょう

https://access.redhat.com/solutions/5038511

実際に存圚するのはAPIサヌビスの競合であり、openshiftでAPIのヘルスステヌタスを怜蚌できたす。

oc get apiservices -o = custom-columns = " name.metadata.name 、 status.status.conditions [0] .status"

倱敗したAPIは、それを再起動し、そのAPIに属するポッドたたはデプロむを再起動する必芁がありたす。その埌、名前空間を削陀しようずしたす。

$ oc delete namspace

そしお準備ができお、ビゞネスは修正されたした!!

誰もが英語を話すこずに同意する堎所であなた自身の蚀語を䜿甚するこずはかなり倱瀌です。 👎

誰もが英語を話すこずに同意するのはどこですか

17時58分theAkitoの朚、2020幎4月30日に[email protected]曞きたした

みんながいる堎所で自分の蚀語を䜿うのはかなり無瀌です
英語を話すこずに同意したす。 👎

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-622137770 、
たたは賌読を解陀する
https://github.com/notifications/unsubscribe-auth/ALGMKB6K4OU4X3XOYMALOBLRPHYCDANCNFSM4ETUOEPA
。

>>

クリス、リヌドアヌキテクト@ brace.ai

-

守秘矩務の通知このメヌルは、
意図された受信者であり、機密、専有、たたは
特暩情報。 あなたが意図された受信者でない堎合、あなたは
䜿甚、レビュヌ、配垃、コピヌ、たたは実行されたアクションに基づいお通知された
このメッセヌゞたたはその添付ファむルがある堎合は、それを犁止したす。 そうでない堎合
目的の受信者は、返信メヌルで送信者に連絡し、
元のメッセヌゞず添付ファむルのすべおのコピヌを砎棄たたは削陀したす。

準備ができお、すみたせん、それは私のスピヌドのためでした、それは修正されたした

私たちは倚蚀語のナヌザヌベヌスを持っおいたす、それは私たちのツヌルのどれも囜際化されおいないのに十分悪いです、私たちは少なくずもここgithubでいいこずができたす。

@teoincontatto

この号で前述したように、 kubectl replace --rawが利甚可胜な最新バヌゞョンのkubectlを䜿甚しお、kubectlによっお公開されおいないAPIを䜿甚しお名前空間を終了する別の方法がありたすどのバヌゞョンからかはわかりたせん。 この方法は、あなたが出珟する必芁はありたせんkubectl proxyでのプロセスず回避の䟝存関係をcurl busyboxのようないく぀かの環境では利甚できないこず。 これが他の誰かを助けるこずを願っお、私はこれをここに残したした

kubectl get namespace "stucked-namespace" -o json \
            | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
            | kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -

これは完璧に機胜したした

私たちは倚蚀語のナヌザヌベヌスを持っおいたす、それは私たちのツヌルのどれも囜際化されおいないのに十分悪いです、私たちは少なくずもここgithubでいいこずができたす。

私たちは倚蚀語のナヌザヌベヌスを持っおいたす、それは私たちのツヌルのどれも囜際化されおいないのに十分悪いです、私たちは少なくずもここgithubでいいこずができたす。

ただ理解しようずしおいたす。 私を蚱しお。 誀っお芪指を䞋にクリックした可胜性がありたす。
はい、確かに、ツヌルは完璧に行われおいたせん。
説明なしで芪指を䞋に向けるそれらは、意味がありたせん。

私がこの問題を経隓するほずんどの堎合、それはCRD次第です。 CRDがその名前空間でのみ䜿甚されおいる堎合は削陀しおから、ファむナラむザヌず名前空間の削陀に進むこずができたす。

この号で前述したように、 kubectl replace --rawが利甚可胜な最新バヌゞョンのkubectlを䜿甚しお、kubectlによっお公開されおいないAPIを䜿甚しお名前空間を終了する別の方法がありたすどのバヌゞョンからかはわかりたせん。 この方法は、あなたが出珟する必芁はありたせんkubectl proxyでのプロセスず回避の䟝存関係をcurl busyboxのようないく぀かの環境では利甚できないこず。 これが他の誰かを助けるこずを願っお、私はこれをここに残したした

kubectl get namespace "stucked-namespace" -o json \
            | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
            | kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -

@teoincontattoありがずうございたす これは぀いにうたくいきたした

オンラむンでリ゜ヌスマニフェストを線集するだけではうたく機胜しない堎合がありたす぀たり、提出されたfinalizers削陀しお保存したす。
それで、私は他の人からいく぀かの新しい方法を埗たした。

kubectl get namespace linkerd -o json > linkerd.json

# Where:/api/v1/namespaces/<your_namespace_here>/finalize
kubectl replace --raw "/api/v1/namespaces/linkerd/finalize" -f ./linkerd.json

そのコマンドを実行した埌、名前空間は名前空間リストに存圚しないはずです。そしおそれは私のために働きたす。

namespaceだけでなく、他のリ゜ヌスもサポヌトしたす。

kubectl edit annoying-nsを䜿甚しおファむナラむザヌ行を削陀するこずで問題を修正したした

うヌん...私は今この問題を抱えおいたす:)
今日、eksクラスタヌを1.15から1.16に曎新したした。
これたでのずころ、すべおが正垞に芋えたす。
しかし、私の開発ns「configcluster」は䞀皮の「損傷」でした。
だから私はそれをきれいにするこずにしたした。

k nsconfigclusterを削陀したす
...。
今これはハングしたす3時間+/

$ kubectl get namespace configcluster -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"configcluster"}}
  creationTimestamp: "2020-06-19T06:40:15Z"
  deletionTimestamp: "2020-06-19T09:19:16Z"
  name: configcluster
  resourceVersion: "22598109"
  selfLink: /api/v1/namespaces/configcluster
  uid: e50f0b53-b21e-4e6e-8946-c0a0803f031b
spec:
  finalizers:
  - kubernetes
status:
  conditions:
  - lastTransitionTime: "2020-06-19T09:19:21Z"
    message: 'Discovery failed for some groups, 1 failing: unable to retrieve the
      complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently
      unable to handle the request'
    reason: DiscoveryFailed
    status: "True"
    type: NamespaceDeletionDiscoveryFailure
  - lastTransitionTime: "2020-06-19T09:19:22Z"
    message: All legacy kube types successfully parsed
    reason: ParsedGroupVersions
    status: "False"
    type: NamespaceDeletionGroupVersionParsingFailure
  - lastTransitionTime: "2020-06-19T09:19:22Z"
    message: All content successfully deleted
    reason: ContentDeleted
    status: "False"
    type: NamespaceDeletionContentFailure
  phase: Terminating

足の問題でこのずげにもっずさらされるにはどうすればよいですか

4時46分AMアンドレアス・ホヌマンで金、2020幎6月19日には[email protected]
曞きたした

うヌん...私は今この問題を抱えおいたす:)
今日、eksクラスタヌを1.15から1.16に曎新したした。
これたでのずころ、すべおが正垞に芋えたす。
しかし、私の開発ns「configcluster」は䞀皮の「損傷」でした。
だから私はそれをきれいにするこずにしたした。

k nsconfigclusterを削陀したす
...。
今これはハングしたす3時間+/

$ kubectl get namespace configcluster -o yaml
apiVersionv1
皮類名前空間
メタデヌタ
泚釈
kubectl.kubernetes.io/last-applied-configuration|
{"apiVersion" "v1"、 "kind" "Namespace"、 "metadata"{"annotations"{}、 "name" "configcluster"}}
CreationTimestamp "2020-06-19T064015Z"
deleteTimestamp "2020-06-19T091916Z"
名前configcluster
resourceVersion "22598109"
selfLink/ api / v1 / namespaces / configcluster
uide50f0b53-b21e-4e6e-8946-c0a0803f031b
スペック
ファむナラむザヌ

  • kubernetes
    状態
    条件
  • lastTransitionTime "2020-06-19T091921Z"
    メッセヌゞ '䞀郚のグルヌプで怜出に倱敗したした。1぀倱敗したしたを取埗できたせん
    サヌバヌAPIの完党なリストmetrics.k8s.io/v1beta1サヌバヌは珟圚
    リク゚ストを凊理できたせん」
    理由DiscoveryFailed
    ステヌタス「True」
    タむプNamespaceDeletionDiscoveryFailure
  • lastTransitionTime "2020-06-19T091922Z"
    メッセヌゞすべおのレガシヌkubeタむプが正垞に解析されたした
    理由ParsedGroupVersions
    ステヌタス「False」
    タむプNamespaceDeletionGroupVersionParsingFailure
  • lastTransitionTime "2020-06-19T091922Z"
    メッセヌゞすべおのコンテンツが正垞に削陀されたした
    理由ContentDeleted
    ステヌタス「False」
    タむプNamespaceDeletionContentFailure
    フェヌズ終了

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-646543073 、
たたは賌読を解陀する
https://github.com/notifications/unsubscribe-auth/AFLKRCLHIZ77X2Z3F5GAOCTRXMXVTANCNFSM4ETUOEPA
。

@bobhenkelたあ、この問題はクロヌズされおいるので、事実䞊、これは問題がないこずを意味したす実行可胜な項目に関する限り。 同様の状況に察凊するための実際的な支揎が必芁な堎合は、䞊蚘のスレッドをお読みください。そこにはいく぀かの良いアドバむスがありたすたた、いく぀かの悪いアドバむスもありたす。

私の堎合、GCPネットワヌクサヌビスコン゜ヌルから入力ロヌドバランサヌを手動で削陀する必芁がありたした。 ロヌドバランサヌのフロント゚ンドをコン゜ヌルで盎接手動で䜜成したした。 ロヌドバランサヌを削陀するず、名前空間は自動的に削陀されたした。

ロヌドバランサヌの状態がマニフェストの状態ず異なっおいたため、Kubernetesは削陀したくないず考えおいたす。

次にアノテヌションを䜿甚しお入力フロント゚ンドの䜜成を自動化し、この問題を解決できるかどうかを確認したす。

オンラむンでリ゜ヌスマニフェストを線集するだけではうたく機胜しない堎合がありたす぀たり、提出されたfinalizers削陀しお保存したす。
それで、私は他の人からいく぀かの新しい方法を埗たした。

kubectl get namespace linkerd -o json > linkerd.json

# Where:/api/v1/namespaces/<your_namespace_here>/finalize
kubectl replace --raw "/api/v1/namespaces/linkerd/finalize" -f ./linkerd.json

そのコマンドを実行した埌、名前空間は名前空間リストに存圚しないはずです。そしおそれは私のために働きたす。

namespaceだけでなく、他のリ゜ヌスもサポヌトしたす。

あなたはそれが働いたスタヌです

オンラむンでリ゜ヌスマニフェストを線集するだけではうたく機胜しない堎合がありたす぀たり、提出されたfinalizers削陀しお保存したす。
それで、私は他の人からいく぀かの新しい方法を埗たした。

kubectl get namespace linkerd -o json > linkerd.json

# Where:/api/v1/namespaces/<your_namespace_here>/finalize
kubectl replace --raw "/api/v1/namespaces/linkerd/finalize" -f ./linkerd.json

そのコマンドを実行した埌、名前空間は名前空間リストに存圚しないはずです。そしおそれは私のために働きたす。

namespaceだけでなく、他のリ゜ヌスもサポヌトしたす。

倚くの解決策を詊したしたが、これは私のために働いたものです。 ありがずうございたした

これは本圓に「受け入れられた」答えであるはずです-それはこの問題の根本を完党に解決したした

䞊蚘のリンクから取埗したす。

これは、特に実皌働環境では正しい方法ではありたせん。

今日、私は同じ問題に盎面したした。 ファむナラむザヌを削陀するず、さたざたな状態で残り物ができおしたいたす。 実際に、削陀が完了しない原因を芋぀ける必芁がありたす。

https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-524772920を参照しお

たた、残念ながら、「kubetctl getall」はすべおを報告するわけではありたせん。リンクのように同様のコマンドを䜿甚する必芁がありたす

私の堎合—「cert-manager」名前空間を削陀したす。 'kubectl get apiservice -o yaml'の出力で、status = FalseのAPIService'v1beta1.admission.certmanager.k8s.io 'が芋぀かりたした。 このapiserviceは、削陀したcert-managerの䞀郚でした。 そのため、「kubectl delete apiservice v1beta1.admission.certmanager.k8s.io」から10秒で、名前空間が消えたした。

お圹に立おば幞いです。


そうは蚀っおも、終了する名前空間を自動的に削陀するCronJobずしお1時間ごずに実行する小さなマむクロサヌビスを䜜成したした。

ここで芋぀けるこずができたす https 

終了する名前空間を自動的に削陀するCronJobずしお1時間ごずに実行する小さなマむクロサヌビスを䜜成したした。

ここで芋぀けるこずができたす https 

さらに別のワンラむナヌ

for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}'); do  kubectl get ns $ns -ojson | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -; done

しかし、スタックした名前空間を削陀するこずは良い解決策ではありたせん。 正しい方法は、それが動かなくなった理由を芋぀けるこずです。 非垞に䞀般的な理由は、クラスタヌが名前空間をファむナラむズするのを劚げる利甚できないAPIサヌビスがあるこずです。
たずえば、ここではKnativeを適切に削陀しおいたせん。

$ kubectl get apiservice|grep False
NAME                                   SERVICE                             AVAILABLE   AGE
v1beta1.custom.metrics.k8s.io          knative-serving/autoscaler          False (ServiceNotFound)   278d

それを削陀するず問題は解決したした

k delete apiservice v1beta1.custom.metrics.k8s.io
apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" deleted
$  k create ns test2
namespace/test2 created
$ k delete ns test2
namespace "test2" deleted
$ kgns test2
Error from server (NotFound): namespaces "test2" not found  

終了する名前空間を自動的に削陀するCronJobずしお1時間ごずに実行する小さなマむクロサヌビスを䜜成したした。

ここで芋぀けるこずができたす https 

よくやった。

ラボk8sクラスタヌの1.18で同様の問題が発生し、他の人を助けるためにメモを远加したした。 私はメトリクスAPI、特にカスタムメトリクスを䜿甚しおいたした。 それらのk8sオブゞェクトを削陀しお再䜜成した埌、名前空間の削陀で停止し、メトリックAPI゚ンドポむントが芋぀からないずいう゚ラヌが発生したした。 それを別の名前空間に戻すず、すべおがすぐにクリアされたした。

これは、status.conditions.messageの䞋の名前空間にありたした。

Discovery failed for some groups, 4 failing: unable to retrieve the
complete list of server APIs: custom.metrics.k8s.io/v1beta1: the server is currently
unable to handle the request, custom.metrics.k8s.io/v1beta2: the server is currently
unable to handle the request, external.metrics.k8s.io/v1beta1: the server is
currently unable to handle the request, metrics.k8s.io/v1beta1: the server is

さらに別のワンラむナヌ

for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}'); do  kubectl get ns $ns -ojson | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -; done

しかし、スタックした名前空間を削陀するこずは良い解決策ではありたせん。 正しい方法は、それが動かなくなった理由を芋぀けるこずです。 非垞に䞀般的な理由は、クラスタヌが名前空間をファむナラむズするのを劚げる利甚できないAPIサヌビスがあるこずです。
たずえば、ここではKnativeを適切に削陀しおいたせん。

$ kubectl get apiservice|grep False
NAME                                   SERVICE                             AVAILABLE   AGE
v1beta1.custom.metrics.k8s.io          knative-serving/autoscaler          False (ServiceNotFound)   278d

それを削陀するず問題は解決したした

k delete apiservice v1beta1.custom.metrics.k8s.io
apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" deleted
$  k create ns test2
namespace/test2 created
$ k delete ns test2
namespace "test2" deleted
$ kgns test2
Error from server (NotFound): namespaces "test2" not found  

間違いなく最もきれいなワンラむナヌ これらの「解決策」のどれも実際には根本的な問題を解決しないこずに泚意するこずが重芁です。

正しい解決策に぀いおは、こちらをご芧ください

぀たり、メッセヌゞは「ただもう1぀のラむナヌ」ではなくsmileを広める必芁がありたす。

間違いなく最もきれいなワンラむナヌ これらの「解決策」のどれも実際には根本的な問題を解決しないこずに泚意するこずが重芁です。

この゜リュヌションは、すべおの可胜性の1぀を解決したす。 考えられるすべおの根本原因を探しお修正するには、次のスクリプトを䜿甚したす https 

@thyarlesずおも玠敵です

名前空間の削陀にmodify finalizeを䜿甚しないでください。 ゚ラヌが発生したす

image

名前空間が終了する原因を調べおください。 珟圚知られおいるトラブルシュヌティングの方向

  • ポッドの終了
  • cert-managerwebhookブロックセクション

私は同じ問題に遭遇したす

# sudo kubectl get ns
NAME                   STATUS        AGE
cattle-global-data     Terminating   8d
cattle-global-nt       Terminating   8d
cattle-system          Terminating   8d
cert-manager           Active        8d
default                Active        10d
ingress-nginx          Terminating   9d
kube-node-lease        Active        10d
kube-public            Active        10d
kube-system            Active        10d
kubernetes-dashboard   Terminating   4d6h
local                  Active        8d
p-2sfgk                Active        8d
p-5kdx9                Active        8d
# sudo kubectl get all -n kubernetes-dashboard
No resources found in kubernetes-dashboard namespace.
# sudo kubectl get namespace kubernetes-dashboard  -o json 
{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "annotations": {
            "cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2020-09-29T01:15:46Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2020-09-29T01:15:46Z\"}]}",
            "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"kubernetes-dashboard\"}}\n",
            "lifecycle.cattle.io/create.namespace-auth": "true"
        },
        "creationTimestamp": "2020-09-29T01:15:45Z",
        "deletionGracePeriodSeconds": 0,
        "deletionTimestamp": "2020-10-02T07:59:52Z",
        "finalizers": [
            "controller.cattle.io/namespace-auth"
        ],
        "managedFields": [
            {
                "apiVersion": "v1",
                "fieldsType": "FieldsV1",
                "fieldsV1": {
                    "f:metadata": {
                        "f:annotations": {
                            "f:cattle.io/status": {},
                            "f:lifecycle.cattle.io/create.namespace-auth": {}
                        },
                        "f:finalizers": {
                            ".": {},
                            "v:\"controller.cattle.io/namespace-auth\"": {}
                        }
                    }
                },
                "manager": "Go-http-client",
                "operation": "Update",
                "time": "2020-09-29T01:15:45Z"
            },
            {
                "apiVersion": "v1",
                "fieldsType": "FieldsV1",
                "fieldsV1": {
                    "f:metadata": {
                        "f:annotations": {
                            ".": {},
                            "f:kubectl.kubernetes.io/last-applied-configuration": {}
                        }
                    }
                },
                "manager": "kubectl-client-side-apply",
                "operation": "Update",
                "time": "2020-09-29T01:15:45Z"
            },
            {
                "apiVersion": "v1",
                "fieldsType": "FieldsV1",
                "fieldsV1": {
                    "f:status": {
                        "f:phase": {}
                    }
                },
                "manager": "kube-controller-manager",
                "operation": "Update",
                "time": "2020-10-02T08:13:49Z"
            }
        ],
        "name": "kubernetes-dashboard",
        "resourceVersion": "3662184",
        "selfLink": "/api/v1/namespaces/kubernetes-dashboard",
        "uid": "f1944b81-038b-48c2-869d-5cae30864eaa"
    },
    "spec": {},
    "status": {
        "conditions": [
            {
                "lastTransitionTime": "2020-10-02T08:13:49Z",
                "message": "All resources successfully discovered",
                "reason": "ResourcesDiscovered",
                "status": "False",
                "type": "NamespaceDeletionDiscoveryFailure"
            },
            {
                "lastTransitionTime": "2020-10-02T08:11:49Z",
                "message": "All legacy kube types successfully parsed",
                "reason": "ParsedGroupVersions",
                "status": "False",
                "type": "NamespaceDeletionGroupVersionParsingFailure"
            },
            {
                "lastTransitionTime": "2020-10-02T08:11:49Z",
                "message": "All content successfully deleted, may be waiting on finalization",
                "reason": "ContentDeleted",
                "status": "False",
                "type": "NamespaceDeletionContentFailure"
            },
            {
                "lastTransitionTime": "2020-10-02T08:11:49Z",
                "message": "All content successfully removed",
                "reason": "ContentRemoved",
                "status": "False",
                "type": "NamespaceContentRemaining"
            },
            {
                "lastTransitionTime": "2020-10-02T08:11:49Z",
                "message": "All content-preserving finalizers finished",
                "reason": "ContentHasNoFinalizers",
                "status": "False",
                "type": "NamespaceFinalizersRemaining"
            }
        ],
        "phase": "Terminating"
    }

#  sudo kubectl version

Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:41:02Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:32:58Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}

etcdctlを䜿甚しお、削陀されおいないリ゜ヌスを芋぀けるこずができたす

ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/peer.crt \
--key=/etc/kubernetes/pki/etcd/peer.key \
get /registry --prefix | grep <namespace>

タヌミナルにコピヌしお貌り付けるだけです

for NS in $(kubectl get ns 2>/dev/null | grep Terminating | cut -f1 -d ' '); do
  kubectl get ns $NS -o json > /tmp/$NS.json
  sed -i '' "s/\"kubernetes\"//g" /tmp/$NS.json
  kubectl replace --raw "/api/v1/namespaces/$NS/finalize" -f /tmp/$NS.json
done
/tmp/$NS.json

これは私にずっおはうたくいき、nsにぶら䞋がっおいるk8sオブゞェクトがないこずを確認しおから実行したした。 ありがずう

これを䜿甚しお、終了時にスタックした名前空間を削陀したした

䟋

kubectl get namespace openebs -o json | jq -j '.spec.finalizers=null' > tmp.json 
kubectl replace --raw "/api/v1/namespaces/openebs/finalize" -f ./tmp.json

ランチャヌ固有の名前空間䟋cattle-systemでの終了時にスタックした名前空間にぶ぀かったすべおのグヌグルにずっお、次の倉曎されたコマンドgreboisのオリゞナルが私のために機胜したした

for NS in $(kubectl get ns 2>/dev/null | grep Terminating | cut -f1 -d ' '); do
  kubectl get ns $NS -o json > /tmp/$NS.json
  sed -i "s/\"controller.cattle.io\/namespace-auth\"//g" /tmp/$NS.json
  kubectl replace --raw "/api/v1/namespaces/$NS/finalize" -f /tmp/$NS.json
done

皆さん、参考たでに、このたら、それず䞊蚘の圹立​​぀コメントのいく぀かにリンクしお、この問題をロックする予定です。

䜕が起こっおいるのかに぀いおの10分間の説明を蚘録し、このSIG DeepDiveセッションで発衚したした。

これが65の賛成祚を含む正しいコメントです

䞊で数回蚀及されたこの䞭皋床の投皿は、物事を正しい方法で行う䟋です。 壊れたAPIサヌビスを芋぀けお修正したす。

名前空間のファむナラむザヌを削陀するだけのすべおのワンラむナヌは根本原因に察凊し、クラスタヌを埮劙に壊れたたたにしたす。これは埌であなたを噛みたす。 だから、そうしないでください。 ずにかく、根本原因の修正は通垞簡単です。 スレッドにはすでに倚数の正解がありたすが、人々はこのテヌマのバリ゚ヌションを投皿するこずを奜むようです。このコメントが䞀番䞋にずどたるように、今すぐ問題をロックしたす。

このペヌゞは圹に立ちたしたか
5 / 5 - 1 評䟡