documentation.suse.com / Documentación de SUSE Edge / Componentes / Upgrade Controller

23 Upgrade Controller

Upgrade Controller es un controlador de Kubernetes capaz de realizar actualizaciones en los siguientes componentes de la plataforma SUSE Edge:

  • Sistema operativo (SUSE Linux Micro)

  • Kubernetes (K3s y RKE2)

  • Componentes adicionales (Rancher, Elemental, SUSE Security, etc.)

Upgrade Controller optimiza el proceso de actualización de esto componentes encapsulando sus complejidades en un único recurso orientado al usuario que sirve como activador de la actualización. Los usuarios solo tienen que configurar este recurso y Upgrade Controller se encarga del resto.

Nota
Nota

Upgrade Controller actualmente solo admite actualizaciones de la plataforma SUSE Edge para clústeres de gestión que no estén en entornos aislados. Consulte la Sección 23.7, “Limitaciones conocidas” para obtener más información.

23.1 ¿Cómo se usa Upgrade Controller en SUSE Edge?

Upgrade Controller es esencial para automatizar las operaciones de "día 2" (que antes eran manuales) necesarias para actualizar los clústeres de gestión desde una versión de SUSE Edge a la siguiente.

Para lograr esta automatización, Upgrade Controller usa herramientas como System Upgrade Controller (Capítulo 22, System Upgrade Controller) y Helm Controller.

Para obtener más detalles sobre cómo funciona Upgrade Controller, consulte la Sección 23.4, “¿Cómo funciona Upgrade Controller?”.

Para ver las limitaciones de Upgrade Controller, consulte la Sección 23.7, “Limitaciones conocidas”.

Para ver las diferencias entre Upgrade Controller y System Upgrade Controller, consulte la Sección 23.2, “Diferencias entre Upgrade Controller y System Upgrade Controller”.

23.2 Diferencias entre Upgrade Controller y System Upgrade Controller

System Upgrade Controller (SUC) (Capítulo 22, System Upgrade Controller) es una herramienta de uso general que propaga instrucciones de actualización a nodos específicos de Kubernetes.

Aunque admite algunas operaciones de "día 2" para la plataforma SUSE Edge, no las cubre todas. Además, incluso en el caso de las operaciones admitidas, los usuarios tienen que configurar, mantener y desplegar manualmente múltiples planes de SUC, un proceso propenso a errores que puede dar lugar a problemas inesperados.

Esto llevó a la necesidad de una herramienta que automatizara y resumiera la complejidad de gestionar diversas operaciones de "día 2" para la plataforma SUSE Edge. Así, se desarrolló Upgrade Controller, que simplifica el proceso de actualización al introducir un único recurso orientado al usuario que se encarga de la actualización. Los usuarios solo tienen que gestionar este recurso y Upgrade Controller se encarga del resto.

23.3 Instalación de Upgrade Controller

23.3.1 Requisitos previos

23.3.2 Pasos

  1. Instale el chart de Helm de Upgrade Controller en el clúster de gestión:

    helm install upgrade-controller oci://registry.suse.com/edge/charts/upgrade-controller --version 303.0.1+up0.1.1 --create-namespace --namespace upgrade-controller-system
  2. Compruebe que Upgrade Controller se ha desplegado:

    kubectl get deployment -n upgrade-controller-system
  3. Compruebe el pod de Upgrade Controller:

    kubectl get pods -n upgrade-controller-system
  4. Compruebe los registros del pod de Upgrade Controller:

    kubectl logs <pod_name> -n upgrade-controller-system

23.4 ¿Cómo funciona Upgrade Controller?

Para actualizar la versión de Edge, Upgrade Controller introduce dos nuevos recursos personalizados de Kubernetes:

  • UpgradePlan (Sección 23.5.1, “UpgradePlan”): creado por el usuario; contiene configuraciones relacionadas con la actualización de una versión de Edge.

  • ReleaseManifest (Sección 23.5.2, “ReleaseManifest”): creado por Upgrade Controller; contiene las versiones de los componentes específicas de una versión concreta de Edge. Este archivo no debe ser editado por los usuarios.

