Compartir a través de


Restauración de Azure Kubernetes Service mediante la CLI de Azure

En este artículo, se indica cómo restaurar el clúster de Azure Kubernetes desde un punto de restauración creado por Azure Backup mediante la CLI de Azure.

Azure Backup ahora permite realizar copias de seguridad de clústeres de AKS (recursos de clúster y volúmenes persistentes asociados al clúster) mediante una extensión de copia de seguridad, que debe instalarse en el clúster. El almacén de Backup se comunica con el clúster mediante esta extensión de copia de seguridad para realizar operaciones de copia de seguridad y restauración.

Puede realizar tanto una recuperación de ubicación original (OLR) (restauración en el clúster de AKS que se ha respaldado) como una recuperación en una ubicación alternativa (ALR) (restauración en un otro clúster de AKS). También puede seleccionar los elementos que se van a restaurar a partir de la copia de seguridad, es decir, recuperación a nivel de elemento (IRL).

Nota:

Antes de iniciar una operación de restauración, el clúster de destino debe tener instalada la extensión de Backup y el acceso de confianza habilitado para el almacén de Backup. Más información.

Antes de comenzar

  • La copia de seguridad de AKS permite restaurarla al clúster de AKS original (del que se ha realizado una copia de seguridad) y a un clúster de AKS alternativo. La copia de seguridad de AKS permite realizar una restauración completa y una restauración de elementos. Puede usar configuraciones de restauración para definir parámetros basados en los recursos del clúster que se restaurarán.

  • Debe instalar la extensión de copia de seguridad en el clúster de AKS de destino. Además, debe habilitar el acceso de confianza entre el almacén de Backup y el clúster de AKS.

  • Si la versión de clúster de AKS de destino difiere de la versión usada durante la copia de seguridad, la operación de restauración puede producir un error o completarse con advertencias para varios escenarios, como los recursos en desuso en la versión más reciente del clúster. Si restaura desde el nivel de almacén, puede usar los recursos hidratados en la ubicación de almacenamiento provisional para restaurar los recursos de la aplicación en el clúster de destino.

Para más información sobre las limitaciones y los escenarios admitidos, consulte la matriz de compatibilidad.

Validación y preparación del clúster de AKS de destino

Antes de iniciar un proceso de restauración, debe validar que el clúster de AKS está preparado para la restauración. Incluye la extensión de copia de seguridad que se va a instalar con la extensión que tiene el permiso en la cuenta de almacenamiento donde las copias de seguridad se almacenan o hidratan con acceso seguro habilitado entre el clúster de AKS de destino y el almacén de Backup.

En primer lugar, compruebe si la extensión de Backup está instalada en el clúster mediante la ejecución del siguiente comando:

az k8s-extension show --name azure-aks-backup --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup

Si la extensión está instalada, compruebe si tiene los permisos adecuados en la cuenta de almacenamiento donde se almacenan las copias de seguridad:

az role assignment list --all --assignee  $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv)

Si el rol no está asignado, puede asignarlo mediante la ejecución del siguiente comando:

az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Account Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount

Si la extensión de Backup no está instalada, ejecute el siguiente comando de instalación de extensión con la cuenta de almacenamiento y el contenedor de blobs donde las copias de seguridad se almacenan como entrada.

az k8s-extension create --name azure-aks-backup --extension-type microsoft.dataprotection.kubernetes --scope cluster --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --release-train stable --configuration-settings blobContainer=$blobcontainer storageAccount=$storageaccount storageAccountResourceGroup=$storageaccountresourcegroup storageAccountSubscriptionId=$subscriptionId

A continuación, asigne el rol necesario a la extensión en la cuenta de almacenamiento mediante la ejecución del siguiente comando:

az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Blob Data Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount

Comprobación del acceso de confianza

Para comprobar si el acceso de confianza está habilitado entre el almacén de Backup y el clúster de AKS de destino, ejecute el siguiente comando:

az aks trustedaccess rolebinding list --resource-group $aksclusterresourcegroup --cluster-name $targetakscluster

Si no es así, el acceso de confianza se puede habilitar con el siguiente comando:

