Supresión de nodos de trabajo

Obtenga información sobre la supresión de nodos de trabajador y notas sobre la definición de opciones de cableado y drenaje con Container Engine for Kubernetes (OKE).

Puede suprimir nodos de trabajador específicos en pools de nodos en clusters que haya creado con Container Engine for Kubernetes.

Nota:

  • Al suprimir un nodo de trabajador, se suprime ese nodo de trabajador específico del pool de nodos y, opcionalmente, se reduce el propio pool de nodos restando 1 del número de nodos de trabajador especificado para el pool de nodos. Si suprime un nodo de trabajador sin reducir verticalmente el pool de nodos, se crea un nuevo nodo de trabajador para sustituirlo.
  • Al suprimir nodos gestionados, las opciones de Cordon y drenaje que seleccione determinan cuándo y cómo se terminan los nodos de trabajador. Consulte Notas sobre cableado y drenaje de nodos gestionados antes de la terminación.
  • Además de poder suprimir nodos de trabajador específicos, tenga en cuenta que los nodos de trabajador también se suprimen al reducir verticalmente los pools de nodos y cambiar las configuraciones de colocación.
  • Cuando ha marcado un nodo de trabajador para su supresión (durante una operación de supresión de nodo, una operación de reducción vertical o un cambio en la configuración de colocación), no puede recuperar el nodo. Incluso si la operación de supresión de nodo no se realiza correctamente inicialmente, la siguiente operación de actualización del pool de nodos (incluida una operación de ampliación) intenta volver a terminar el nodo.
  • Container Engine for Kubernetes crea los nodos de trabajador en un cluster con nombres generados automáticamente. Los nombres de nodos gestionados tienen el siguiente formato: oke-c<part-of-cluster-OCID>-n<part-of-node-pool-OCID>-s<part-of-subnet-OCID>-<slot>. Los nombres de nodo virtual son los mismos que la dirección IP privada del nodo. No cambie los nombres generados automáticamente de los nodos de trabajador. Si cambiara el nombre generado automáticamente de un nodo de trabajador y, a continuación, suprimiera el cluster, el nodo de trabajador al que se le cambió el nombre no se suprimiría. Debe suprimir el nodo de trabajador al que se le cambió el nombre manualmente.

Puede suprimir nodos de trabajador mediante la consola, la CLI y la API. Consulte Supresión de un nodo de trabajador.

Notas sobre el cableado y el drenado de nodos gestionados antes de la terminación

Cordón

La conexión por cable es el nombre asignado para marcar un nodo de trabajador en un cluster de Kubernetes como no programable. El cableado de un nodo de trabajador impide que el programador de kube coloque nuevos pods en ese nodo, pero no afecta a los pods existentes en el nodo. El cableado de un nodo de trabajador es un paso preparatorio útil antes de terminar el nodo para realizar tareas administrativas (como la supresión de nodos, la reducción vertical de un pool de nodos y el cambio de la configuración de ubicación). Para obtener más información, consulte Administración manual de nodos en la documentación de Kubernetes.

Vaciando

Draining es el nombre proporcionado para expulsar de forma segura pods de un nodo de trabajador en un cluster de Kubernetes. El desalojo seguro de los pods garantiza que los contenedores del pod terminen correctamente y realicen cualquier limpieza necesaria. Para obtener más información, consulte Drenaje seguro de un nodo y Terminación de pods en la documentación de Kubernetes.

Presupuestos de interrupción de pod

Los presupuestos de interrupción de pod son una función de Kubernetes que permite limitar el número de interrupciones simultáneas que experimenta una aplicación. El uso de presupuestos de interrupción de pod garantiza una alta disponibilidad de las aplicaciones y, al mismo tiempo, permite realizar tareas administrativas en nodos de trabajador. Los presupuestos de interrupción de pods pueden evitar que se expulsen pods al drenar nodos de trabajador. Para obtener más información, consulte Especificación de un presupuesto de interrupción para la aplicación en la documentación de Kubernetes.

Pools de nodos con el estado "Necesita atención"

Al suprimir nodos de trabajador de clusters que ha creado con Container Engine for Kubernetes, puede utilizar las siguientes opciones de Cordon and dren para especificar cuándo y cómo se terminan los nodos de trabajador:

  • Período de gracia de expulsión (minutos): período de tiempo que se permite conectar y drenar nodos de trabajador antes de terminarlos. Acepte el valor por defecto (60 minutos) o especifique una alternativa. Por ejemplo, al reducir verticalmente un pool de nodos o cambiar su configuración de ubicación, puede que desee permitir 30 minutos para conectar nodos de trabajador y drenarlos de sus cargas de trabajo. Para terminar los nodos de trabajador inmediatamente, sin conectarlos ni drenarlos, especifique 0 minutos.
  • Forzar finalización después del período de gracia: indica si se deben terminar los nodos de trabajador al final del período de gracia de expulsión, incluso si no se han conectado y drenado correctamente. Por defecto, esta opción no está seleccionada.

    Seleccione esta opción si siempre desea que los nodos de trabajador terminen al final del período de gracia de desalojo, incluso si no se han conectado y drenado correctamente.

    Anule la selección de esta opción si no desea que los nodos de trabajador que no se han conectado y drenado correctamente se terminen al final del período de gracia de desalojo. Los pools de nodos que contienen nodos de trabajador que no se han podido terminar en el período de gracia de expulsión tienen el estado Necesita atención. Consulte Supervisión de clusters.