Upgrade Controller crea un recurso ReleaseManifest que contiene los datos de los componentes de la versión de Edge especificada por el usuario en la propiedad releaseVersion del recurso UpgradePlan.

Con los datos de los componentes de ReleaseManifest, Upgrade Controller actualiza los componentes de la versión de Edge en el orden siguiente:

Nota
Nota

Durante el proceso de actualización, Upgrade Controller envía continuamente información sobre la actualización al recurso UpgradePlan creado. Para obtener más información sobre cómo realizar un seguimiento del proceso de actualización, consulte la sección correspondiente (Sección 23.6, “Seguimiento del proceso de actualización”).

23.4.1 Actualización del sistema operativo

Para actualizar el sistema operativo, Upgrade Controller crea planes de SUC (Capítulo 22, System Upgrade Controller) que siguen este formato de nombre:

  • Para los planes de SUC relacionados con actualizaciones del SO del nodo de plano de control: control-plane-<nombre-so>-<versión-so>-<sufijo>.

  • Para los planes de SUC relacionados con actualizaciones del SO del nodo de trabajador: workers-<nombre-so>-<versión-so>-<sufijo>.

Basándose en estos planes, SUC crea cargas de trabajo en cada nodo del clúster que realizan la actualización real del sistema operativo.

Dependiendo del recurso ReleaseManifest, la actualización del sistema operativo puede incluir:

  • Solo actualizaciones de paquetes: para casos en los que la versión del sistema operativo no cambie entre las versiones de Edge.

  • Migración completa del sistema operativo: para casos en los que la versión del sistema operativo cambie entre versiones de Edge.

La actualización se ejecuta nodo a nodo, comenzando por los nodos de plano de control. Solo cuando finalice la actualización del nodo de plano de control, se empezarán a actualizar los nodos de trabajador.

Nota
Nota

Upgrade Controller configura los planes de SUC del sistema operativo para realizar un drenaje de los nodos del clúster si este tiene más de un nodo del tipo especificado.

En los clústeres en los que hay más de un nodo de plano de control y hay un único nodo de trabajador, el drenaje se realizará solo para los nodos de plano de control, y viceversa.

Para obtener información sobre cómo inhabilitar el drenaje de nodos, consulte la sección sobre UpgradePlan (Sección 23.5.1, “UpgradePlan”).

23.4.2 Actualización de Kubernetes

Para actualizar la distribución de Kubernetes de un clúster, Upgrade Controller crea planes de SUC (Capítulo 22, System Upgrade Controller) con el siguiente formato de nombre:

  • Para planes de SUC relacionados con actualizaciones de Kubernetes en nodos de plano de control: control-plane-<versión-k8s>-<sufijo>.

  • Para planes de SUC relacionados con actualizaciones de Kubernetes en nodos de trabajador: workers-<versión-k8s>-<sufijo>.

Basándose en estos planes, SUC crea cargas de trabajo en cada nodo del clúster que realizan la actualización real de Kubernetes.

La actualización de Kubernetes se realizará nodo a nodo, comenzando por los nodos de plano de control. Solo cuando finalice la actualización de los nodos de plano de control se empezarán a actualizar los nodos de trabajador.

Nota
Nota

Upgrade Controller configura los planes de SUC de Kubernetes para realizar un drenaje de los nodos del clúster si este tiene más de un nodo del tipo especificado.

En los clústeres en los que hay más de un nodo de plano de control y hay un único nodo de trabajador, el drenaje se realizará solo para los nodos de plano de control, y viceversa.

Para obtener información sobre cómo inhabilitar el drenaje de nodos, consulte la Sección 23.5.1, “UpgradePlan”.

23.4.3 Actualización de componentes adicionales

Actualmente, todos los componentes adicionales se instalan mediante charts de Helm. Para obtener una lista completa de los componentes de una versión específica, consulte las Notas de la versión (Sección 52.1, “Resumen”).

Para los charts de Helm desplegados a través de EIB (Capítulo 11, Edge Image Builder), Upgrade Controller actualiza la CR de HelmChart existente de cada componente.

Para los charts de Helm desplegados fuera de EIB, Upgrade Controller crea un recurso HelmChart para cada componente.