az aks trustedaccess rolebinding create --cluster-name $targetakscluster --name backuprolebinding --resource-group $aksclusterresourcegroup --roles Microsoft.DataProtection/backupVaults/backup-operator --source-resource-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/BackupVaults/$backupvault

Restauración en un clúster de AKS

Captura del punto de recuperación pertinente

Capture todas las instancias asociadas al clúster de AKS e identifique la instancia pertinente.

az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster 

Una vez identificada la instancia, capture el punto de recuperación pertinente.

az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault

En caso de que quiera restaurar copias de seguridad en la región secundaria, use la marca --use-secondary-region para identificar los puntos de recuperación disponibles en esa región.

az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault --use-secondary-region true

Preparación de la solicitud de restauración

Para preparar la configuración de restauración y definir los elementos que se van a restaurar en el clúster de AKS de destino, ejecute el comando az dataprotection backup-instance initialize-restoreconfig.

az dataprotection backup-instance initialize-restoreconfig --datasource-type AzureKubernetesService >restoreconfig.json



{
  "conflict_policy": "Skip",
  "excluded_namespaces": null,
  "excluded_resource_types": null,
  "include_cluster_scope_resources": true,
  "included_namespaces": null,
  "included_resource_types": null,
  "label_selectors": null,
  "namespace_mappings": null,
  "object_type": "KubernetesClusterRestoreCriteria",
  "persistent_volume_restore_mode": "RestoreWithVolumeData",
  "resource_modifier_reference": null,
  "restore_hook_references": null,
  "staging_resource_group_id": null,
  "staging_storage_account_id": null
}

La configuración de restauración se compone de los siguientes elementos:

  • conflict_policy: durante una restauración, si existe un recurso con el mismo nombre en el clúster que en la copia de seguridad, puede elegir cómo controlar el conflicto. Tiene dos opciones: Skip, que no restaurará el elemento de copia de seguridad o Update, que modifica los campos mutables del recurso en clúster con el recurso almacenado en la copia de seguridad.

  • excluded_namespace: puede enumerar los espacios de nombres que se excluirán de restaurarse en el clúster. El recurso subyacente a esos espacios de nombres no se restaurará.

  • excluded_resource_types: puede enumerar los tipos de recursos que se van a excluir de la restauración en el clúster. Los valores de entrada deben proporcionarse como tipo de grupo de API como par clave-valor.

  • include_cluster_scope_resources: puede decidir si desea restaurar recursos con ámbito de clúster o no estableciendo el valor como true o false.

  • included_namespaces : puede enumerar los espacios de nombres que solo se incluirán como parte de la restauración en el clúster. El recurso subyacente a esos espacios de nombres se va a restaurar.

  • excluded_resource_types: puede enumerar los tipos de recursos que solo se incluirán para la restauración en el clúster. Los valores de entrada deben proporcionarse como tipo de grupo de API como par clave-valor.

  • label_selectors: puede seleccionar los recursos que se van a restaurar con etiquetas específicas en ellos. El valor de entrada debe proporcionarse como par clave-valor.

  • namespace_mappings: puede asignar espacio de nombres (y recursos subyacentes) a un espacio de nombres diferente en el clúster de destino. Si el espacio de nombres de destino no existe en el clúster, la extensión crea un nuevo espacio de nombres. El valor de entrada debe proporcionarse como par clave-valor.

  • persistent_volume_restore_mode: puede usar esta variable para decidir si desea restaurar los volúmenes persistentes de los que se ha copiado o no. Los valores aceptados son RestoreWithVolumeData, RestoreWithoutVolumeData

  • resource_modifier_reference: puede hacer referencia al recurso modificador de recursos implementado en el clúster con esta variable. El valor de entrada es un par de valores clave del espacio de nombres en el que se implementa el recurso y el nombre del archivo yaml.

  • restore_hook_references: puede hacer referencia al recurso Restore Hook implementado en el clúster con esta variable. El valor de entrada es un par de valores clave del espacio de nombres en el que se implementa el recurso y el nombre de los archivos yaml.

  • staging_resource_group_id: si va a restaurar la copia de seguridad almacenada en el nivel de almacén, debe proporcionar un identificador del grupo de recursos como una ubicación de almacenamiento provisional. En este grupo de recursos, los volúmenes persistentes de copia de seguridad se hidratan antes de restaurarse en el clúster de destino.

  • staging_storage_account_id: en caso de que restaure la copia de seguridad almacenada en el nivel de almacén, debe proporcionar un identificador de cuenta de almacenamiento como una ubicación de almacenamiento provisional. En este grupo de recursos, los recursos de kubernetes de copia de seguridad se hidratan antes de restaurarse en el clúster de destino.

