Cómo actualizar un clúster de Kubernetes creado con Kubeadm

Kubeadm es la herramienta oficial para instalar y mantener un clúster basado en la distribución predeterminada de Kubernetes. Los clústeres creados no se actualizan automáticamente y deshabilitar las actualizaciones de paquetes para los componentes de Kubernetes es parte del proceso de configuración. Esto significa que debe migrar manualmente su clúster cuando llegue una nueva versión de Kubernetes.

En este artículo, aprenderá los pasos involucrados en una actualización de Kubernetes al realizar una transición de v1.24 a v1.25 en Ubuntu 22.04. El proceso suele ser similar para cualquier versión secundaria de Kubernetes, pero siempre debe consultar la documentación oficial antes de comenzar, en caso de que una nueva versión tenga requisitos especiales.

Índice de contenidos
  1. Identificación de la versión precisa para instalar
  2. Actualización del plano de control
    1. Actualizar Kubeadm
    2. Crear el plan de actualización
    3. Aplicación del plan de actualización
  3. Actualización de nodos trabajadores
  4. Comprobación de su clúster
  5. Recuperación de una falla de actualización
  6. Resumen

Identificación de la versión precisa para instalar

El primer paso es determinar la versión a la que vas a actualizar. No puede omitir versiones secundarias; por ejemplo, no se admite pasar directamente de v1.23 a v1.25, por lo que debe elegir la versión de parche más reciente para la versión secundaria que sigue a la versión actual de su clúster.

Puede descubrir la última versión del parche con el siguiente comando:

$ apt-cache policy kubeadm | grep 1.25
1.25.1-00 500
1.25.0-00 500

Esto muestra que 1.25.1-00 es la versión más reciente de Kubernetes v1.25. Reemplazar 1.25 en el comando con la versión secundaria a la que se trasladará.

Actualización del plano de control

Complete esta sección en la máquina que ejecuta su plano de control. No toque los nodos trabajadores todavía: pueden continuar usando su versión actual de Kubernetes mientras se actualiza el plano de control. Si tiene varios nodos del plano de control, ejecute esta secuencia en el primero y siga el procedimiento del nodo de trabajo en la siguiente sección en los demás.

Actualizar Kubeadm

Primero libere la suspensión del paquete Kubeadm e instale la nueva versión. Especifique la versión exacta identificada anteriormente para que Apt no tome automáticamente la última, lo que podría ser un aumento de versión menor no compatible.

$ sudo apt update
$ sudo apt-mark unhold kubeadm
$ sudo apt install -y kubeadm=1.25.1-00

Ahora vuelva a aplicar la sujeción para que apt upgrade no entrega lanzamientos no deseados en el futuro:

$ sudo apt-mark hold kubeadm
kubeadm set on hold

Verifique que Kubeadm sea ahora la versión esperada:

$ kubeadm version --short
kubeadm version: &version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.1"...

Crear el plan de actualización

Kubeadm automatiza el proceso de actualización del plano de control. Primero usa el upgrade plan comando para establecer a qué versiones puede migrar. Esto verifica su clúster para asegurarse de que pueda aceptar la nueva versión.

$ sudo kubeadm upgrade plan

La salida es bastante larga, pero vale la pena inspeccionarla de cerca. La primera sección debe informar que todos los componentes de Kubernetes se actualizarán al número de versión que seleccionó anteriormente. También se pueden mostrar nuevas versiones para CoreDNS y etcd.

COMPONENT                 CURRENT   TARGET
kube-apiserver            v1.24.5   v1.25.1
kube-controller-manager   v1.24.5   v1.25.1
kube-scheduler            v1.24.5   v1.25.1
kube-proxy                v1.24.5   v1.25.1
CoreDNS                   v1.8.6    v1.9.3
etcd                      3.5.3-0   3.5.4-0

El final de la salida incluye una tabla que muestra los cambios de configuración necesarios. Ocasionalmente, es posible que deba realizar una acción manual para ajustar estos archivos de configuración y suministrarlos al clúster. Consulte la documentación de su versión si obtiene un "sí" en la columna "Actualización manual requerida".

API GROUP                 CURRENT VERSION   PREFERRED VERSION   MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io   v1alpha1          v1alpha1            no
kubelet.config.k8s.io     v1beta1           v1beta1             no

Este clúster ahora está listo para actualizarse. El plan ha confirmado que Kubernetes v1.25.1 está disponible y no se requieren acciones manuales. Compruebe que ha instalado la versión correcta de Kubeadm si no se produce ningún plan o aparecen errores. Es posible que esté intentando moverse entre más de una versión secundaria.

Aplicación del plan de actualización

Ahora puede indicarle a Kubeadm que proceda con la aplicación del plan de actualización ejecutando upgrade apply con el número de versión correcto:

$ sudo kubeadm upgrade apply v1.25.1

Aparecerá un mensaje de confirmación:

