Esta página explica cómo actualizar un clúster de Kubernetes creado con kubeadm desde la versión
1.35.x a la versión 1.36.x y desde la versión
1.36.x a la 1.36.y (donde y > x). No se admite omitir
versiones MENORES al actualizar. Para más detalles, visita la política de desviación de versiones.
Para ver información sobre cómo actualizar clústeres creados con versiones más antiguas de kubeadm, consulta en su lugar las siguientes páginas:
El proyecto de Kubernetes recomienda actualizar cuanto antes a la última versión de parche, así como asegurarte de que ejecutas una versión menor de Kubernetes con soporte. Seguir esta recomendación te ayuda a mantener la seguridad.
En líneas generales, el proceso de actualización sigue los siguientes pasos:
kubeadm upgrade no toca tus cargas de trabajo, solo los componentes internos de Kubernetes, pero las copias de seguridad son siempre una buena práctica.systemctl status kubelet o ver los logs del servicio con journalctl -xeu kubelet.kubeadm upgrade admite --config con un
tipo de la API UpgradeConfiguration que puede
usarse para configurar el proceso de actualización.kubeadm upgrade no admite la reconfiguración de un clúster existente. Sigue en su lugar los pasos de
reconfigurando un clúster de kubeadm.Como el pod estático del kube-apiserver se ejecuta en todo momento (incluso si has
drenado el nodo), cuando realizas una actualización de kubeadm que incluye una
actualización del etcd, las peticiones al servidor se quedarán bloqueadas mientras
se reinicia el nuevo pod estático del etcd. Como solución alternativa, es posible detener
activamente el proceso kube-apiserver unos segundos antes de lanzar el comando
kubeadm upgrade apply. Esto permite completar las peticiones en curso y cerrar las
conexiones existentes, y minimiza las consecuencias de la indisponibilidad del etcd. Para ello,
ejecuta los siguientes comandos en los nodos controladores:
killall -s SIGTERM kube-apiserver # provoca un apagado controlado de kube-apiserver
sleep 20 # espera un poco para permitir que se completen las peticiones en curso
kubeadm upgrade ... # ejecuta un comando de actualización de kubeadm
Si usas los repositorios de paquetes gestionados por la comunidad (pkgs.k8s.io), necesitas
habilitar el repositorio de paquetes de la versión menor de Kubernetes deseada. Esto se explica en el documento:
cambiando el repositorio de paquetes de Kubernetes.
apt.kubernetes.io y yum.kubernetes.io) han sido declarados obsoletos y congelados a partir del 13 de septiembre de 2023. Se recomienda encarecidamente y se requiere el uso de los nuevos repositorios de paquetes alojados en pkgs.k8s.io para poder instalar las versiones de Kubernetes lanzadas después del 13 de septiembre de 2023. Los repositorios heredados obsoletos y sus contenidos podrían ser eliminados en cualquier momento en el futuro y sin previo aviso. Los nuevos repositorios de paquetes ofrecen descargas para las versiones de Kubernetes a partir de la v1.24.0.Encuentra la última versión de parche de Kubernetes 1.36 usando el gestor de paquetes del sistema operativo:
# Busca la última versión 1.36 en la lista.
# Debería parecerse a 1.36.x-*, donde x es el último parche.
sudo apt update
sudo apt-cache madison kubeadm
Para sistemas con DNF:
# Busca la última versión 1.36 en la lista.
# Debería parecerse a 1.36.x-*, donde x es el último parche.
sudo yum list --showduplicates kubeadm --disableexcludes=kubernetes
Para sistemas con DNF5:
# Busca la última versión 1.36 en la lista.
# Debería parecerse a 1.36.x-*, donde x es el último parche.
sudo yum list --showduplicates kubeadm --setopt=disable_excludes=kubernetes
Si no ves la versión a la que esperas actualizar, verifica si se están usando los repositorios de paquetes de Kubernetes.
Los nodos controladores deben actualizarse de uno en uno.
Elige el nodo controlador que quieras actualizar primero. Debe tener el archivo /etc/kubernetes/admin.conf.
Para el primer nodo controlador
Actualiza kubeadm:
# sustituye x en 1.36.x-* por la última versión de parche
sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.36.x-*' && \
sudo apt-mark hold kubeadm
Para sistemas con DNF:
# sustituye x en 1.36.x-* por la última versión de parche
sudo yum install -y kubeadm-'1.36.x-*' --disableexcludes=kubernetes
Para sistemas con DNF5:
# sustituye x en 1.36.x-* por la última versión de parche
sudo yum install -y kubeadm-'1.36.x-*' --setopt=disable_excludes=kubernetes
Verifica que la descarga funciona y tiene la versión esperada:
kubeadm version
Verifica el plan de actualización:
sudo kubeadm upgrade plan
Este comando comprueba que tu clúster puede actualizarse y obtiene las versiones a las que puedes actualizar. También muestra una tabla con el estado de las versiones de configuración de los componentes.
kubeadm upgrade también renueva automáticamente los certificados que gestiona en este nodo.
Para desactivar la renovación de certificados puede usarse el flag --certificate-renewal=false.
Para más información, consulta la guía de gestión de certificados.Elige una versión a la que actualizar y ejecuta el comando apropiado. Por ejemplo:
# sustituye x por la versión de parche que elegiste para esta actualización
sudo kubeadm upgrade apply v1.36.x
Una vez que el comando termine, deberías ver:
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.36.x". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
kubeadm upgrade apply, sin importar si hubiera
otras instancias del plano de control sin actualizar. Esto puede causar problemas de
compatibilidad. Desde v1.28, kubeadm usa por defecto un modo que comprueba si todas las instancias del
plano de control se han actualizado antes de empezar a actualizar los complementos. Debes realizar la
actualización de todas las instancias del plano de control de forma secuencial o, al menos, asegurarte de que
la actualización de la última instancia del plano de control no comienza hasta que todas las demás
instancias se hayan actualizado por completo; la actualización de los complementos se realizará después
de actualizar la última instancia del plano de control.Actualiza manualmente el plugin de tu proveedor de CNI.
Tu proveedor de Container Network Interface (CNI) puede tener sus propias instrucciones de actualización. Consulta la página de complementos para encontrar tu proveedor de CNI y ver si se requieren pasos de actualización adicionales.
Este paso no es necesario en los demás nodos controladores si el proveedor de CNI se ejecuta como un DaemonSet.
Para los demás nodos controladores
Igual que en el primer nodo controlador, pero usa:
sudo kubeadm upgrade node
en lugar de:
sudo kubeadm upgrade apply
Además, ya no es necesario ejecutar kubeadm upgrade plan ni actualizar el plugin del proveedor de CNI.
Prepara el nodo para el mantenimiento marcándolo como no programable y desalojando las cargas de trabajo:
# sustituye <nodo-a-drenar> por el nombre del nodo que estás drenando
kubectl drain <nodo-a-drenar> --ignore-daemonsets
En los nodos Linux, el kubelet por defecto solo admite cgroups v2.
Para Kubernetes 1.36, la opción de configuración del kubelet FailCgroupV1 está establecida a true por defecto.
Para saber más, consulta la documentación de Kubernetes sobre la obsolescencia del cgroup v1.
Actualiza el kubelet y kubectl:
# sustituye x en 1.36.x-* por la última versión de parche
sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.36.x-*' kubectl='1.36.x-*' && \
sudo apt-mark hold kubelet kubectl
Para sistemas con DNF:
# sustituye x en 1.36.x-* por la última versión de parche
sudo yum install -y kubelet-'1.36.x-*' kubectl-'1.36.x-*' --disableexcludes=kubernetes
Para sistemas con DNF5:
# sustituye x en 1.36.x-* por la última versión de parche
sudo yum install -y kubelet-'1.36.x-*' kubectl-'1.36.x-*' --setopt=disable_excludes=kubernetes
Reinicia el kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
Vuelve a poner el nodo disponible marcándolo como programable:
# sustituye <nodo-a-reincorporar> por el nombre de tu nodo
kubectl uncordon <nodo-a-reincorporar>
Los nodos de trabajo deben actualizarse de uno en uno o en pequeños grupos, sin comprometer la capacidad mínima necesaria para ejecutar tus cargas de trabajo.
Las siguientes páginas muestran cómo actualizar nodos de trabajo Linux y Windows:
Después de actualizar el kubelet en todos los nodos, verifica que todos los nodos vuelven a estar disponibles ejecutando el siguiente comando desde donde kubectl tenga acceso al clúster:
kubectl get nodes
La columna STATUS debería mostrar Ready para todos tus nodos, y el número de versión debería estar actualizado.
Si kubeadm upgrade falla y no revierte los cambios, por ejemplo debido a un apagado inesperado durante la ejecución, puedes ejecutar kubeadm upgrade de nuevo.
Este comando es idempotente y asegura que el estado real sea el que declaras.
Para recuperarte de un estado erróneo, también puedes ejecutar sudo kubeadm upgrade apply --force sin cambiar la versión que ejecuta tu clúster.
Durante la actualización, kubeadm escribe los siguientes directorios de copia de seguridad bajo /etc/kubernetes/tmp:
kubeadm-backup-etcd-<fecha>-<hora>kubeadm-backup-manifests-<fecha>-<hora>kubeadm-backup-etcd contiene una copia de seguridad de los datos del miembro local del etcd de este nodo controlador.
En caso de que falle una actualización del etcd y la reversión automática no funcione, el contenido de esta carpeta
puede restaurarse manualmente en /var/lib/etcd. Si se usa un etcd externo, esta carpeta de copia de seguridad estará vacía.
kubeadm-backup-manifests contiene una copia de seguridad de los archivos de manifiesto de los pods estáticos de este nodo controlador.
En caso de que falle una actualización y la reversión automática no funcione, el contenido de esta carpeta puede
restaurarse manualmente en /etc/kubernetes/manifests. Si por alguna razón no hay diferencias entre el archivo de
manifiesto de un componente antes y después de la actualización, no se escribirá un archivo de copia de seguridad para él.
/etc/kubernetes/tmp permanecerá,
y estos archivos de copia de seguridad deberán limpiarse manualmente.kubeadm upgrade apply hace lo siguiente:
ReadyCoreDNS y kube-proxy y se asegura de que se crean todas las reglas RBAC necesarias.kubeadm upgrade node hace lo siguiente en los demás nodos controladores:
ClusterConfiguration de kubeadm del clúster.kubeadm upgrade node hace lo siguiente en los nodos de trabajo:
ClusterConfiguration de kubeadm del clúster.