Saltar al contenido

¿Cómo puedo comprobar, escalar, vaciar o eliminar mis nodos de trabajo en Amazon EKS?

5 minutos de lectura
0

He usado eksctl o la consola de Amazon Elastic Kubernetes Service (Amazon EKS) para comprobar, escalar, vaciar o eliminar mis nodos de trabajo.

Solución

Comprobación de los nodos de trabajo

Para generar un listado de los nodos de trabajo registrados en el plano de control de Amazon EKS, ejecuta el siguiente comando:

kubectl get nodes -o wide

En el resultado, puedes ver el nombre, la versión de Kubernetes, el sistema operativo (SO) y la dirección IP de los nodos de trabajo.

Para obtener información adicional sobre un nodo de trabajo específico, ejecuta el siguiente comando:

kubectl describe node/node_name

Nota: Sustituye node_name por el nombre de recurso de Amazon (ARN) de tu nodo de trabajo. Por ejemplo, ip-AA-BB-CC-DD.us-east-1.compute.internal.

El resultado muestra información sobre el nodo de trabajo, incluidas las etiquetas, los taints, la información del sistema y el estado.

Escalamiento de los nodos de trabajo

Nota: Si tus grupos de nodos aparecen en la consola de Amazon EKS, utiliza un grupo de nodos administrado para escalar los nodos de trabajo. De lo contrario, utiliza un grupo de nodos no administrado.

Utiliza uno de los siguientes métodos para escalar los nodos de trabajo.

Escalamiento de nodos de trabajo con eksctl

Para utilizar eksctl para escalar tus nodos de trabajo, administrados o no, ejecuta el siguiente comando:

eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName

Nota: Sustituye clusterName por el nombre de tu clúster, desiredCount por el número de nodos a los que escalar y nodegroupName por el nombre del grupo de nodos.

Escalamiento de nodos de trabajo sin eksctl

Para escalar tus nodos de trabajo administrados sin eksctl, edita la configuración del grupo de nodos.

Escalamiento de nodos de trabajo con CloudFormation

Para usar AWS CloudFormation para escalar tus nodos de trabajo no administrados, utiliza una plantilla de CloudFormation para iniciar tus nodos de trabajo para Windows o Linux. A continuación, modifica los parámetros NodeAutoScalingGroupDesiredCapacity, NodeAutoScalingGroupMinSize o NodeAutoScalingGroupMaxSize en tu pila de CloudFormation.

Vaciado de nodos de trabajo

Importante: La acción de vaciado aísla el nodo de trabajo, por lo que Kubernetes deja de programar nuevos pods en el nodo. Kubernetes elimina y evita que los pods que se ejecutan en el nodo de destino vacíen los nodos.

Puedes vaciar un grupo de nodos completo o un solo nodo de trabajo.

Vaciado de todo el grupo de nodos

Si usas eksctl para iniciar tus nodos de trabajo, ejecuta el siguiente comando:

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName

Nota: Sustituye clusterName por el nombre de tu clúster y nodegroupName por el nombre de tu grupo de nodos.

Para desacordonar un grupo de nodos vaciado, ejecuta el siguiente comando:

eksctl drain nodegroup --cluster=clusterName --name=nodegroupName --undo

Nota: Sustituye clusterName por el nombre de tu clúster y nodegroupName por el nombre de tu grupo de nodos.

Si no has usado eksctl para iniciar tus nodos de trabajo, ejecuta el siguiente script para vaciar todos los nodos de una versión específica de Kubernetes:

#!/bin/bash  K8S_VERSION=1.18.8-eks-7c9bda
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Draining $node"
    kubectl drain $node --ignore-daemonsets --delete-local-data
done

Nota: Sustituye 1.18.8-eks-7c9bda por tu versión de Kubernetes.

Para desacordonar los nodos vaciados, ejecuta el siguiente script:

#!/bin/bash  K8S_VERSION=1.18.8-eks-7c9bda
nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}")
for node in ${nodes[@]}
do
    echo "Uncordon $node"
    kubectl uncordon $node
done

Nota: Sustituye 1.18.8-eks-7c9bda por tu versión de Kubernetes.

Para obtener el número de versión del nodo de trabajo, ejecuta el siguiente comando:

kubectl get nodesNAME

Nota: Sustituye nodesNAME por el nombre de tu nodo.

Resultado de ejemplo:

$ kubectl get nodesNAME                                      STATUS   ROLES    AGE     VERSION  
ip-ABC-ACB-DE-ABC.ec2.internal            Ready    <none>   6d4h    v1.18.8-eks-7c9bda
ip-ABC-ABC-DE-ABC.ec2.internal            Ready    <none>   6d4h    v1.18.8-eks-7c9bda

El número de versión aparece en la columna VERSION.

Vaciado de un único nodo de trabajo

Si no usas eksctl para iniciar tus nodos de trabajo o vaciar un nodo concreto, aísla debidamente tu nodo de trabajo. Ejecuta el siguiente comando:

kubectl drain node_name --ignore-daemonsets

Nota: Sustituye node_name por el nombre de tu nodo.

Para deshacer el aislamiento, ejecuta el siguiente comando:

kubectl uncordon node_name

Nota: Sustituye node_name por el nombre de tu nodo.

También puedes migrar las aplicaciones existentes a un nuevo grupo de nodos de trabajo.

Eliminación de los nodos de trabajo

Importante: No puedes deshacer una acción de eliminación.

Si usas eksctl, ejecuta el siguiente comando:

eksctl delete nodegroup --cluster=clusterName --name=nodegroupName

Nota: Sustituye clusterName por el nombre de tu clúster y nodegroupName por el nombre de tu grupo de nodos.

Si tienes un grupo de nodos administrado, consulta Eliminación de un grupo de nodos administrado de tu clúster.

Si tienes un grupo de nodos no administrado y has usado una plantilla de CloudFormation para iniciar los nodos de trabajo, elimina la pila del grupo de nodos.

Si tienes un grupo de nodos no administrado, pero no has usado una plantilla de CloudFormation, elimina el grupo de escalamiento automático de Amazon Elastic Compute Cloud (Amazon EC2). Si no has usado un grupo de Amazon EC2 Auto Scaling, termina la instancia.

OFICIAL DE AWSActualizada hace un año