Share via


Actualización de un clúster de Kubernetes mediante el motor de AKS en Azure Stack Hub

El motor de AKS permite actualizar el clúster de Kubernetes que se implementó originalmente mediante la herramienta en Azure Stack Hub. Puede mantener los clústeres mediante el motor de AKS. Las tareas de mantenimiento son similares a cualquier sistema IaaS. Debe tener en cuenta la disponibilidad de las nuevas actualizaciones y usar el motor de AKS para aplicarlas.

Actualizar un clúster

El comando de actualización actualiza la versión de Kubernetes y la imagen de sistema operativo base. Cada vez que ejecute el comando de actualización, para cada nodo del clúster, el motor de AKS crea una nueva máquina virtual mediante la imagen base de AKS asociada a la versión de aks-engine usada.

Para las versiones 0.73.0 y posteriores del motor de AKS, puede usar el aks-engine upgrade comando para mantener la moneda de cada nodo maestro y agente del clúster.

Para las versiones 0.75.3 y posteriores del motor de AKS, puede usar el aks-engine-azurestack upgrade comando para mantener la moneda de cada nodo maestro y agente del clúster.

Microsoft no administra el clúster. Sin embargo, Microsoft proporciona la herramienta y la imagen de máquina virtual que puede usar para administrar el clúster.

En el caso de un clúster implementado, las actualizaciones abarcan:

  • Kubernetes
  • Proveedor de Kubernetes en Azure Stack Hub
  • Sistema operativo base

Al actualizar un clúster de producción, tenga en cuenta lo siguiente:

  • ¿Está usando la especificación de clúster correcta (apimodel.json) y el grupo de recursos para el clúster de destino?
  • ¿Usa una máquina confiable para que la máquina cliente ejecute el motor de AKS y desde la que está realizando operaciones de actualización?
  • Asegúrese de que tiene un clúster de copia de seguridad y que está operativo.
  • Si es posible, ejecute el comando desde una máquina virtual en el entorno de Azure Stack Hub para disminuir los saltos de red y los posibles errores de conectividad.
  • Asegúrese de que la suscripción tiene espacio suficiente para todo el proceso. El proceso asigna nuevas máquinas virtuales durante el proceso.
  • No se prevén actualizaciones del sistema ni tareas programadas.
  • Configure una actualización por fases en un clúster que esté configurado exactamente como el clúster de producción y pruebe la actualización allí antes de hacerlo en el clúster de producción.

Pasos para actualizar a una versión más reciente de Kubernetes

Nota:

La imagen base de AKS también se actualiza si usa una versión más reciente del motor aks y la imagen está disponible en Marketplace.

Las instrucciones siguientes usan los pasos mínimos para realizar la actualización. Si desea obtener más detalles, consulte el artículo Actualización de clústeres de Kubernetes.

  1. Primero debe determinar las versiones a las que puede dirigirse para la actualización. Esta versión depende de la versión que tiene actualmente y, después, utilice ese valor de versión para realizar la actualización. Las versiones de Kubernetes compatibles con el motor de AKS se pueden enumerar mediante la ejecución del siguiente comando:

    Nota

    Para AKSe versión 0.75.3 y posteriores, el comando para obtener las versiones del motor de AKS es aks-engine-azurestack get-versions.

    aks-engine get-versions --azure-env AzureStackCloud
    

    Para obtener una asignación completa del motor de AKS, la imagen base de AKS y las versiones de Kubernetes, consulte Versiones compatibles del motor de AKS.

  2. Recopile la información que va a necesitar para ejecutar el comando upgrade. El upgrade comando usa los parámetros siguientes:

    Parámetro Ejemplo Descripción
    azure-env AzureStackCloud Para indicar al motor de AKS que la plataforma de destino es Azure Stack Hub, utilice AzureStackCloud.
    ubicación local El nombre de la región de la instancia de Azure Stack Hub. Para ASDK, la región se establece en local.
    resource-group kube-rg Escriba el nombre del nuevo grupo de recursos o seleccione uno existente. El nombre del recurso debe ser alfanumérico y estar en minúsculas.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx escriba el identificador de la suscripción. Para más información, consulte Suscripción a una oferta.
    api-model ./kubernetes-azurestack.json Ruta de acceso al archivo de configuración del clúster o modelo de API.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Escriba el GUID de la entidad de servicio. El identificador de cliente indicado como identificador de la aplicación cuando el administrador de Azure Stack Hub creó la entidad de servicio.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Escriba el secreto de la entidad de servicio. Este es el secreto de cliente que configuró al crear el servicio.
    identity-system adfs Opcional. Especifique la solución de administración de identidad si usa los Servicios de federación de Active Directory (AD FS).
  3. Con los valores en su lugar, ejecute el comando siguiente:

    Nota

    Para AKSe versión 0.75.3 y posteriores, el comando para actualizar el motor de AKS es aks-engine-azurestack upgrade.

    aks-engine upgrade \
    --azure-env AzureStackCloud \
    --location <for an ASDK is local> \
    --resource-group kube-rg \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --api-model kube-rg/apimodel.json \
    --upgrade-version 1.18.15 \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  4. Si por algún motivo la operación de actualización encuentra un error, puede volver a ejecutar el upgrade comando después de solucionar el problema. El motor de AKS reanudará la operación en la que no se pudo realizar la hora anterior.

