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.
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 #
System Upgrade Controller (Sección 22.2, “Instalación de System Upgrade Controller”)
Un clúster de Kubernetes; puede ser K3s o RKE2
23.3.2 Pasos #
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
Compruebe que Upgrade Controller se ha desplegado:
kubectl get deployment -n upgrade-controller-system
Compruebe el pod de Upgrade Controller:
kubectl get pods -n upgrade-controller-system
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:
Sistema operativo (SO) (Sección 23.4.1, “Actualización del sistema operativo”)
Kubernetes (Sección 23.4.2, “Actualización de Kubernetes”)
Componentes adicionales (Sección 23.4.3, “Actualización de componentes adicionales”)
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.
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.
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.AvisoSe 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.
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:
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 parareasons
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 detype
(tipo) de la condición actual. Puede serTrue
(Verdadero),False
(Falso) oUnknown
(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:
No hay condiciones de componentes con el estado
Pending
oInProgress
.La propiedad
lastSuccessfulReleaseVersion
apunta a la versión dereleaseVersion
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.
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.
Localice el recurso
HelmChart
para el componente específico:kubectl get helmcharts -n kube-system
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
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 propiedadinstallationNamespace
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.