Невозможно удалить пространство имен Kubernetes - не удается удалить финализаторы

У меня есть пространство имен, которое я не могу удалить в своем кластере Kubernetes. Когда я запускаю kubectl get ns traefik -o yaml, я получаю следующее:

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    cattle.io/status: '{"Conditions":[{"Type":"ResourceQuotaInit","Status":"True","Message":"","LastUpdateTime":"2021-06-11T20:28:59Z"},{"Type":"InitialRolesPopulated","Status":"True","Message":"","LastUpdateTime":"2021-06-11T20:29:00Z"}]}'
    field.cattle.io/projectId: c-5g2hz:p-bl9sf
    lifecycle.cattle.io/create.namespace-auth: "true"
  creationTimestamp: "2021-06-11T20:28:58Z"
  deletionTimestamp: "2021-07-04T07:21:20Z"
  labels:
    field.cattle.io/projectId: p-bl9sf
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:field.cattle.io/projectId: {}
        f:labels:
          .: {}
          f:field.cattle.io/projectId: {}
      f:status:
        f:phase: {}
    manager: agent
    operation: Update
    time: "2021-06-11T20:28:58Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:cattle.io/status: {}
          f:lifecycle.cattle.io/create.namespace-auth: {}
    manager: rancher
    operation: Update
    time: "2021-06-11T20:28:58Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          .: {}
          k:{"type":"NamespaceContentRemaining"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"NamespaceDeletionContentFailure"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"NamespaceDeletionDiscoveryFailure"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"NamespaceDeletionGroupVersionParsingFailure"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"NamespaceFinalizersRemaining"}:
            .: {}
            f:lastTransitionTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
    manager: kube-controller-manager
    operation: Update
    time: "2021-07-04T07:21:26Z"
  name: traefik
  resourceVersion: "15400692"
  uid: 4b198956-bbd5-4bdb-9dc6-9d53feda91e4
spec:
  finalizers:
  - kubernetes
status:
  conditions:
  - lastTransitionTime: "2021-07-04T07:21:25Z"
    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: "2021-07-04T07:21:26Z"
    message: All legacy kube types successfully parsed
    reason: ParsedGroupVersions
    status: "False"
    type: NamespaceDeletionGroupVersionParsingFailure
  - lastTransitionTime: "2021-07-04T07:21:26Z"
    message: All content successfully deleted, may be waiting on finalization
    reason: ContentDeleted
    status: "False"
    type: NamespaceDeletionContentFailure
  - lastTransitionTime: "2021-07-04T07:21:26Z"
    message: All content successfully removed
    reason: ContentRemoved
    status: "False"
    type: NamespaceContentRemaining
  - lastTransitionTime: "2021-07-04T07:21:26Z"
    message: All content-preserving finalizers finished
    reason: ContentHasNoFinalizers
    status: "False"
    type: NamespaceFinalizersRemaining
  phase: Terminating

И когда я запускаю kubectl delete ns traefik --v=10, последний вывод будет следующим:

I0708 18:38:26.538676   31537 round_trippers.go:425] curl -k -v -XGET  -H "Accept: application/json" -H "User-Agent: kubectl/v1.20.2 (linux/amd64) kubernetes/faecb19" 'http://127.0.0.1:44427/6614317c-41da-462b-8be3-c6cda2f0df24/api/v1/namespaces?fieldSelector=metadata.name%3Dtraefik&resourceVersion=17101173&watch=true'
I0708 18:38:27.013394   31537 round_trippers.go:445] GET http://127.0.0.1:44427/6614317c-41da-462b-8be3-c6cda2f0df24/api/v1/namespaces?fieldSelector=metadata.name%3Dtraefik&resourceVersion=17101173&watch=true 200 OK in 474 milliseconds
I0708 18:38:27.013421   31537 round_trippers.go:451] Response Headers:
I0708 18:38:27.013427   31537 round_trippers.go:454]     Access-Control-Allow-Origin: *
I0708 18:38:27.013450   31537 round_trippers.go:454]     Date: Thu, 08 Jul 2021 16:38:27 GMT
I0708 18:38:27.013453   31537 round_trippers.go:454]     Connection: keep-alive
I0708 18:38:27.013468   31537 request.go:708] Unexpected content type from the server: "": mime: no media type

Я уже пытался удалить финализаторы, как описано на https://www.ibm.com/docs/en/cloud-private/3.2.0?topic=console-namespace-is-stuck-in-terminating-state но через несколько секунд я наконец получаю EOF:

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

Кто-нибудь знает, как я могу удалить пространство имен traefik?


person Nrgyzer    schedule 08.07.2021    source источник
comment
Можете ли вы проверить, есть ли что-то еще внутри пространства имен? for RES in $(kubectl api-resources --namespaced=true -o name); do echo $RES; kubectl get $RES -o name; done   -  person Manuel    schedule 09.07.2021
comment
Думаю, дело в 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. Пожалуйста, проверьте этот ответ   -  person moonkotte    schedule 09.07.2021
comment
@Manuel Этого не должно быть, потому что вы можете удалить пространство имен, даже если внутри есть ресурсы - они исчезнут вместе с пространством имен - источник   -  person moonkotte    schedule 09.07.2021
comment
Также after some seconds I finally get EOF: - на всякий случай проверьте свой json в валидаторе.   -  person moonkotte    schedule 09.07.2021
comment
Я знаю, что удаление пространства имен должно удалить все остальные ресурсы внутри. Я просто упоминаю об этом, потому что однажды у меня была проблема, что не удалось удалить другой ресурс. Так что удаление пространства имен тоже застряло.   -  person Manuel    schedule 09.07.2021
comment
Спасибо всем за все эти идеи. Я исправил проблему для моего сервера метрик (проблема, которую вы опубликовали на @moonkotte), и, наконец, пространство имен было удалено.   -  person Nrgyzer    schedule 09.07.2021


Ответы (1)


Разместив это как вики-страницу сообщества из комментариев, не стесняйтесь редактировать и расширять.

После анализа состояния проблемного пространства имен эта часть была основной причиной проблемы:

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'

Проблема была в metric server в кубернетах. Как только metric server станет доступным, пространство имен можно разблокировать для удаления.

Аналогичная проблема была решена в еще один ответ на stackoverflow.

person Community    schedule 09.07.2021