@media screen and (min-width: 580px) { .flotantewhatsapp{ display:none; } }

Compartir por WhatsApp

Inicio - Kubernetes - Kubernetes agregar nodo a cluster existente
kubernetes-agregar-nodo-a-cluster-existente-1

Kubernetes agregar nodo a cluster existente

Kubernetes agregar nodo a cluster existente

Hoy voy a explicaros como eliminar un nodo en Kubernetes, y agregar uno nuevo con el mismo nombre.

Mi situación en el lab Kubernetes con Debian sobre Proxmox, es que tengo 3 nodos, un master y dos nodos. Uno de estos últimos, me da problemas y se queda con un estado NotReady, así que no puedo generar Pods en él. No he logrado revertir el estado, ni reiniciando servicios, no funciona el upgrade de la versión en él,…vamos todo lo que se me ha ocurrido no ha funcionado.

Así que voy a clonar el nodo 2, le cambio el hostname y la IP por el original.

Partimos de esta situación:

raulunzue@KBMASTER:~$ kubectl get node
NAME           STATUS     ROLES    AGE   VERSION
kbmaster       Ready      master   69d   v1.17.4
kubernetes01   NotReady     69d   v1.17.0
kubernetes02   Ready     69d   v1.17.4

Así que elimino el nodo del cluster:

raulunzue@KBMASTER:~$ kubectl delete node kubernetes01
node "kubernetes01" deleted

Y voy recopilando datos que luego me servirán:

raulunzue@KBMASTER:~$ kubectl cluster-info
Kubernetes master is running at https://192.168.2.193:6443
KubeDNS is running at https://192.168.2.193:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use ‘kubectl cluster-info dump’.

Como el token caduca en unas horas, para agregar el nodo, genero uno nuevo desde el master:

raulunzue@KBMASTER:~$ kubeadm token list
raulunzue@KBMASTER:~$ kubeadm token create --print-join-command
W0317 00:49:40.568138   14414 validation.go:28] Cannot validate kubelet config - no validator is available
W0317 00:49:40.568484   14414 validation.go:28] Cannot validate kube-proxy config - no validator is available
kubeadm join 192.168.2.193:6443 --token w3zozn.ta0i47219yz2s14s     --discovery-token-ca-cert-hash sha256:44706d8ad99b18b8a18e78260b4c42a916271fcc152a30cc3201d2b3b212ed78

Ahora si puedo listarlo:

raulunzue@KBMASTER:~$ kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
w3zozn.ta0i47219yz2s14s 2h 2020-03-18T00:49:40+01:00 authentication,signing system:bootstrappers:kubeadm:default-node-token

Reseteamos las configuraciones del nodo nuevo, ya que es un clon del nodo 2:

root@KUBERNETES01:~# kubeadm reset
[reset] WARNING: Changes made to this host by 'kubeadm init' or 'kubeadm join' will be reverted.
[reset] Are you sure you want to proceed? [y/N]: y
[preflight] Running pre-flight checks
W0317 00:53:40.441808    4512 removeetcdmember.go:79] [reset] No kubeadm config, using etcd pod spec to get data directory
[reset] No etcd config found. Assuming external etcd
[reset] Please, manually reset etcd to prevent further issues
[reset] Stopping the kubelet service
[reset] Unmounting mounted directories in "/var/lib/kubelet"
[reset] Deleting contents of config directories: [/etc/kubernetes/manifests /etc/kubernetes/pki] [reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf] [reset] Deleting contents of stateful directories: [/var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni]

The reset process does not clean CNI configuration. To do so, you must remove /etc/cni/net.d

The reset process does not reset or clean up iptables rules or IPVS tables.
If you wish to reset iptables, you must do so manually by using the "iptables" command.

If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar)
to reset your system's IPVS tables.

The reset process does not clean your kubeconfig files and you must remove them manually.
Please, check the contents of the $HOME/.kube/config file.

Agregamos el nodo:

root@KUBERNETES01:~# kubeadm join 192.168.2.193:6443 --token w3zozn.ta0i47219yz2s14s --discovery-token-ca-cert-hash sha256:44706d8ad99b18b8a18e78260b4c42a916271fcc152a30cc3201d2b3b212ed78
W0317 00:53:56.230861    4616 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.17" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

Volvemos a comprobar que ya está el nodo en Ready y en la versión actualizada:

raulunzue@KBMASTER:~$ kubectl get node
NAME           STATUS   ROLES    AGE    VERSION
kbmaster       Ready    master   69d    v1.17.4
kubernetes01   Ready      7m7s   v1.17.4
kubernetes02   Ready      69d    v1.17.4

Si escalo un pod, ya se ejecuta en ambos nodos:

raulunzue@KBMASTER:~$ kubectl scale --replicas=6 deployment hello-world-deployment-elblogdenegu
deployment.apps/hello-world-deployment-elblogdenegu scaled

Comprobamos:

raulunzue@KBMASTER:~$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hello-world-deployment-elblogdenegu-6dbbf956cf-2rmxv 1/1 Running 0 27s 10.69.1.3 kubernetes01
hello-world-deployment-elblogdenegu-6dbbf956cf-7h6sm 1/1 Running 0 27s 10.69.1.2 kubernetes01
hello-world-deployment-elblogdenegu-6dbbf956cf-hs78p 1/1 Running 0 27s 10.69.1.4 kubernetes01
hello-world-deployment-elblogdenegu-6dbbf956cf-hxds8 1/1 Running 5 45d 10.69.2.29 kubernetes02
hello-world-deployment-elblogdenegu-6dbbf956cf-j4fs6 1/1 Running 0 27s 10.69.2.32 kubernetes02
hello-world-deployment-elblogdenegu-6dbbf956cf-rg882 1/1 Running 1 59m 10.69.2.30 kubernetes02

¿Te ha gustado la entrada SÍGUENOS EN TWITTER?

Acerca de Raul Unzue Pulido

Administrador de sistemas virtuales e infraestructuras IT, linuxero y entusiasta de la tecnología.

Compruebe también

linux-vaciar-ficheros

Linux: Vaciar fichero

Linux: Vaciar fichero Cuando administras sistemas Linux, puede pasar que tengas que lidiar con ficheros …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

seis + siete =

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies
Blog Maquinas Virtuales - El Blog de Negu