Ahora, prepare la solicitud de restauración con todos los detalles pertinentes. Si va a restaurar la copia de seguridad en el clúster original, ejecute el siguiente comando:

az dataprotection backup-instance restore initialize-for-item-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --backup-instance-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupInstances/$backupinstanceid >restorerequestobject.json

Si el clúster de AKS de destino para la restauración es diferente del clúster original, ejecute el siguiente comando:

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --target-resource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$targetakscluster >restorerequestobject.json

Nota:

En caso de que haya elegido un punto de recuperación del nivel de almacén con --source-datastore como VaultStore, proporcione una cuenta de almacenamiento y un grupo de recursos de instantáneas en la configuración de restauración.

En caso de que intente restaurar el clúster en la región secundaria, establezca la marca --restore-location como el nombre de la región secundaria y --source-datastore como VaultStore.

Ahora, puede actualizar el objeto JSON según sus requisitos y, a continuación, validar el objeto mediante la ejecución del siguiente comando:

az dataprotection backup-instance validate-for-restore --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --restore-request-object restorerequestobject.json --vault-name $backupvault

Este comando comprueba si el clúster de AKS y el almacén de Backup tienen los roles necesarios en distintos recursos necesarios para realizar la restauración. Si se produce un error en la validación debido a que faltan roles, puede asignarlos ejecutando el comando siguiente:

az dataprotection backup-instance update-msi-permissions --datasource-type AzureKubernetesService --operation Restore --permissions-scope Resource --resource-group  $backupvaultresourcegroup --vault-name $backupvault --restore-request-object restorerequestobject.json --snapshot-resource-group-id /subscriptions/$subscriptionId/resourceGroups/$snapshotresourcegroup

Nota:

Durante la operación de restauración, el almacén de Backup y el clúster de AKS deben tener determinados roles asignados para realizar la restauración:

  • El clúster de AKS de destino debe tener el rol Colaborador en el grupo de recursos de instantáneas.
  • La Identidad de usuario asociada a la Extensión de copia de seguridad debe tener funciones de Contribuidor de datos de blob de almacenamiento en la cuenta de almacenamiento donde se almacenan las copias de seguridad en el caso de la capa operativa y en la *cuenta de almacenamiento provisional en el caso del nivel de almacen.
  • El almacén de copia de seguridad debe tener un rol de Lector en el clúster de AKS de destino y grupo de recursos de instantáneas en caso de restaurar desde el nivel operativo.
  • El almacén de copia de seguridad debe tener un rol de Colaborador en el grupo de recursos de almacenamiento provisional en caso de restaurar la copia de seguridad desde el nivel de almacén.
  • El almacén de copia de seguridad debe tener un rol de Colaborador en el grupo de recursos de almacenamiento provisional en caso de restaurar la copia de seguridad desde el nivel de almacén.

Desencadenamiento de la restauración

Una vez completada la asignación de roles, debe validar el objeto de restauración una vez más. Después, puede desencadenar una operación de restauración ejecutando el siguiente comando:

az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json 

Nota:

Los recursos hidratados en el grupo de recursos de almacenamiento provisional y la cuenta de almacenamiento no se limpian automáticamente después de que se complete el trabajo de restauración y se eliminen manualmente.

Seguimiento de trabajos

Puede realizar un seguimiento de los trabajos de restauración mediante el comando az dataprotection job. Puede enumerar todos los trabajos y capturar un detalle de trabajo determinado.

También puede usar Resource Graph para realizar un seguimiento de todos los trabajos en todas las suscripciones, grupos de recursos y almacenes de Backup. Use el comando az dataprotection job list-from-resourcegraph para obtener el trabajo correspondiente.

az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation Restore

Pasos siguientes