Tras la creación/actualización del recurso HelmChart, Upgrade Controller se basa en helm-controller para detectar este cambio y proceder con la actualización real del componente.

Los charts se actualizan secuencialmente según su orden en ReleaseManifest. También se pueden pasar valores adicionales a través de UpgradePlan. Si la versión de un chart permanece sin cambios en la nueva versión de SUSE Edge, no se actualizará. Para obtener más información al respecto, consulte la Sección 23.5.1, “UpgradePlan”.

23.5 Extensiones de la API de Kubernetes

Extensiones a la API de Kubernetes introducidas por Upgrade Controller.

23.5.1 UpgradePlan

Upgrade Controller introduce un nuevo recurso personalizado de Kubernetes llamado UpgradePlan.

UpgradePlan sirve como mecanismo de instrucción para Upgrade Controller y admite las siguientes configuraciones:

  • releaseVersion: versión de Edge a la que se va a actualizar el clúster. La versión debe seguir el sistema semántico de versiones y debe obtenerse de las Notas de la versión (Sección 52.1, “Resumen”).

  • disableDrain: (opcional) indica a Upgrade Controller si debe inhabilitar el drenaje de nodos. Resulta útil cuando se tienen cargas de trabajo con presupuestos de interrupción.

    • Ejemplo de inhabilitación del drenaje del nodo de plano de control:

      spec:
        disableDrain:
          controlPlane: true
    • Ejemplo de inhabilitación del drenaje del nodo de plano de control y del nodo de trabajador:

      spec:
        disableDrain:
          controlPlane: true
          worker: true
  • helm: (opcional) especifica valores adicionales para los componentes instalados a través de Helm.

    Aviso
    Aviso

    Se recomienda utilizar este campo únicamente para valores que sean críticos para las actualizaciones. Las actualizaciones estándares de valores de chart deben realizarse después de que los charts correspondientes se hayan actualizado a la siguiente versión.

    • Ejemplo:

      spec:
        helm:
        - chart: foo
          values:
            bar: baz

23.5.2 ReleaseManifest

Upgrade Controller introduce un nuevo recurso personalizado de Kubernetes llamado ReleaseManifest.

El recurso ReleaseManifest lo crea Upgrade Controller y contiene datos de componentes para una versión específica de Edge. Esto significa que cada actualización de la versión de Edge estará representada por un recurso ReleaseManifest diferente.

Aviso
Aviso

El recurso ReleaseManifest siempre debe crearlo Upgrade Controller.

No es recomendable crear o editar manualmente los recursos ReleaseManifest. Si un usuario decide hacerlo, será bajo su propia responsabilidad.

Estos son algunos de los componentes que incluye ReleaseManifest:

  • Datos del sistema operativo: versión, arquitecturas compatibles, datos adicionales sobre actualizaciones, etc.

  • Datos de distribución de Kubernetes: versiones admitidas de RKE2/K3s

  • Datos de componentes adicionales: datos del chart de Helm de SUSE (ubicación, versión, nombre, etc.)

Para ver un ejemplo de recurso ReleaseManifest, consulte la documentación original. Tenga en cuenta que se trata solo de un ejemplo, no de un recurso ReleaseManifest válido.

23.6 Seguimiento del proceso de actualización

Esta sección sirve como medio para realizar un seguimiento y depurar el proceso de actualización que inicia Upgrade Controller después de que el usuario haya creado un recurso UpgradePlan.

23.6.1 General

La información general sobre el estado del proceso de actualización se puede consultar en las condiciones de estado del recurso UpgradePlan.

El estado del recurso UpgradePlan se puede consultar de la siguiente manera:

kubectl get upgradeplan <upgradeplan_name> -n upgrade-controller-system -o yaml

Ejemplo de UpgradePlan en ejecución:

apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
  name: upgrade-plan-mgmt
  namespace: upgrade-controller-system
spec:
  releaseVersion: 3.3.1
