Copia de seguridad, restauración de clústeres de cargas de trabajo mediante Velero

Se aplica a: AKS en Azure Stack HCI 22H2, AKS en Windows Server

En este artículo se describe cómo instalar y usar Velero para realizar copias de seguridad y restaurar clústeres de carga de trabajo y destino mediante Azure Blob Storage o el almacenamiento MinIO en AKS habilitado por Azure Arc.

Velero es una herramienta estándar de la comunidad de código abierto para realizar copias de seguridad y restaurar objetos de clúster de Kubernetes y volúmenes persistentes. Admite varios proveedores de almacenamiento para almacenar sus copias de seguridad. Si un clúster de Kubernetes de destino de AKS Arc se bloquea y no se puede recuperar, puede usar una copia de seguridad de Velero para restaurar su contenido y objetos de API internos en un nuevo clúster.

Si no desea almacenar las copias de seguridad en Azure Blob Storage, puede usar MinIO con Velero. En este artículo se describe cómo instalar y configurar Velero para usar Azure Blob Storage o instalar y configurar Velero para usar el almacenamiento MinIO.

Nota

Velero no es compatible oficialmente con Microsoft Windows. En las pruebas, el equipo velero solo pudo realizar copias de seguridad de aplicaciones windows sin estado. Restic No se admiten las copias de seguridad y integración de aplicaciones con estado ni volúmenes persistentes.

Requisitos previos

Complete estos requisitos previos antes de comenzar la implementación de Velero:

Instalación de Velero con Azure Blob Storage

Los procedimientos de esta sección describen cómo instalar Velero y usar Azure Blob Storage para copias de seguridad. Si no desea almacenar las copias de seguridad en Azure, vaya a Instalación de Velero con almacenamiento de MiniO.

  1. Abra PowerShell como administrador.

  2. Inicie sesión en Azure mediante la CLI de Azure:

    az login --use-device-code   
    
  3. Instale la CLI de Velero ejecutando el siguiente comando:

Nota

La marca --use-restic ya no se admite en la versión velero 1.10+, para poder usar la marca versión 1.9.x es necesaria.