Pasos para actualizar únicamente la imagen del sistema operativo

  1. Revise la tabla supported-kubernetes-versions y determine si tiene la versión de aks-engine y la imagen base de AKS que planea para su actualización. Si está en akS Engine versión 0.73.0 o inferior, para ver la versión de aks-engine, ejecute : aks-engine version. Si está en akS Engine versión 0.75.3 o superior, para ver la versión de aks-engine, ejecute : aks-engine-azurestack version.
  2. Actualice el motor de AKS según corresponda, en la máquina en la que ha instalado aks-engine ejecute ./get-akse.sh --version vx.xx.x y reemplace x.xx.x por la versión de destino.
  3. Pida a su operador de Azure Stack Hub que agregue la versión de la imagen base de AKS que necesita en Marketplace de Azure Stack Hub.
  4. Ejecute el comando aks-engine upgrade con la misma versión de Kubernetes que ya está usando, pero agregue --force. Puede ver un ejemplo en Forzado de una actualización.

Pasos para actualizar el clúster a la versión del sistema operativo Ubuntu 20.04

Con la versión 0.75.3 del motor de AKS y versiones posteriores, puede actualizar las máquinas virtuales del clúster de Ubuntu 18.04 a 20.04. Siga estos pasos:

  1. Busque y edite el archivo api-model.json que se generó durante la implementación. Debe ser el mismo archivo que se usa para cualquier operación de actualización o escalado con aks-engine. En AKS Engine versión 0.75.3 y posteriores, use aks-engine-azurestack.
  2. Busque las secciones correspondientes a masterProfile y agentPoolProfiles; dentro de esas secciones cambie el valor de distro a aks-ubuntu-20.04.
  3. Guarde el archivo api-model.json y use el archivo api-model.json en el comando aks-engin upgrade como lo haría según Pasos para actualizar a una versión más reciente de Kubernetes.

Pasos para actualizar el clúster si usa volúmenes de almacenamiento con AKS Engine v0.70.0 y versiones posteriores

El proyecto Proveedor de nube para Azure (también conocido como cloud-controller-manager, proveedor de nube fuera de árbol o proveedor de nube externo) implementa la interfaz del proveedor de nube de Kubernetes para nubes de Azure. La implementación fuera del árbol es el reemplazo de la implementación en desuso en el árbol.

En Azure Stack Hub, a partir de Kubernetes v1.21, los clústeres basados en motor de AKS usarán cloud-controller-managerexclusivamente . Por lo tanto, para implementar un clúster de Kubernetes v1.21 y versiones posteriores, es necesario establecer orchestratorProfile.kubernetesConfig.useCloudControllerManagertrue en en en el modelo de API (ejemplo). El proceso de actualización del motor de AKS actualizará automáticamente la useCloudControllerManager marca.

Nota

Consideraciones de actualización: el proceso de actualización de un clúster de Kubernetes de la versión 1.20 (o una versión anterior) a la versión 1.21 (o posterior) provocará un tiempo de inactividad en las cargas de trabajo que dependen del aprovisionamiento de volúmenes en árbol kubernetes.io/azure-disk . Antes de actualizar a Kubernetes v1.21 y versiones posteriores , se recomienda encarecidamente realizar una copia de seguridad completa de los datos de la aplicación y validarlos en un entorno de preproducción que los recursos de almacenamiento del clúster (PV y PVC) se puedan migrar a un nuevo aprovisionamiento de volúmenes. Obtenga información sobre cómo migrar al controlador CSI de Azure Disk aquí.

Aprovisionamiento de volúmenes