status:
  conditions:
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Control plane nodes are being upgraded
    reason: InProgress
    status: "False"
    type: OSUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Kubernetes upgrade is not yet started
    reason: Pending
    status: Unknown
    type: KubernetesUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Rancher upgrade is not yet started
    reason: Pending
    status: Unknown
    type: RancherUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Longhorn upgrade is not yet started
    reason: Pending
    status: Unknown
    type: LonghornUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: MetalLB upgrade is not yet started
    reason: Pending
    status: Unknown
    type: MetalLBUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: CDI upgrade is not yet started
    reason: Pending
    status: Unknown
    type: CDIUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: KubeVirt upgrade is not yet started
    reason: Pending
    status: Unknown
    type: KubeVirtUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: NeuVector upgrade is not yet started
    reason: Pending
    status: Unknown
    type: NeuVectorUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: EndpointCopierOperator upgrade is not yet started
    reason: Pending
    status: Unknown
    type: EndpointCopierOperatorUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Elemental upgrade is not yet started
    reason: Pending
    status: Unknown
    type: ElementalUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: SRIOV upgrade is not yet started
    reason: Pending
    status: Unknown
    type: SRIOVUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Akri upgrade is not yet started
    reason: Pending
    status: Unknown
    type: AkriUpgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: Metal3 upgrade is not yet started
    reason: Pending
    status: Unknown
    type: Metal3Upgraded
  - lastTransitionTime: "2024-10-01T06:26:27Z"
    message: RancherTurtles upgrade is not yet started
    reason: Pending
    status: Unknown
    type: RancherTurtlesUpgraded
  observedGeneration: 1
  sucNameSuffix: 90315a2b6d

Aquí puede ver todos los componentes para los que Upgrade Controller intentará programar una actualización. Cada condición sigue el siguiente formato:

  • lastTransitionTime: la hora a la que esta condición del componente pasó de un estado a otro por última vez.

  • message: mensaje que indica el estado actual de actualización de la condición específica del componente.

  • reason: el estado actual de actualización de la condición específica del componente. Los valores posibles para reasons son:

    • Succeeded: la actualización del componente específico se ha realizado correctamente.

    • Failed: la actualización del componente específico ha fallado.

    • InProgress: la actualización del componente específico está en curso.

    • Pending: la actualización del componente específico aún no se ha programado.

    • Skipped: el componente específico no se encuentra en el clúster, por lo que se omitirá su actualización.

    • Error: se ha producido un error transitorio en un componente específico.

  • status: el estado de type (tipo) de la condición actual. Puede ser True (Verdadero), False (Falso) o Unknown (Desconocido).

  • type: indicador del componente actualmente actualizado.

Upgrade Controller crea planes de SUC para las condiciones de componentes de tipo OSUpgraded y KubernetesUpgraded. Para realizar un seguimiento más detallado de los planes de SUC creados para estos componentes, consulte la Sección 22.3, “Supervisión de planes de System Upgrade Controller”.

Es posible seguir realizando un seguimiento de todos los demás tipos de condiciones de los componentes mediante la visualización de los recursos creados para ellos por helm-controller. Para obtener más información, consulte la Sección 23.6.2, “Helm Controller”.

Un recurso UpgradePlan programado por Upgrade Controller se puede marcar como successful (correcto) si cumple estas condiciones:

  1. No hay condiciones de componentes con el estado Pending o InProgress.

  2. La propiedad lastSuccessfulReleaseVersion apunta a la versión de releaseVersion especificada en la configuración de UpgradePlan. Upgrade Controller añade esta propiedad al estado de UpgradePlan después de que el proceso de actualización se ha completado correctamente.

Ejemplo de UpgradePlan correcto:

apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
  name: upgrade-plan-mgmt
  namespace: upgrade-controller-system
spec:
  releaseVersion: 3.3.1