[upgrade/version] You have chosen to change the cluster version to "v1.25.1"
[upgrade/versions] Cluster version: v1.24.5
[upgrade/versions] kubeadm version: v1.25.1
[upgrade] Are you sure you want to proceed? [y/N]:

Prensa y para continuar con la actualización. El proceso puede tardar varios minutos mientras extrae las imágenes de los nuevos componentes y reinicia su plano de control. No podrá interactuar de manera confiable con la API de su clúster durante este tiempo, pero cualquier pod en ejecución debería permanecer operativo en sus nodos.

Eventualmente debería ver un mensaje de éxito:

[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.25.1". Enjoy!]

El plano de control ahora se ha actualizado.

Actualización de nodos trabajadores

Ahora puede actualizar sus nodos trabajadores. estos pasos también debe realizarse en los nodos del plano de control. Actualice cada nodo en secuencia para minimizar los efectos de la eliminación de capacidad de su clúster. Los pods se reprogramarán a otros nodos mientras cada uno se actualiza.

Primero drene el nodo de sus Pods existentes y coloque un cordón a su alrededor. Sustituir en el nombre del nodo en lugar de node-1 en los siguientes comandos.

$ kubectl cordon node-1
$ kubectl drain node-1

Esto expulsa los pods del nodo y evita que se programen nuevos. El nodo ahora está inactivo en su clúster.

A continuación, suelte la retención del administrador de paquetes en el kubeadm, kubectly kubelet paquetes Instalar la nueva versión de cada uno. Las versiones de los tres paquetes deben coincidir exactamente. Recuerde establecer el estado de espera nuevamente después de que tenga los nuevos lanzamientos.

$ sudo apt update
$ sudo apt-mark unhold kubeadm kubectl kubelet
$ sudo apt install -y kubeadm=1.25.1-00 kubectl=1.25.1-00 kubelet=1.25.1-00
$ sudo apt-mark hold kubeadm kubectl kubelet

Siguiente uso de Kubeadm upgrade node comando para aplicar la actualización y actualizar la configuración de su nodo:

$ sudo kubeadm upgrade node

Finalmente, reinicie el servicio Kubelet y desconecte el nodo. Debería volver a unirse al clúster y comenzar a aceptar nuevos pods.

$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
$ kubectl uncordon node-1

Comprobación de su clúster

Una vez que haya terminado su actualización, ejecute kubectl version para verificar que la versión activa coincida con sus expectativas:

$ kubectl version --short
Client Version: v1.25.1
...
Server Version: v1.25.1

Luego verifique que todos sus nodos estén reportando su nueva versión y hayan ingresado el Ready estado:

$ kubectl get nodes -o wide
NAME       STATUS   ROLES           AGE   VERSION
ubuntu22   Ready    control-plane   70m   v1.25.1

La actualización ya está completa.

Recuperación de una falla de actualización

Ocasionalmente, una actualización puede fallar aunque Kubeadm planifique con éxito una ruta y verifique el estado de su clúster. Pueden surgir problemas si la actualización se interrumpe o un componente de Kubernetes deja de responder. Kubeadm debería retroceder automáticamente a la versión anterior si esto sucede.

los upgrade apply El comando se puede repetir de forma segura para volver a intentar una actualización fallida. Detectará las formas en que su clúster difiere de la versión esperada, lo que le permitirá intentar una recuperación tanto de fallas totales como de actualizaciones parciales.

Cuando repetir el comando no funciona, puede intentar forzar la actualización agregando el --force bandera al comando:

$ kubeadm upgrade apply --force

Esto permitirá que la actualización continúe en situaciones en las que faltan requisitos o ya no se pueden cumplir.

Cuando ocurre un desastre y su clúster parece estar totalmente roto, debería poder restaurarlo utilizando los archivos de copia de seguridad que Kubeadm escribe automáticamente:

  • Copiar el contenido de /etc/kubernetes/tmp/kubeadm-backup-etcd-<date>-<time> en tu /var/lib/etcd directorio.
  • Copiar el contenido de /etc/kubernetes/tmp/kubeadm-backup-manifests-<date>-<time> en tu /etc/kubernetes/manifests directorio.

Estas copias de seguridad se pueden usar para restaurar manualmente la versión anterior de Kubernetes a un estado de funcionamiento.

Resumen

Actualizar Kubernetes con Kubeadm no debería ser demasiado estresante. La mayor parte del proceso está automatizado y su participación se limita a instalar los nuevos paquetes y verificar el plan de actualización.

Antes de actualizar, siempre debe consultar el registro de cambios de Kubernetes y cualquier documentación publicada por los componentes que usa en su clúster. Las interfaces de redes de pod, los controladores de entrada, los proveedores de almacenamiento y otros complementos pueden tener incompatibilidades con una nueva versión de Kubernetes o requerir sus propias rutinas de actualización.

Descubre más contenido

Subir Change privacy settings