choco install velero   
  1. Si es necesario, cambie a la suscripción de Azure que desea usar para las copias de seguridad.

    De forma predeterminada, Velero almacena copias de seguridad en la misma suscripción de Azure que las máquinas virtuales y los discos y no le permitirá restaurar copias de seguridad en un grupo de recursos de otra suscripción. Para habilitar copias de seguridad y restauraciones entre suscripciones, especifique una suscripción que se usará para las copias de seguridad. Puede omitir este paso si ya está en la suscripción que desea usar para las copias de seguridad.

    Cambie a la suscripción que desea usar para las copias de seguridad:

    1. Use el nombre de la suscripción para buscar el identificador de suscripción:

      $AZURE_BACKUP_SUBSCRIPTION_NAME="<NAME_OF_TARGET_SUBSCRIPTION>"
      $AZURE_BACKUP_SUBSCRIPTION_ID=$(az account list --query="[?name=='$AZURE_BACKUP_SUBSCRIPTION_NAME'].id | [0]" -o tsv)
      
    2. A continuación, cambie la suscripción:

      az account set -s $AZURE_BACKUP_SUBSCRIPTION_ID
      
  2. Cree una cuenta de Azure Storage y un contenedor de blobs.

    Cuando se usa Azure Blob Storage para copias de seguridad, Velero requiere una cuenta de almacenamiento y un contenedor de blobs para almacenar las copias de seguridad. En el ejemplo siguiente se muestra la cuenta de almacenamiento creada en un nuevo grupo de recursos Velero_Backups .

    Debe crear la cuenta de almacenamiento con un identificador único global que se pueda usar en DNS. El script de ejemplo usa la uuidgen aplicación para generar aleatoriamente un nombre único. Puede usar cualquier método siempre que el nombre siga las reglas de nomenclatura de Azure para las cuentas de almacenamiento.

    La cuenta de almacenamiento se crea con funcionalidades de cifrado en reposo (mediante claves administradas por Microsoft) y está configurada para permitir solo el acceso a través de conexiones HTTPS.

    Para crear la cuenta de almacenamiento y el contenedor de blobs, siga estos pasos:

    1. Cree un grupo de recursos para la cuenta de almacenamiento de copia de seguridad. Cambie los directorios a su ubicación preferida, si es necesario, y ejecute los siguientes comandos:

      $AZURE_BACKUP_RESOURCE_GROUP="Velero_Backups"
      az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
      
    2. Cree la cuenta de almacenamiento:

      $AZURE_STORAGE_ACCOUNT_ID="<NAME_OF_ACCOUNT_TO_ASSIGN>"
      
      az storage account create --name $AZURE_STORAGE_ACCOUNT_ID --resource-group $AZURE_BACKUP_RESOURCE_GROUP --sku Standard_GRS --encryption-services blob --https-only true --kind BlobStorage --access-tier Hot
      
    3. Cree un contenedor de blobs:

      $BLOB_CONTAINER="velero"
      az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
      

      En el ejemplo se usa un contenedor de blobs denominado velero. Puede usar un nombre diferente, preferiblemente único para un único clúster de Kubernetes.

  3. Cree una entidad de servicio:

    1. Obtenga el identificador de suscripción y el identificador de inquilino de la cuenta de Azure:

      $AZURE_SUBSCRIPTION_ID=(az account list --query '[?isDefault].id' -o tsv)
      $AZURE_TENANT_ID=(az account list --query '[?isDefault].tenantId' -o tsv) 
      
    2. Cree una entidad de servicio que tenga privilegios de colaborador.

      Puede crear una entidad de servicio con el rol Colaborador o usar un rol personalizado:

      • Rol colaborador: El rol Colaborador concede acceso para toda la suscripción, así que asegúrese de proteger esta credencial si asigna ese rol.
      • Rol personalizado: Si necesita un rol más restrictivo, use un rol personalizado.

      Asigne el rol Colaborador:

      Si va a usar Velero para realizar una copia de seguridad de varios clústeres con varios contenedores de blobs, puede crear un nombre de usuario único para cada clúster en lugar de usar el nombre velero.

      Para crear una entidad de servicio con el rol Colaborador, use el siguiente comando. Sustituya su propio identificador de suscripción y, opcionalmente, su propio nombre de entidad de seguridad de servicio. Microsoft Entra ID generará un secreto automáticamente.

      $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
      

      Realice estos ajustes en el comando si es necesario:

      • Si tiene previsto usar suscripciones diferentes para el clúster de cargas de trabajo y los archivos de copia de seguridad de Velero, proporcione ambos identificadores de suscripción, como en el ejemplo siguiente:

        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID /subscriptions/$AZURE_BACKUP_SUBSCRIPTION_ID)
        
      • Si no quiere usar velero como nombre de entidad de seguridad de servicio, asegúrese de que la --name opción es única en Microsoft Entra ID y no entra en conflicto con otras entidades de servicio o registros de aplicaciones.

      Importante

      El secreto solo se muestra durante este paso, cuando se crea la entidad de servicio. Asegúrese de anotar el secreto para usarlo en pasos futuros.

      Usar un rol personalizado:

      Si desea habilitar las acciones mínimas del proveedor de recursos, cree un rol personalizado y asígnelo a la entidad de servicio.

      1. Cree un archivo denominado azure-role.json con el siguiente contenido. Sustituya su propio nombre de rol personalizado e identificador de suscripción.

        {
            "Name": <CUSTOM_ROLE_NAME>,
            "Id": null,
            "IsCustom": true,
            "Description": "Velero related permissions to perform backups, restores and deletions",
            "Actions": [
                "Microsoft.Compute/disks/read",
                "Microsoft.Compute/disks/write",
                "Microsoft.Compute/disks/endGetAccess/action",
                "Microsoft.Compute/disks/beginGetAccess/action",
                "Microsoft.Compute/snapshots/read",
                "Microsoft.Compute/snapshots/write",
                "Microsoft.Compute/snapshots/delete",
                "Microsoft.Storage/storageAccounts/listkeys/action",
                "Microsoft.Storage/storageAccounts/regeneratekey/action"
            ],
            "NotActions": [],
            "AssignableScopes": [
              "<SUBSCRIPTION_ID>"
            ]
        }
        
      2. Cree el rol personalizado y la entidad de servicio:

        az role definition create --role-definition azure-role.json
        
        $AZURE_CLIENT_SECRET=(az ad sp create-for-rbac --name "velero" --role "<CUSTOM_ROLE>" --query 'password' -o tsv --scopes  /subscriptions/$AZURE_SUBSCRIPTION_ID)
        

      Para obtener más información sobre cómo crear roles personalizados, vea Establecer permisos para Velero.

  4. Obtenga el nombre de la entidad de seguridad de servicio y asígnelo a la variable AZURE_CLIENT_ID :

    $AZURE_CLIENT_ID=(az ad sp list --display-name "velero" --query '[0].appId' -o tsv)
    

    Nota

    Las entidades de servicio expiran. Para averiguar cuándo expirará la nueva entidad de servicio, ejecute este comando: az ad sp show --id $AZURE_CLIENT_ID.

  5. Cree un archivo que contenga las variables que requiere la instalación de Velero. El comando tiene un aspecto similar al siguiente:

    AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
    AZURE_TENANT_ID=${AZURE_TENANT_ID}
    AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
    AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
    AZURE_RESOURCE_GROUP=${AZURE_BACKUP_RESOURCE_GROUP}
    AZURE_CLOUD_NAME=AzurePublicCloud" | Out-File -FilePath ./credentials-velero.txt
    

    Importante

    Elimine este archivo después de instalar Velero. El secreto de cliente está en texto no cifrado, lo que puede suponer un riesgo de seguridad.

    Antes de continuar, compruebe que el archivo tiene el formato correcto. La extensión de nombre de archivo no importa.

    • Quite los espacios o pestañas adicionales.
    • Asegúrese de que los nombres de variable son correctos.
  6. Instale e inicie Velero.

    Instale Velero en el clúster e inicie la implementación. Este procedimiento crea un espacio de nombres denominado velero y agrega una implementación denominada velero al espacio de nombres .

    1. Instale Velero con el siguiente comando. Deberá personalizar el comando de ejemplo.

      velero install --provider azure --plugins velero/velero-plugin-for-microsoft-azure:v1.5.0 --bucket $BLOB_CONTAINER --secret-file ./credentials-velero.txt --backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID --use-restic
      

      Establezca las siguientes variables según sea necesario:

      • El comando instala el complemento de Microsoft Azure, que debe ser compatible con la versión de la CLI de Velero que está usando. El comando de ejemplo usa la versión 1.5.0 del complemento microsoft Azure, que es compatible con la versión más reciente de la CLI de Velero, 1.9.0. Para averiguar qué versión del complemento de Microsoft Azure se va a instalar con la versión de la CLI de Valero, consulte la matriz de compatibilidad.

      • Asegúrese de incluir el parámetro para habilitar la --use-restic copia de seguridad de volúmenes de Kubernetes en el nivel del sistema de archivos mediante Restic. Restic se puede usar para realizar una copia de seguridad de cualquier tipo de volumen de Kubernetes. De forma predeterminada, Velero admite tomar instantáneas de volúmenes persistentes para volúmenes de Amazon EBS, Azure Managed Disks y Google Persistent Disks. En AKS Arc, los volúmenes de Kubernetes usan volúmenes compartidos de clúster (CSV) para almacenar datos. Por lo tanto, Restic es necesario para habilitar instantáneas de volumen persistentes. ACTUALMENTE, AKS Arc no admite instantáneas de volumen.

      • subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID es opcional. Solo tiene que incluirlo si Velero y el clúster de cargas de trabajo tienen distintos identificadores de suscripción. Si usan la misma suscripción de Azure, puede quitar el subscriptionId parámetro y el archivo credentials-velero.txt proporcionará esa información.

      El servicio Velero se inicia automáticamente en la instalación.

    2. Compruebe si el servicio velero se está ejecutando correctamente:

      kubectl -n velero get pods
      kubectl logs deployment/velero -n velero
      

      El get pods comando debe mostrar que se están ejecutando los pods de Velero.