status:
  conditions:
  - lastTransitionTime: "2024-10-01T06:26:48Z"
    message: All cluster nodes are upgraded
    reason: Succeeded
    status: "True"
    type: OSUpgraded
  - lastTransitionTime: "2024-10-01T06:26:59Z"
    message: All cluster nodes are upgraded
    reason: Succeeded
    status: "True"
    type: KubernetesUpgraded
  - lastTransitionTime: "2024-10-01T06:27:13Z"
    message: Chart rancher upgrade succeeded
    reason: Succeeded
    status: "True"
    type: RancherUpgraded
  - lastTransitionTime: "2024-10-01T06:27:13Z"
    message: Chart longhorn is not installed
    reason: Skipped
    status: "False"
    type: LonghornUpgraded
  - lastTransitionTime: "2024-10-01T06:27:13Z"
    message: Specified version of chart metallb is already installed
    reason: Skipped
    status: "False"
    type: MetalLBUpgraded
  - lastTransitionTime: "2024-10-01T06:27:13Z"
    message: Chart cdi is not installed
    reason: Skipped
    status: "False"
    type: CDIUpgraded
  - lastTransitionTime: "2024-10-01T06:27:13Z"
    message: Chart kubevirt is not installed
    reason: Skipped
    status: "False"
    type: KubeVirtUpgraded
  - lastTransitionTime: "2024-10-01T06:27:13Z"
    message: Chart neuvector-crd is not installed
    reason: Skipped
    status: "False"
    type: NeuVectorUpgraded
  - lastTransitionTime: "2024-10-01T06:27:14Z"
    message: Specified version of chart endpoint-copier-operator is already installed
    reason: Skipped
    status: "False"
    type: EndpointCopierOperatorUpgraded
  - lastTransitionTime: "2024-10-01T06:27:14Z"
    message: Chart elemental-operator upgrade succeeded
    reason: Succeeded
    status: "True"
    type: ElementalUpgraded
  - lastTransitionTime: "2024-10-01T06:27:15Z"
    message: Chart sriov-crd is not installed
    reason: Skipped
    status: "False"
    type: SRIOVUpgraded
  - lastTransitionTime: "2024-10-01T06:27:16Z"
    message: Chart akri is not installed
    reason: Skipped
    status: "False"
    type: AkriUpgraded
  - lastTransitionTime: "2024-10-01T06:27:19Z"
    message: Chart metal3 is not installed
    reason: Skipped
    status: "False"
    type: Metal3Upgraded
  - lastTransitionTime: "2024-10-01T06:27:27Z"
    message: Chart rancher-turtles is not installed
    reason: Skipped
    status: "False"
    type: RancherTurtlesUpgraded
  lastSuccessfulReleaseVersion: 3.3.1
  observedGeneration: 1
  sucNameSuffix: 90315a2b6d

23.6.2 Helm Controller

Esta sección explica cómo realizar un seguimiento de los recursos creados por helm-controller.

Nota
Nota

En los pasos siguientes se da por supuesto que kubectl se ha configurado para conectarse al clúster en el que se ha desplegado Upgrade Controller.

  1. Localice el recurso HelmChart para el componente específico:

    kubectl get helmcharts -n kube-system
  2. Use el nombre del recurso HelmChart para localizar el pod de actualización que creó helm-controller:

    kubectl get pods -l helmcharts.helm.cattle.io/chart=<helmchart_name> -n kube-system
    
    # Example for Rancher
    kubectl get pods -l helmcharts.helm.cattle.io/chart=rancher -n kube-system
    NAME                         READY   STATUS      RESTARTS   AGE
    helm-install-rancher-tv9wn   0/1     Completed   0          16m
  3. Consulte los registros del pod específico del componente:

    kubectl logs <pod_name> -n kube-system

23.7 Limitaciones conocidas

  • Las actualizaciones de clústeres descendentes aún no se gestionan mediante Upgrade Controller. Para obtener información sobre cómo actualizar clústeres descendentes, consulte el Capítulo 36, Clústeres descendentes.

  • Upgrade Controller espera que cualquier chart de Helm de SUSE Edge adicional que se despliegue a través de EIB (Capítulo 11, Edge Image Builder) tenga su CR de HelmChart desplegada en el espacio de nombres kube-system. Para ello, configure la propiedad installationNamespace en su archivo de definición de EIB. Para obtener más información, consulte la documentación original.

  • Actualmente, Upgrade Controller no tiene forma de determinar la versión actual de Edge que se está ejecutando en el clúster de gestión. Asegúrese de proporcionar una versión de Edge superior a la versión actual que se está ejecutando en el clúster.

  • Actualmente, Upgrade Controller solo admite actualizaciones en entornos no aislados. Aún no es posible realizar actualizaciones en entornos aislados.

Documentation survey