Kubernetes: Upgrade cluster Debian
Hoy voy a enseñaros un procedimiento bastante laborioso.
La idea es hacer un upgrade de un cluster Debian con Kubernetes. En el ejemplo que os voy a mostrar, existen 3 nodos:
- KBMASTER: Master
- KUBERNETES01: Worker
- KUBERNETES02: Worker
Todos en la versión 1.7.4 y vamos a pasar a la versión 1.8.2. Veréis que voy alternando entre usuario root y mi usuario de gestión del cluster. Así que vamos a ponernos manos a la obra:
Kubernetes: Upgrade Master
Nos conectamos al nodo Master y logueamos como root, para cancelar la retención de kubeadm que nos permitirá hacer un update:
raulunzue@KBMASTER:~$ sudo su -
root@KBMASTER:~# apt-mark unhold kubeadm
Se ha cancelado la retención de kubeadm.
Lanzamos un escaneo:
root@KBMASTER:~# apt-get update
Des:1 http://security.debian.org/debian-security buster/updates InRelease [65,4 kB]
Obj:2 http://deb.debian.org/debian buster InRelease
Des:3 http://deb.debian.org/debian buster-updates InRelease [49,3 kB]
Des:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8.993 B]
Des:5 http://security.debian.org/debian-security buster/updates/main Sources [116 kB]
Des:6 http://security.debian.org/debian-security buster/updates/main amd64 Packages [194 kB]
Des:7 http://security.debian.org/debian-security buster/updates/main Translation-en [104 kB]
Des:8 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [35,3 kB]
Descargados 573 kB en 2s (247 kB/s)
Leyendo lista de paquetes... Hecho
Podemos probar a ver qué versión está disponible:
root@KBMASTER:~# apt-get changelog kubeadm
E: Fallo al obtener changelog:/kubeadm.changelog No está disponible el informe de cambios para kubeadm=1.18.2-00
Y forzamos el upgrade:
root@KBMASTER:~# apt-get update && apt-get install -y kubeadm=1.18.2-00 && apt-mark hold kubeadm
Obj:1 http://security.debian.org/debian-security buster/updates InRelease
Obj:2 http://deb.debian.org/debian buster InRelease
Obj:3 http://deb.debian.org/debian buster-updates InRelease
Obj:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Leyendo lista de paquetes... Hecho
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
kubeadm
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 24 no actualizados.
Se necesita descargar 8.162 kB de archivos.
Se utilizarán 467 kB de espacio de disco adicional después de esta operación.
Des:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.18.2-00 [8.162 kB]
Descargados 8.162 kB en 1s (5.832 kB/s)
apt-listchanges: Leyendo lista de cambios...
(Leyendo la base de datos ... 135789 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../kubeadm_1.18.2-00_amd64.deb ...
Desempaquetando kubeadm (1.18.2-00) sobre (1.17.4-00) ...
Configurando kubeadm (1.18.2-00) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
kubeadm fijado como retenido.
Proseguimos con el proceso con estos comandos:
root@KBMASTER:~# apt-mark unhold kubelet && apt-get update && apt-get install -y kubelet=1.18.2-00 && apt-mark hold kubelet
kubelet ya no estaba retenido.
Obj:1 http://security.debian.org/debian-security buster/updates InRelease
Obj:2 http://deb.debian.org/debian buster InRelease
Obj:3 http://deb.debian.org/debian buster-updates InRelease
Obj:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Leyendo lista de paquetes... Hecho
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
kubelet
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 23 no actualizados.
Se necesita descargar 19,5 MB de archivos.
Se utilizarán 1.646 kB de espacio de disco adicional después de esta operación.
Des:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubelet amd64 1.18.2-00 [19,5 MB]
Descargados 19,5 MB en 2s (12,0 MB/s)
apt-listchanges: Leyendo lista de cambios...
(Leyendo la base de datos ... 135789 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../kubelet_1.18.2-00_amd64.deb ...
Desempaquetando kubelet (1.18.2-00) sobre (1.17.4-00) ...
Configurando kubelet (1.18.2-00) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
kubelet fijado como retenido.
Reiniciamos el servicio:
root@KBMASTER:~# systemctl restart kubelet
Kubernetes: Upgrade el resto de nodos Master
Si tenéis más nodos master podéis usar estos comandos:
$ ssh raulunzue@kbmaster02
$ kubeadm upgrade node experimental-control-plane
$ ssh raulunzue@kbmaster03
$ kubeadm upgrade node experimental-control-plane
Kubernetes: Upgrade Workers
Ya hemos actualizado el master, ahora nos conectamos a un nodo Worker. Os dejo el procedimiento:
raulunzue@KUBERNETES01:~$ sudo su -
[sudo] password for raulunzue:
root@KUBERNETES01:~# apt-mark unhold kubeadm
kubeadm ya no estaba retenido.
root@KUBERNETES01:~# apt-get update
Obj:1 http://security.debian.org/debian-security buster/updates InRelease
Obj:3 http://deb.debian.org/debian buster InRelease
Obj:4 http://deb.debian.org/debian buster-updates InRelease
Obj:2 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Leyendo lista de paquetes... Hecho
root@KUBERNETES01:~# apt-get install -y kubeadm=1.18.2-00 && apt-mark hold kubeadm
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
kubeadm
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 24 no actualizados.
Se necesita descargar 8.162 kB de archivos.
Se utilizarán 467 kB de espacio de disco adicional después de esta operación.
Des:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.18.2-00 [8.162 kB]
Descargados 8.162 kB en 1s (6.110 kB/s)
apt-listchanges: Leyendo lista de cambios...
(Leyendo la base de datos ... 135633 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../kubeadm_1.18.2-00_amd64.deb ...
Desempaquetando kubeadm (1.18.2-00) sobre (1.17.4-00) ...
Configurando kubeadm (1.18.2-00) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
kubeadm fijado como retenido.
raulunzue@KBMASTER:~$ kubectl drain kubernetes01 --ignore-daemonsets
node/kubernetes01 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-mwtn4, kube-system/kube-proxy-w48xm
node/kubernetes01 drained
root@KUBERNETES01:~# kubeadm upgrade node
[upgrade] Reading configuration from the cluster...
[upgrade] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade] Skipping phase. Not a control plane node.
[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"
[upgrade] The configuration for this node was successfully updated!
[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
root@KUBERNETES01:~# apt-mark unhold kubelet
kubelet ya no estaba retenido.
root@KUBERNETES01:~# apt-get update
Obj:1 http://security.debian.org/debian-security buster/updates InRelease
Obj:2 http://deb.debian.org/debian buster InRelease
Obj:3 http://deb.debian.org/debian buster-updates InRelease
Obj:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Leyendo lista de paquetes... Hecho
root@KUBERNETES01:~# apt-get install -y kubelet=1.18.2-00 && apt-mark hold kubelet
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
kubelet
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 23 no actualizados.
Se necesita descargar 19,5 MB de archivos.
Se utilizarán 1.646 kB de espacio de disco adicional después de esta operación.
Des:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubelet amd64 1.18.2-00 [19,5 MB]
Descargados 19,5 MB en 2s (12,6 MB/s)
apt-listchanges: Leyendo lista de cambios...
(Leyendo la base de datos ... 135633 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../kubelet_1.18.2-00_amd64.deb ...
Desempaquetando kubelet (1.18.2-00) sobre (1.17.4-00) ...
Configurando kubelet (1.18.2-00) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
kubelet fijado como retenido.
raulunzue@KBMASTER:~$ kubectl uncordon kubernetes01
node/kubernetes01 uncordoned
raulunzue@KBMASTER:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kbmaster Ready master 119d v1.18.2
kubernetes01 Ready 46d v1.18.2
kubernetes02 Ready 119d v1.17.4
Kubernetes: Actualización segundo Nodo(Worker)
Ya tenemos un nodo y el master, ahora vamos a por el segundo nodo:
raulunzue@KBMASTER:~$ ssh kubernetes02
raulunzue@kubernetes02's password:
Linux KUBERNETES02 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May 5 23:47:37 2020 from 192.168.2.193
raulunzue@KUBERNETES02:~$ apt-mark unhold kubeadm
kubeadm ya no estaba retenido.
raulunzue@KUBERNETES02:~$ sudo su -
[sudo] password for raulunzue:
root@KUBERNETES02:~# apt-mark unhold kubeadm
kubeadm ya no estaba retenido.
root@KUBERNETES02:~# apt-get update
Des:1 http://security.debian.org/debian-security buster/updates InRelease [65,4 kB]
Obj:2 http://deb.debian.org/debian buster InRelease
Des:3 http://deb.debian.org/debian buster-updates InRelease [49,3 kB]
Des:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8.993 B]
Des:5 http://security.debian.org/debian-security buster/updates/main Sources [116 kB]
Des:6 http://security.debian.org/debian-security buster/updates/main amd64 Packages [194 kB]
Des:7 http://security.debian.org/debian-security buster/updates/main Translation-en [104 kB]
Des:8 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [35,3 kB]
Descargados 573 kB en 2s (252 kB/s)
Leyendo lista de paquetes... Hecho
root@KUBERNETES02:~# apt-get install -y kubeadm=1.18.2-00 && apt-mark hold kubeadm
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
kubeadm
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 24 no actualizados.
Se necesita descargar 8.162 kB de archivos.
Se utilizarán 467 kB de espacio de disco adicional después de esta operación.
Des:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.18.2-00 [8.162 kB]
Descargados 8.162 kB en 3s (2.446 kB/s)
apt-listchanges: Leyendo lista de cambios...
(Leyendo la base de datos ... 135633 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../kubeadm_1.18.2-00_amd64.deb ...
Desempaquetando kubeadm (1.18.2-00) sobre (1.17.4-00) ...
Configurando kubeadm (1.18.2-00) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
kubeadm fijado como retenido.
root@KUBERNETES02:~# exit
cerrar sesión
raulunzue@KUBERNETES02:~$ exit
cerrar sesión
Connection to kubernetes02 closed.
raulunzue@KBMASTER:~$ kubectl drain kubernetes02 --ignore-daemonsets
node/kubernetes02 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-xcppv, kube-system/kube-proxy-r6nv9
evicting pod haproxy-controller/haproxy-ingress-596fb4b4f4-kn8qh
evicting pod haproxy-controller/ingress-default-backend-558fbc9b46-j5wfp
evicting pod kube-system/coredns-6955765f44-gwgk5
pod/haproxy-ingress-596fb4b4f4-kn8qh evicted
pod/coredns-6955765f44-gwgk5 evicted
pod/ingress-default-backend-558fbc9b46-j5wfp evicted
node/kubernetes02 evicted
raulunzue@KBMASTER:~$ ssh kubernetes02
raulunzue@kubernetes02's password:
Linux KUBERNETES02 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed May 6 00:11:02 2020 from 192.168.2.193
raulunzue@KUBERNETES02:~$ sudo su -
[sudo] password for raulunzue:
root@KUBERNETES02:~# kubeadm upgrade node
[upgrade] Reading configuration from the cluster...
[upgrade] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade] Skipping phase. Not a control plane node.
[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"
[upgrade] The configuration for this node was successfully updated!
[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
root@KUBERNETES02:~# apt-mark unhold kubelet
kubelet ya no estaba retenido.
root@KUBERNETES02:~# apt-get update
Obj:1 http://security.debian.org/debian-security buster/updates InRelease
Obj:2 http://deb.debian.org/debian buster InRelease
Obj:3 http://deb.debian.org/debian buster-updates InRelease
Obj:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Leyendo lista de paquetes... Hecho
root@KUBERNETES02:~# apt-get install -y kubelet=1.18.2-00 && apt-mark hold kubelet
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
kubelet
1 actualizados, 0 nuevos se instalarán, 0 para eliminar y 23 no actualizados.
Se necesita descargar 19,5 MB de archivos.
Se utilizarán 1.646 kB de espacio de disco adicional después de esta operación.
Des:1 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubelet amd64 1.18.2-00 [19,5 MB]
Descargados 19,5 MB en 2s (12,3 MB/s)
apt-listchanges: Leyendo lista de cambios...
(Leyendo la base de datos ... 135633 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../kubelet_1.18.2-00_amd64.deb ...
Desempaquetando kubelet (1.18.2-00) sobre (1.17.4-00) ...
Configurando kubelet (1.18.2-00) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
kubelet fijado como retenido.
root@KUBERNETES02:~# systemctl restart kubelet
root@KUBERNETES02:~# exit
cerrar sesión
raulunzue@KUBERNETES02:~$ exit
cerrar sesión
Connection to kubernetes02 closed.
raulunzue@KBMASTER:~$ kubectl uncordon kubernetes02
node/kubernetes02 uncordoned
raulunzue@KBMASTER:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kbmaster Ready master 119d v1.18.2
kubernetes01 Ready 46d v1.18.2
kubernetes02 Ready 119d v1.18.2
¿Te ha gustado la entrada SÍGUENOS EN TWITTER?
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?
Buen artículo sobre Upgrade cluster Debian, no sabia como actualizarlo y ahora gracias a tus conocimientos he podido hacerlo.