Instalación de Velero con almacenamiento MinIO

Los procedimientos de esta sección describen cómo instalar Velero y usar el almacenamiento MinIO para copias de seguridad. Si prefiere usar Azure Blob Storage para las copias de seguridad, vaya a Instalar Velero con Azure Blob Storage.

Si no desea almacenar las copias de seguridad en MinIO, vaya a Configurar Velero para usar Azure Blob Storage.

  1. Instale la CLI de Velero ejecutando el siguiente comando. Instalar Chocolately si aún no lo has hecho.

    choco install velero
    
  2. Instale MinIO:

    1. Cree un volumen persistente para almacenar la copia de seguridad de MinIO. En el ejemplo se crea un volumen persistente en la clase de almacenamiento predeterminada en AKS Arc, que ya existe.

      1. Cree un archivo YAML denominado minio-pvc-storage.yaml, con el siguiente contenido:

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata: 
        name: minio-pv-claim 
        spec: 
        storageClassName: default 
        accessModes: 
           - ReadWriteOnce 
        resources: 
           requests: 
              storage: 100Gi 
        

        Cree el volumen persistente ejecutando este comando:

        kubectl create -f minio-pvc-storage.yaml
        
      2. Cree un archivo de implementación, minio-deployment.yaml, para iniciar MinIO. Incluya el siguiente contenido. La implementación usará el volumen persistente que creó.

        apiVersion: apps/v1
        kind: Deployment
        metadata:
        name: minio-deployment 
        spec: 
        selector: 
           matchLabels: 
              app: minio 
        strategy: 
           type: Recreate 
        template: 
           metadata: 
              labels: 
              app: minio 
           spec: 
              volumes: 
              - name: storage 
              persistentVolumeClaim: 
                 claimName: minio-pv-claim 
              containers: 
              - name: minio 
              image: minio/minio:latest 
              args: 
              - server 
              - /storage 
              env: 
              - name: MINIO_ACCESS_KEY 
                 value: "<you can define this>" 
              - name: MINIO_SECRET_KEY 
                 value: "<you can define this>" 
              ports: 
              - containerPort: 9000 
                 hostPort: 9000 
              volumeMounts: 
              - name: storage  
                 mountPath: "/storage" 
        

        A continuación, cree la implementación:

        kubectl create -f minio-deployment.yaml
        
    2. Cree un servicio de Kubernetes denominado minio-service.yaml. Este servicio proporcionará direcciones IP externas al pod MinIO.

      Cree un archivo YAML con los siguientes valores para configurar el servicio:

      apiVersion: v1 
      kind: Service 
      metadata: 
      name: minio-service 
      spec: 
      type: LoadBalancer 
      ports: 
         - port: 9000 
            targetPort: 9000 
            protocol: TCP 
      selector: 
         app: minio 
      

      A continuación, cree el servicio:

      kubectl create -f mino-service.yaml
      
    3. Ejecute el siguiente comando para obtener la dirección IP externa del pod minIO. Usará esa dirección para instalar Velero.

      kubectl get svc
      
    4. Para comprobar si MinIO está en funcionamiento, inicie sesión en la dirección IP en un explorador o use el cliente MinIO, como se describe a continuación.

      Instale el cliente MinIO y examine los archivos MinIO.

      Descargue el cliente MinIO:

      Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe
      

      A continuación, establezca un alias:

      mc alias set minio http://10.10.77.6:9000 "minio_access_key" "minio_secret_key" --api s3v4
      

      Por último, examine la instalación de MinIO:

      mc ls minio
      
    5. Cree un cubo para almacenar archivos velero. Este cubo se usará en la instalación de Velero.

      mc mb minio/velero-backup
      
    6. Cree un archivo de credenciales minIO con la siguiente información:

      minio.credentials 
             [default] 
        aws_access_key_id=<minio_access_key> 
        aws_secret_access_key=<minio_secret_key> 
      
  3. Instalar Velero:

    velero install --provider aws --bucket velero-backup --secret-file .\minio.credentials --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://10.10.77.6:9000 --plugins velero/velero-plugin-for-aws:v1.1.0 --use-restic
    

    Antes de ejecutar este comando, compruebe el nombre del cubo, las credenciales de MinIO y la dirección IP externa de MinIO.

  4. Compruebe si el servicio velero se está ejecutando correctamente:

    kubectl -n velero get pods
    kubectl logs deployment/velero -n Velero
    

    El get pods comando debe mostrar que se están ejecutando los pods de Velero.

