Docker swarm: Update Cluster
Hace unas semanas os presenté mi cluster Docker Swarm con Raspberry Pi 4 y Pi Zero 2w, quien me iba a decir que tenía un tesoro con algo tan pequeño. Lo digo, porque lo compré cuando aún había chips para comprarlos sin dejarte un riñón… 🙂
Hoy quiero mostraros como actualizar la versión de todos los nodos para ir a la última versión de Docker.
El comando que usaremos será update, que lanzaremos desde uno de los MASTER:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pi@p0:~ $ sudo docker swarm Usage: docker swarm COMMAND Manage Swarm Commands: ca Display and rotate the root CA init Initialize a swarm join Join a swarm as a node and/or manager join-token Manage join tokens leave Leave the swarm unlock Unlock swarm unlock-key Manage the unlock key update Update the swarm Run 'docker swarm COMMAND --help' for more information on a command. |
Podéis ver la información en https://docs.docker.com/engine/reference/commandline/swarm_update/
Lo primero que haremos es ver que todos los nodos están levantados y revisamos la versión en la que se encuentran:
1 2 3 4 5 6 7 |
pi@p0:~ $ sudo docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION zittfqgksbuh365582pc34y9z * p0 Ready Active Leader 20.10.11 cxksjfkdyr96n0u5j9u82gcr1 p1 Ready Active 20.10.11 v1ysx37y8yyvcya1c9yaer6x9 p2 Ready Active 20.10.11 tfb79sopkpdagx2s8867s58gj p3 Ready Active 20.10.11 zsb4bg5oih6h2ah5ve1z6huor p4 Ready Active 20.10.11 |
Podemos degradar o pausar los nodos para poder actualizarlos:
DOCUMENTACION: https://docs.docker.com/engine/swarm/manage-nodes/#change-node-availability
Pauso el nodo a actualizar:
1 2 3 4 5 6 7 8 9 |
root@p0:~# docker node update --availability pause p2 p2 root@p0:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION zittfqgksbuh365582pc34y9z * p0 Ready Active Leader 20.10.12 cxksjfkdyr96n0u5j9u82gcr1 p1 Ready Active 20.10.12 v1ysx37y8yyvcya1c9yaer6x9 p2 Ready Pause 20.10.11 tfb79sopkpdagx2s8867s58gj p3 Ready Active 20.10.11 zsb4bg5oih6h2ah5ve1z6huor p4 Ready Active 20.10.11 |
Si es un nodo MASTER puedes degradarlo:
1 2 3 4 5 6 7 8 9 |
root@p0:~# docker node update --availability drain p2 p2 root@p0:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION zittfqgksbuh365582pc34y9z * p0 Ready Active Leader 20.10.12 cxksjfkdyr96n0u5j9u82gcr1 p1 Ready Active 20.10.12 v1ysx37y8yyvcya1c9yaer6x9 p2 Ready Drain 20.10.11 tfb79sopkpdagx2s8867s58gj p3 Ready Active 20.10.11 zsb4bg5oih6h2ah5ve1z6huor p4 Ready Active 20.10.11 |
Una vez degradado o pausado, lanzamos un update del sistema en cada nodo o de los paquetes de docker que nos interesan. Yo aprovecho a parchear todo el nodo. Tener en cuenta que los containers se moverán de nodo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
root@p0:~# apt update Des:1 http://archive.raspberrypi.org/debian buster InRelease [32,6 kB] Des:2 https://download.docker.com/linux/raspbian buster InRelease [33,6 kB] Des:3 https://download.docker.com/linux/raspbian buster/stable armhf Packages [16,3 kB] Des:4 http://raspbian.raspberrypi.org/raspbian buster InRelease [15,0 kB] Des:5 https://repo.zabbix.com/zabbix/5.4/raspbian buster InRelease [4.931 B] Des:6 http://archive.raspberrypi.org/debian buster/main armhf Packages [393 kB] Des:7 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13,0 MB] Des:8 https://repo.zabbix.com/zabbix/5.4/raspbian buster/main Sources [1.234 B] Des:9 https://repo.zabbix.com/zabbix/5.4/raspbian buster/main armhf Packages [5.107 B] Descargados 13,5 MB en 8s (1.718 kB/s) Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Se pueden actualizar 343 paquetes. Ejecute «apt list --upgradable» para verlos. root@p0:~# apt list --upgradable |
Podemos ver que existen los paquetes de docker en una nueva versión con este comando:
1 2 3 4 5 6 7 |
root@p0:~# apt list --upgradable Listando... Hecho .... docker-ce-cli/buster 5:20.10.12~3-0~raspbian-buster armhf [actualizable desde: 5:20.10.11~3-0~raspbian-buster] docker-ce-rootless-extras/buster 5:20.10.12~3-0~raspbian-buster armhf [actualizable desde: 5:20.10.11~3-0~raspbian-buster] docker-ce/buster 5:20.10.12~3-0~raspbian-buster armhf [actualizable desde: 5:20.10.11~3-0~raspbian-buster] .... |
Actualizamos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
root@p2:~# apt upgrade Leyendo lista de paquetes... Hecho Creando árbol de dependencias Leyendo la información de estado... Hecho Calculando la actualización... Hecho Se actualizarán los siguientes paquetes: alsa-utils apt apt-utils avahi-daemon base-files bind9-host bluez bluez-firmware debconf debconf-i18n debconf-utils device-tree-compiler distro-info-data docker-ce docker-ce-cli docker-ce-rootless-extras file firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek groff-base iproute2 iputils-ping isc-dhcp-client isc-dhcp-common klibc-utils libapt-inst2.0 libapt-pkg5.0 libasound2 libasound2-data libavahi-common-data libavahi-common3 libavahi-core7 libbind9-161 libbsd0 libc-bin libc-dev-bin libc-l10n libc6 libc6-dbg libc6-dev libcurl3-gnutls libdns-export1104 libdns1104 libexpat1 libgcrypt20 libgnutls30 libgssapi-krb5-2 libhogweed4 libicu63 libisc-export1100 libisc1100 libisccc161 libisccfg163 libk5crypto3 libklibc libkrb5-3 libkrb5support0 libldap-2.4-2 libldap-common liblwres161 liblz4-1 libmagic-mgc libmagic1 libnettle6 libnftnl11 libntfs-3g883 libp11-kit0 libpam-systemd libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 libpython3.7 libpython3.7-minimal libpython3.7-stdlib libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc libraspberrypi0 libssl1.1 libsvn1 libsystemd0 libudev1 libx11-6 libx11-data libxml2 libzstd1 linux-libc-dev locales multiarch-support ntfs-3g openssh-client openssh-server openssh-sftp-server openssl pi-bluetooth policykit-1 psmisc python-apt-common python-rpi.gpio python3-apt python3-debconf python3.7 python3.7-minimal raspberrypi-bootloader raspberrypi-kernel raspberrypi-net-mods raspberrypi-sys-mods raspi-config rpi-eeprom rpi-update rpi.gpio-common rpiboot screen ssh subversion sudo systemd systemd-sysv tzdata udev unzip wpasupplicant zabbix-agent 126 actualizados, 0 nuevos se instalarán, 0 para eliminar y 0 no actualizados. Se necesita descargar 260 MB de archivos. Se utilizarán 25,3 MB de espacio de disco adicional después de esta operación. ¿Desea continuar? [S/n] |
Una vez actualizado con “apt upgrade”, activamos nuevamente el nodo:
1 2 3 4 5 6 7 8 9 |
root@p0:~# docker node update --availability active p2 p2 root@p0:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION zittfqgksbuh365582pc34y9z * p0 Ready Active Leader 20.10.12 cxksjfkdyr96n0u5j9u82gcr1 p1 Ready Active 20.10.12 v1ysx37y8yyvcya1c9yaer6x9 p2 Ready Active 20.10.11 tfb79sopkpdagx2s8867s58gj p3 Ready Active 20.10.11 zsb4bg5oih6h2ah5ve1z6huor p4 Ready Active 20.10.11 |
Y repetimos la operativa hasta completar el resto del cluster. ¿Sencillo no?
1 2 3 4 5 6 7 |
root@p0:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION zittfqgksbuh365582pc34y9z * p0 Ready Active Leader 20.10.12 cxksjfkdyr96n0u5j9u82gcr1 p1 Ready Active 20.10.12 v1ysx37y8yyvcya1c9yaer6x9 p2 Ready Active 20.10.12 tfb79sopkpdagx2s8867s58gj p3 Ready Active 20.10.12 zsb4bg5oih6h2ah5ve1z6huor p4 Ready Active 20.10.12 |
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?