Un pool de nodos con el estado Necesita atención indica que uno o más nodos de trabajador del pool de nodos no han podido expulsar todos los pods que se ejecutan en él dentro del período de gracia de expulsión. El estado de la solicitud de trabajo que inició la operación de terminación se establece en Con fallos. Puede ver el motivo del fallo, incluidos los pods específicos que no se pueden expulsar, en los logs de solicitud de trabajo (consulte Visualización de solicitudes de trabajo). Hay una serie de posibles razones por las que un pod no puede ser desalojado, incluidos los presupuestos de interrupción de pod restrictivos. Para obtener más información, consulte Programación, preferencia y expulsión en la documentación de Kubernetes.

Para resolver el estado Necesita atención de un pool de nodos y terminar los nodos de trabajador afectados, realice una de las siguientes acciones:

  • Vuelva a ejecutar el comando original y seleccione la opción Forzar terminación después del período de gracia. Los nodos se terminan al final del período de gracia de desalojo, incluso si no han sido acordonados y drenados con éxito.
  • Examine el log de solicitud de trabajo para determinar el motivo del fallo de expulsión, solucione el motivo (por ejemplo, mediante la creación de un presupuesto de interrupción de pod menos restrictivo) y vuelva a ejecutar el comando original.

Uso de la CLI para resolver el estado "Necesita atención" de un pool de nodos

Para utilizar la CLI para resolver el estado Necesita atención de un pool de nodos y terminar los nodos de trabajador afectados, introduzca:

oci ce node-pool get --node-pool-id <nodepool-ocid> | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'

donde --node-pool-id <nodepool-ocid> es el OCID del pool de nodos con el estado Necesita atención.

Por ejemplo:

oci ce node-pool get --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'

La respuesta al comando muestra los nodos de trabajador actualmente en estado de error de nodo, junto con una explicación. Por ejemplo:

{
	"state": "NEEDS_ATTENTION",
	"nodes": {
		"id": "ocid1.instance.oc1.iad.anu___4cq",
		"node-error":

		{
			"code": "PodEvictionFailureError",
			"message": "Pod(s) {sigterm - app - 55 c4f4f657 - wccqn} of Node ocid1.instance.oc1.iad.anuwc______4cq could not be evicted.",
			"opc-request-id": null,
			"status": null
		}
	}
}

En este ejemplo, puede ver que no se ha podido expulsar un pod del nodo de trabajador dentro del período de gracia de expulsión. Como resultado, no se pudo terminar el nodo de trabajador. Es su responsabilidad identificar por qué la cápsula no pudo ser desalojada y luego solucionar el problema subyacente. Por ejemplo, mediante la creación de un presupuesto de interrupción de pod menos restrictivo.

Una vez solucionado el problema, puede continuar y suprimir el nodo de trabajador introduciendo:

oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid>

Por ejemplo:

oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq

Si desea forzar la supresión del nodo de trabajador sin cordonar y drenar el nodo de trabajador y sin corregir el problema subyacente, introduzca:

oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid> --override-eviction-grace-duration PT0M

donde --override-eviction-grace-duration PT0M establece el período de gracia de expulsión en 0 minutos.

Por ejemplo:

oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq --override-eviction-grace-duration PT0M

Pools de nodos con quantityPerSubnet definido en 1 o más

Al crear y actualizar pools de nodos en versiones anteriores de Container Engine for Kubernetes, ha especificado cuántos nodos de trabajador desea en un pool de nodos introduciendo un valor para la propiedad Cantidad por subred (quantityPerSubnet en la API).

En las versiones más recientes de Container Engine for Kubernetes, especifique cuántos nodos de trabajador desea en un pool de nodos introduciendo un valor para la propiedad Número de nodos (size en la API).

Tenga en cuenta que solo puede suprimir nodos de trabajador específicos (y seleccionar las opciones Cordón y drenaje) al suprimir de pools de nodos que tengan Cantidad por subred (quantityPerSubnet) definida en cero o nula. Para suprimir nodos de trabajador específicos (y seleccionar las opciones Cordón y drenaje) de un pool de nodos anterior que tenga Cantidad por subred (quantityPerSubnet) definida en 1 o más, primero debe definir Cantidad por subred (quantityPerSubnet) en cero o nulo. Si ha definido Cantidad por subred (quantityPerSubnet) en cero o nulo, puede especificar el número de nodos de trabajador introduciendo un valor para Número de nodos (size) en su lugar. A partir de ese momento, puede suprimir nodos de trabajador específicos (y seleccionar las opciones Cordon y drenaje).

Para averiguar el valor de Cantidad por subred (quantityPerSubnet) para un pool de nodos, introduzca el siguiente comando:

oci ce node-pool get --node-pool-id <node-pool-ocid>