Copia de seguridad de un clúster

Puede realizar copias de seguridad o restaurar todos los objetos del clúster, o puede filtrar objetos por tipo, espacio de nombres o etiqueta.

Creación de una copia de seguridad

Use el comando Velero backup create para crear copias de seguridad en el almacenamiento elegido. En los ejemplos siguientes se usa la --default-volumes-to-restic marca , que crea una instantánea de los volúmenes persistentes. Para ver otras opciones de copia de seguridad, consulte la Referencia de Copia de seguridad de Velero.

  • Copia de seguridad a petición de todos los espacios de nombres del clúster:

    velero backup create <BACKUP-NAME> --default-volumes-to-restic
    
  • Copia de seguridad a petición de un único espacio de nombres en el clúster:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE1> --default-volumes-to-restic
    
  • Copia de seguridad a petición de varios espacios de nombres seleccionados en el clúster:

    velero backup create <BACKUP-NAME> --include-namespaces <NAMESPACE-1>, <NAMESPACE-2> --default-volumes-to-restic
    

Comprobación del progreso de la copia de seguridad

  • Para comprobar el progreso de una copia de seguridad, ejecute este comando:

    velero backup describe <BACKUP-NAME>
    
  • Si usa Azure Blob Storage para las copias de seguridad, puede ver la copia de seguridad en la cuenta de Azure Storage en el blob o contenedor que creó.

