Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
linux_faq:kubernetes_delete_namespace_hung_in_terminating_state [2019/10/16 14:14] mikelinux_faq:kubernetes_delete_namespace_hung_in_terminating_state [2021/10/22 09:04] (current) admin
Line 1: Line 1:
-https://github.com/kubernetes/kubernetes/issues/60807+https://github.com/kubernetes/kubernetes/issues/60807 \\ 
 +https://kb.kasten.io/knowledge/how-to-debug-namespaces-that-are-stuck-terminating \\ 
 Что делать, если неймспейс при удалении завис в состоянии **Terminating**? \\ Что делать, если неймспейс при удалении завис в состоянии **Terminating**? \\
-  * Нужно попытаться отредактировать его и удалить **finalizers** (в том числе и из спецификации).+  * Нужно попытаться отредактировать его и удалить **finalizers** (в том числе и из спецификации). Например так: <code>kubectl patch ns BAD_NAMESPACE -p '{"metadata":{"finalizers":null}}'</code>
   * Если это не помогло (**finalizers** вернулись а место после удаления), то нужно сделать так:   * Если это не помогло (**finalizers** вернулись а место после удаления), то нужно сделать так:
 <code>kubectl get namespace BAD_NAMESPACE -o json > tmp.json</code> <code>kubectl get namespace BAD_NAMESPACE -o json > tmp.json</code>
-Отредактировать файлик **tmp.json**, удалив из него **finalizers**, а затем применить его: +Отредактировать файлик **tmp.json**, удалив из него **finalizers**, а затем применить его. \\ 
-  kubectl proxy --port=8080 &+Для этого - проксируем API на локальный порт
 +  sudo -E kubectl proxy --port=8080 
 +И затем финализируем удаление неймспейса:
   curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://localhost:8080/api/v1/namespaces/BAD_NAMESPACE/finalize   curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://localhost:8080/api/v1/namespaces/BAD_NAMESPACE/finalize
 +Однако, если и после этого неймспейс не удалится, то нужно посмотреть на вывод этой команды. Там могут быть сообщения вида:
 +  "status": {
 +    "phase": "Terminating",
 +    "conditions": [
 +      {
 +        "type": "NamespaceDeletionDiscoveryFailure",
 +        "status": "True",
 +        "lastTransitionTime": "2021-10-21T19:59:35Z",
 +        "reason": "DiscoveryFailed",
 +        "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"
 +      },
 +      ...
 +Что означает, что не работают какие-то сервисы API. Для того, чтобы исправить - просто удаляем заклинивший сервис API:
 +  kubectl delete apiservice v1beta1.metrics.k8s.io
 +И дальше - повторяем curl...       \\
  
 +В самом крайнем случае - можно попробывать ЖЕСТКО перезаупстить все контейнеры кубера:
 +  systemctl stop kubelet.service
 +  for item in `ctr -n k8s.io tasks ls | awk '{print $1}'`; do ctr -n k8s.io tasks kill $item; done 
 +  for item in `ctr -n k8s.io containers ls | awk '{print $1}'`; do ctr -n k8s.io containers rm $item; done
 +  ctr -n k8s.io tasks ls
 +  ctr -n k8s.io containers ls
 +  systemctl start kubelet.service
  • linux_faq/kubernetes_delete_namespace_hung_in_terminating_state.txt
  • Last modified: 2021/10/22 09:04
  • by admin