El aprovisionamiento de volúmenes en árbol solo es compatible con el proveedor de nube en árbol. Por lo tanto, un clúster v1.21+ tiene que incluir un controlador de interfaz de almacenamiento de contenedores (CSI) si las cargas de trabajo de usuario dependen del almacenamiento persistente. Aquí se enumeran algunas soluciones disponibles en Azure Stack Hub.

AkS Engine no habilitará ningún controlador CSI de forma predeterminada en Azure Stack Hub. En el caso de las cargas de trabajo que requieren un controlador CSI, es posible habilitar explícitamente el azuredisk-csi-drivercomplemento (clústeres solo linux) o usar Helm para instalar el azuredisk-csi-driver gráfico (clústeres de Linux o Windows).

Migración del almacenamiento persistente al controlador CSI de Azure Disk

El proceso de actualización de un clúster basado en el motor de AKS de la versión 1.20 (o anterior) a la versión 1.21 (o posterior) provocará tiempo de inactividad en las cargas de trabajo que dependen del kubernetes.io/azure-disk aprovisionamiento de volúmenes en árbol, ya que este aprovisionamiento no forma parte del proveedor de nube para Azure.

Si se deben conservar los datos almacenados en los discos subyacentes de Azure, se requieren los siguientes pasos adicionales una vez completado el proceso de actualización del clúster:

  1. Instalación del controlador CSI de disco de Azure
  2. Eliminación de las clases de almacenamiento en desuso en árbol
  3. Volver a crear los volúmenes persistentes y las notificaciones

1. Instalación manual del controlador CSI de Azure Disk

El siguiente script usa Helm para instalar el controlador CSI de disco de Azure:

DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
  --namespace kube-system \
  --set cloud=AzureStackCloud \
  --set controller.runOnMaster=true \
  --version ${DRIVER_VERSION}

2. Reemplazar las clases de almacenamiento

kube-addon-manager Creará automáticamente las clases de almacenamiento del controlador CSI de Azure Disk (disk.csi.azure.com) una vez que las clases de almacenamiento en árbol (kubernetes.io/azure-disk) se eliminen manualmente:

IN_TREE_SC="default managed-premium managed-standard"

# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}

# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses

3. Volver a crear volúmenes persistentes

Una vez instalado el controlador CSI de disco de Azure y las clases de almacenamiento reemplazadas, el siguiente paso consiste en volver a crear los volúmenes persistentes (PV) y las notificaciones de volúmenes persistentes (PVC) mediante el controlador CSI de Azure Disk (o la solución CSI alternativa).

Se trata de un proceso de varios pasos que puede ser diferente en función de cómo se implementaron inicialmente estos recursos. Los pasos de alto nivel son:

  • Elimine la implementación o el conjunto con estado que hace referencia a los pares PV + PVC que se van a migrar (definición de recursos de copia de seguridad si es necesario).
  • Asegúrese de que la propiedad de los PVs persistentVolumeReclaimPolicy está establecida en value Retain (ejemplo).
  • Elimine los pares PV + PVC que se van a migrar (definiciones de recursos de copia de seguridad si es necesario).
  • Para migrar, actualice la definición de recursos de los PVs quitando el azureDisk objeto y agregando un csi objeto con referencia al azureDisk original (ejemplo).
  • Vuelva a crear, en el orden siguiente, los recursos de PV, los recursos de PVC (si es necesario) y, por último, la implementación o el conjunto con estado.

El siguiente script de migración se proporciona como plantilla.

Después de ejecutar el script de migración, si el pod está bloqueado con el error "No se pueden conectar o montar volúmenes", asegúrese de que se ha instalado el controlador CSI de Azure Disk y se han vuelto a crear las clases de almacenamiento.

Forzado de una actualización

Puede haber situaciones en las que desee forzar una actualización del clúster. Por ejemplo, el primer día se implementa un clúster en un entorno desconectado mediante la última versión de Kubernetes. El siguiente día Ubuntu publica una revisión para una vulnerabilidad para la que Microsoft genera una instancia de la imagen base de AKS. Puede aplicar la nueva imagen mediante el forzado de una actualización con la misma versión de Kubernetes que ya ha implementado.

Nota

Para AKSe versión 0.75.3 y posteriores, el comando para actualizar el motor de AKS es aks-engine-azurestack upgrade.

aks-engine upgrade \
--azure-env AzureStackCloud   
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force

Para obtener instrucciones, consulte Forzado de actualización.

Pasos siguientes