Restauración de un clúster

Para restaurar un clúster, debe crear un nuevo clúster en el que restaurar el clúster anterior. No se puede restaurar una copia de seguridad de clúster en un clúster existente.

El restore comando permite restaurar todos los objetos y volúmenes persistentes a partir de una copia de seguridad creada anteriormente. También permite restaurar solo un subconjunto filtrado de objetos y volúmenes persistentes. Para obtener más opciones de copia de seguridad, consulte Filtrado de recursos.

En el clúster al que desea restaurar la copia de seguridad (el clúster de destino):

  1. Implemente Velero con las instrucciones anteriores. Use las mismas credenciales de Azure que usó para el clúster de origen.

  2. Asegúrese de que el objeto de copia de seguridad velero se creó ejecutando el siguiente comando. Los recursos de Velero se sincronizan con los archivos de copia de seguridad en el almacenamiento en la nube.

    velero backup describe <BACKUP-NAME>
    
  3. Después de confirmar que la copia de seguridad correcta (BACKUP-NAME) está presente, restaure todos los objetos de la copia de seguridad:

    velero restore create --from-backup <BACKUP-NAME>
    

Obtener ayuda con los comandos velero

Para ver todas las opciones asociadas a un comando específico de Velero, use la --help marca con el comando . Por ejemplo, velero restore create --help muestra todas las opciones asociadas al comando velero restore create.

Por ejemplo, para enumerar todas las opciones de velero restore, ejecute velero restore --help, que devuelve la siguiente información:

  velero restore [command]
  Available Commands:
  create      Create a restore
  delete      Delete restores
  describe    Describe restores
  get         Get restores
  logs        Get restore logs

Desinstalación de Velero

Para desinstalar Velero del clúster y quitar todos los recursos creados por la instalación de Velero, ejecute los siguientes comandos:

kubectl delete namespace/velero clusterrolebinding/velero 
kubectl delete crds -l component=velero

Pasos siguientes