Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Perguntas frequentes/ Cluster/ Execução de cluster/ Como atualizar um namespace no estado Terminating?
Atualizado em 2025-05-23 GMT+08:00

Como atualizar um namespace no estado Terminating?

No Kubernetes, um namespace tem dois estados comuns: Active e Terminating. O estado Terminating é raro. Quando um namespace tem recursos em execução, mas o namespace é excluído, o namespace se torna Terminating. Nesse caso, o namespace será automaticamente excluído pelo sistema depois que o Kubernetes recuperar os recursos no namespace.

No entanto, em alguns casos, mesmo que nenhum recurso esteja em execução no namespace, o namespace no estado Terminating ainda não pode ser excluído.

Para resolver este problema, execute os seguintes passos:

  1. Veja os detalhes do namespace.

    $ kubectl  get ns  | grep rdb
    rdbms                  Terminating   6d21h
    
    $ kubectl  get ns rdbms -o yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"rdbms"}}
      creationTimestamp: "2020-05-07T15:19:43Z"
      deletionTimestamp: "2020-05-07T15:33:23Z"
      name: rdbms
      resourceVersion: "84553454"
      selfLink: /api/v1/namespaces/rdbms
      uid: 457788ddf-53d7-4hde-afa3-1fertg21ewe1
    spec:
      finalizers:
      - kubernetes
    status:
      phase: Terminating

  2. Exiba recursos no namespace.

    # View resources that can be isolated using namespaces in the cluster.
    $ kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n rdbms

    Depois de executar o comando acima, nenhum recurso é ocupado no namespace rdbms.

  3. Exclua o namespace.

    Exclua diretamente o namespace rdbms.
    $ kubectl  delete ns rdbms
    Error from server (Conflict): Operation cannot be fulfilled on namespaces "rdbms": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.

    O sistema exibe uma mensagem indicando que a operação de exclusão será concluída até que o sistema exclua todos os recursos inúteis.

  4. Exclua forçadamente o namespace.

    $ kubectl  delete ns rdbms --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 "rdbms": The system is ensuring all content is removed from this namespace.  Upon completion, this namespace will automatically be purged by the system.

    Depois de executar o comando acima, o namespace ainda não pode ser excluído.

  5. Use a API nativa para excluir esses recursos.

    Obtenha os detalhes do namespace.
    $ kubectl  get ns rdbms  -o json > rdbms.json

    Verifique a configuração JSON definida pelo namespace, edite o arquivo JSON e exclua a parte spec.

    $ cat rdbms.json
    {
        "apiVersion": "v1",
        "kind": "Namespace",
        "metadata": {
            "annotations": {
                "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"rdbms\"}}\n"
            },
            "creationTimestamp": "2019-10-14T12:17:44Z",
            "deletionTimestamp": "2019-10-14T12:30:27Z",
            "name": "rdbms",
            "resourceVersion": "8844754",
            "selfLink": "/api/v1/namespaces/rdbms",
            "uid": "29067ddf-56d7-4cce-afa3-1fbdbb221ab1"
        },
        "spec": {
            "finalizers": [
                "kubernetes"
            ]
        },
        "status": {
            "phase": "Terminating"
        }
    }

    Depois que a solicitação PUT é executada, o namespace é automaticamente excluído.

    $ curl --cacert /root/ca.crt --cert /root/client.crt --key /root/client.key -k -H "Content-Type:application/json" -X PUT --data-binary @rdbms.json https://x.x.x.x:5443/api/v1/namespaces/rdbms/finalize 
    {
      "kind": "Namespace",
      "apiVersion": "v1",
      "metadata": {
        "name": "rdbms",
        "selfLink": "/api/v1/namespaces/rdbms/finalize",
        "uid": "29067ddf-56d7-4cce-afa3-1fbdbb221ab1",
        "resourceVersion": "8844754",
        "creationTimestamp": "2019-10-14T12:17:44Z",
        "deletionTimestamp": "2019-10-14T12:30:27Z",
        "annotations": {
          "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"rdbms\"}}\n"
        }
      },
      "spec": {
    
      },
      "status": {
        "phase": "Terminating"
      }

    Se o namespace ainda não puder ser excluído, verifique se o campo finalizers existe nos metadados. Se o campo existir, execute o seguinte comando para acessar o namespace e excluir o campo:

    kubectl edit ns rdbms
    • Para obter detalhes sobre como obter o certificado de cluster, consulte Obtenção de um certificado de cluster.
    • https://x.x.x.x:5443 indica o endereço para conexão ao cluster. Para obter o endereço, efetue logon no console do CCE, clique no cluster e visualize Private IP no painel de Connection Information.

  6. Verifique se o namespace foi excluído.

    $ kubectl  get ns  | grep rdb