Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> Cloud Container Engine> Preguntas frecuentes> Clúster> Ejecución de clúster> ¿Cómo actualizo un espacio de nombres en estado Terminating?
Actualización más reciente 2023-08-08 GMT+08:00

¿Cómo actualizo un espacio de nombres en estado Terminating?

En Kubernetes, un espacio de nombres tiene dos estados comunes: Active y Terminating. El estado Terminating es raro. Cuando un espacio de nombres tiene recursos en ejecución pero se elimina el espacio de nombres, el espacio de nombres se convierte en Terminating. En este caso, el sistema eliminará automáticamente el espacio de nombres después de que Kubernetes recupere los recursos en el espacio de nombres.

Sin embargo, en algunos casos, incluso si no se está ejecutando ningún recurso en el espacio de nombres, el espacio de nombres en el estado Terminating aún no se puede eliminar.

Para solucionar este problema, realice los siguientes pasos:

  1. Ver los detalles del espacio de nombres.

    $ 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. Ver recursos en el espacio de nombres.

    # 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

    Después de ejecutar el comando anterior, no se ocupa ningún recurso en el espacio de nombres rdbms.

  3. Eliminar el espacio de nombres.

    Elimine directamente el rdbms del espacio de nombres.
    $ 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.

    El sistema muestra un mensaje que indica que la operación de eliminación se completará hasta que el sistema elimine todos los recursos inútiles.

  4. Elimine por la fuerza el espacio de nombres.

    $ 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.

    Después de ejecutar el comando anterior, el espacio de nombres aún no se puede eliminar.

  5. Utilizar la API nativa para eliminar estos recursos.

    Obtenga los detalles del espacio de nombres.
    $ kubectl  get ns rdbms  -o json > rdbms.json

    Compruebe la configuración de JSON definida por el espacio de nombres, edite el archivo JSON y elimine la 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"
        }
    }

    Después de ejecutar la solicitud PUT, el espacio de nombres se elimina automáticamente.

    $ 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"
      }

    Si el espacio de nombres aún no se puede eliminar, compruebe si el campo finalizers existe en los metadatos. Si el campo existe, ejecute el siguiente comando para acceder al espacio de nombres y eliminar el campo:

    kubectl edit ns rdbms
    • Para obtener más información acerca de cómo obtener el certificado de clúster, consulte Obtención de un certificado de clúster.
    • https://x.x.x.x:5443 indica la dirección para conectarse al clúster. Para obtener la dirección, inicie sesión en la consola de CCE, haga clic en el clúster y vea Private IP en el panel Connection Information.

  6. Compruebe si el espacio de nombres se ha eliminado.

    $ kubectl  get ns  | grep rdb

Ejecución de clúster Preguntas frecuentes

more