Actualización de un controlador de datos habilitado para Azure Arc conectado indirectamente con las herramientas de Kubernetes

En este artículo se explica cómo actualizar un controlador de datos habilitado para Azure Arc conectado indirectamente con las herramientas de Kubernetes.

Durante una actualización del controlador de datos, se pueden actualizar las partes del plano de control de datos, como las definiciones de recursos personalizados (CRD) y los contenedores. Una actualización del controlador de datos no provocará ningún tiempo de inactividad de los servicios de datos (servidor de SQL Managed Instance o PostgreSQL).

En este artículo, se aplicará un archivo .yaml para:

  1. Crear la cuenta de servicio para ejecutar la actualización.
  2. Actualizar el programa de arranque.
  3. Actualizar el controlador de datos.

Nota:

Algunos de los modos y niveles de servicio de datos están disponibles con carácter general y otros están en versión preliminar. Si instala servicios de disponibilidad general y de versión preliminar en el mismo controlador de datos, no puede realizar una actualización local. Para actualizar, elimine todas las instancias de base de datos que no sean de disponibilidad general. Puede encontrar la lista de servicios disponibles con carácter general y en versión preliminar en las notas de la versión.

Requisitos previos

Antes de comenzar la actualización del controlador de datos necesitará lo siguiente:

  • Conectarse a un clúster de Kubernetes y autenticarse en él.
  • Seleccionar un contexto de Kubernetes existente.

Necesita un controlador de datos conectado indirectamente con imageTag: v1.0.0_2021-07-30 o posterior.

Instalación de herramientas

Para actualizar el controlador de datos mediante las herramientas de Kubernetes, debe tener instaladas dichas herramientas.

En los ejemplos de este artículo se usa kubectl, pero se podrían emplear enfoques similares con otras herramientas de Kubernetes como el panel de Kubernetes, oc o helm si está familiarizado con esas herramientas y los formatos YAML y JSON de Kubernetes.

Instalación de la herramienta kubectl

Visualización de imágenes disponibles y elección de una versión

Extraiga la lista de imágenes disponibles del controlador de datos con el siguiente comando:

az arcdata dc list-upgrades --k8s-namespace <namespace>

El comando anterior devuelve una salida como la del ejemplo siguiente:

Found 2 valid versions.  The current datacontroller version is <current-version>.
<available-version>
...

Actualización del controlador de datos

En esta sección se muestra cómo actualizar un controlador de datos conectado indirectamente.

Nota:

Algunos de los modos y niveles de servicio de datos están disponibles con carácter general y otros están en versión preliminar. Si instala servicios de disponibilidad general y de versión preliminar en el mismo controlador de datos, no puede realizar una actualización local. Para actualizar, elimine todas las instancias de base de datos que no sean de disponibilidad general. Puede encontrar la lista de servicios disponibles con carácter general y en versión preliminar en las notas de la versión.

Para conocer las rutas de actualización admitidas, consulte Actualización de los servicios de datos habilitados para Azure Arc.

Actualizar

Tendrá que conectarse a un clúster de Kubernetes y autenticarse en él, además de tener un contexto de Kubernetes existente seleccionado, antes de empezar a actualizar el controlador de datos.

Creación de la cuenta de servicio para ejecutar la actualización

Importante

Requiere permisos de Kubernetes para crear la cuenta de servicio, el enlace de roles, el rol de clúster, el enlace de roles de clúster y todos los permisos RBAC que se conceden a la cuenta de servicio.

Guarde una copia de arcdata-deployer.yaml y reemplace el marcador de posición {{NAMESPACE}} del archivo por el espacio de nombres del controlador de datos, por ejemplo, arc. Ejecute el siguiente comando para crear la cuenta de servicio del implementador con el archivo editado.

kubectl apply --namespace arc -f arcdata-deployer.yaml

Actualización del programa de arranque

El siguiente comando crea un trabajo para actualizar el programa de arranque y los objetos de Kubernetes relacionados.

Importante

El valor predeterminado del archivo yaml es mcr.microsoft.com/arcdata. Guarde una copia del archivo yaml y actualícela para que use otro registro o repositorio si es necesario.

kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/upgrade/yaml/bootstrapper-upgrade-job.yaml

Actualización del controlador de datos

El siguiente comando aplica revisiones a la etiqueta de imagen para actualizar el controlador de datos.

kubectl apply --namespace arc -f https://raw.githubusercontent.com/microsoft/azure_arc/main/arc_data_services/upgrade/yaml/data-controller-upgrade.yaml

Supervisión del estado de actualización

Puede supervisar el progreso de la actualización con kubectl.

kubectl

kubectl get datacontrollers --namespace <namespace> -w
kubectl get monitors --namespace <namespace> -w

La actualización es un proceso de dos partes. En primer lugar se actualiza el controlador y luego la pila de supervisión. Durante la actualización, use kubectl get monitors -n <namespace> -w para ver el estado. El resultado será:

NAME           STATUS     AGE
monitorstack   Updating   36m
monitorstack   Updating   36m
monitorstack   Updating   39m
monitorstack   Updating   39m
monitorstack   Updating   41m
monitorstack   Ready      41m

Solución de problemas

Cuando la versión deseada se establece en una versión específica, el trabajo de arranque intentará actualizar a esa versión hasta que se realice correctamente. Si la actualización se realiza correctamente, la propiedad RunningVersion de la especificación se actualiza a la nueva versión. Las actualizaciones pueden producir un error en escenarios como una etiqueta de imagen incorrecta, no se pueden conectar al registro o al repositorio, una CPU o memoria insuficiente asignadas a los contenedores o un almacenamiento insuficiente.

  1. Ejecute el comando siguiente para ver si alguno de los pods muestra un estado Error o tiene un gran número de reinicios:

    kubectl get pods --namespace <namespace>
    
  2. Para ver si hay un error en los eventos, ejecute

    kubectl describe pod <pod name> --namespace <namespace>
    
  3. Para obtener una lista de los contenedores de los pods, ejecute

    kubectl get pods <pod name> --namespace <namespace> -o jsonpath='{.spec.containers[*].name}*'
    
  4. Para obtener los registros de un contenedor, ejecute

    kubectl logs <pod name> <container name> --namespace <namespace>
    

Para ver errores comunes y cómo solucionarlos, vaya a Recursos para la solución de problemas.