Añadir nodos de trabajo Linux

Añadir nodos de trabajo Linux

Esta página explica cómo añadir nodos de trabajo Linux a un clúster de kubeadm.

Antes de empezar

  • Para cada nodo de trabajo a añadir al clúster, debes tener instalados los componentes necesarios según Instalando kubeadm, como kubeadm, el kubelet y un runtime de contenedores.
  • Dispones de un clúster de kubeadm en ejecución, creado con kubeadm init y siguiendo los pasos del documento Creando un clúster con kubeadm.
  • Dispones de acceso de superusuario al nodo.

Añadiendo nodos de trabajo Linux

Para añadir nuevos nodos de trabajo Linux a tu clúster, haz lo siguiente en cada máquina:

  1. Conéctate a la máquina usando SSH u otro método.
  2. Ejecuta el comando que mostró kubeadm init en su salida. Por ejemplo:
sudo kubeadm join --token <token> <host-del-plano-de-control>:<puerto-del-plano-de-control> --discovery-token-ca-cert-hash sha256:<hash>

Información adicional sobre kubeadm join

Nota:

Para especificar una tupla IPv6, en <host-del-plano-de-control>:<puerto-del-plano-de-control> debes escribir la dirección IPv6 entre corchetes, por ejemplo: [2001:db8::101]:2073.

Si no tienes el token, puedes obtenerlo ejecutando el siguiente comando en el nodo controlador:

# Ejecuta esto en un nodo controlador
sudo kubeadm token list

La salida es similar a esta:

TOKEN                    TTL  EXPIRES              USAGES           DESCRIPTION            EXTRA GROUPS
8ewj1p.9r9hcjoqgajrj4gi  23h  2018-06-12T02:51:28Z authentication,  The default bootstrap  system:
                                                   signing          token generated by     bootstrappers:
                                                                    'kubeadm init'.        kubeadm:
                                                                                           default-node-token

Por defecto, los tokens para añadir nodos expiran a las 24 horas. Si vas a añadir un nodo al clúster después de que el token actual haya expirado, puedes crear un token nuevo ejecutando el siguiente comando en el nodo controlador:

# Ejecuta esto en un nodo controlador
sudo kubeadm token create

La salida es similar a esta:

5didvk.d09sbcov8ph2amjw

Para imprimir un comando kubeadm join generando a la vez un nuevo token, puedes usar:

sudo kubeadm token create --print-join-command

Si no tienes el valor de --discovery-token-ca-cert-hash, puedes obtenerlo ejecutando los siguientes comandos en el nodo controlador:

# Ejecuta esto en un nodo controlador
sudo cat /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey  | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'

La salida es similar a:

8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

La salida del comando kubeadm join debería parecerse a esto:

[preflight] Running pre-flight checks

... (log output of join workflow) ...

Node join complete:
* Certificate signing request sent to control-plane and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on control-plane to see this machine join.

Unos segundos más tarde, deberías ver este nodo en la salida de kubectl get nodes (por ejemplo, ejecutando kubectl en un nodo controlador).

Nota:

Como los nodos del clúster normalmente se inicializan de forma secuencial, es probable que todos los Pods del CoreDNS se ejecuten en el nodo controlador. Para proporcionar una mayor disponibilidad, reequilibra los Pods del CoreDNS con kubectl -n kube-system rollout restart deployment coredns después de haber añadido al menos un nuevo nodo.

¿Qué sigue?