Pianificare una serie di backup


Questa pagina descrive come creare un piano di backup di Backup per GKE, utilizzato per eseguire il backup dei carichi di lavoro in Google Kubernetes Engine (GKE).

I piani di backup forniscono le funzioni di configurazione, posizione e gestione per una sequenza di backup. Un piano di backup contiene una configurazione di backup che include il cluster di origine, la selezione dei carichi di lavoro di cui eseguire il backup e la regione in cui vengono archiviati gli elementi di backup prodotti in base a questo piano.

Puoi creare uno o più piani di backup per ogni cluster. Esistono due motivi principali per cui potresti volere più di un piano di backup per un cluster:

  • Vuoi archiviare gli elementi di backup in più regioni. In questo caso, crea un piano di backup per ogni regione in cui vuoi archiviare i backup.
  • Vuoi partizionare i backup del tuo cluster, ad esempio:

    • Anziché un backup molto grande eseguito in un unico momento della giornata, è preferibile eseguire più backup più piccoli distribuiti nell'arco della giornata.
    • Vuoi eseguire il backup di alcune parti del cluster più spesso di altre (ad esempio backup giornalieri per alcuni spazi dei nomi e backup ogni ora per altri).

Consigliamo di avere almeno un piano di backup per ogni cluster.

Backup per GKE non supporta il backup di un cluster da un progetto a un altro. Puoi creare un piano di backup per un cluster solo nello stesso progetto in cui è stato creato il cluster.

Puoi creare un piano di backup con un metodo di pianificazione dei backup per creare automaticamente i backup: pianificazione intelligente o pianificazione cron. Ti consigliamo di utilizzare la programmazione intelligente per il tuo piano di backup. In questo modo, i backup vengono creati automaticamente per soddisfare i requisiti del Recovery Point Objective (RPO). Per ulteriori informazioni, consulta Creazione ed eliminazione di backup automatici.

Se non vuoi creare un piano di backup con metodi di pianificazione del backup, devi eseguire manualmente il backup dei tuoi workload. Dopo aver creato un piano di backup, puoi creare un backup da quel piano.

Prima di iniziare

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare e gestire un piano di backup, chiedi all'amministratore di concederti Backup per GKE Backup Admin (roles/gkebackup.backupAdmin), che è un sottoinsieme del ruolo IAM Backup per GKE Admin (roles/gkebackup.admin), nel tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Crea un piano di backup

Crea un piano di backup utilizzando gcloud CLI o la console Google Cloud.

gcloud

Per creare un piano di backup con una pianificazione, esegui il seguente comando:

gcloud beta container backup-restore backup-plans create BACKUP_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --cluster=CLUSTER \
    --all-namespaces \
    --include-secrets \
    --include-volume-data \
    --encryption-key=ENCRYPTION_KEY \
    --target-rpo-minutes=TARGET_RPO_MINUTES \
    --exclusion-windows-file=EXCLUSION_WINDOWS_FILE \
    --cron-schedule=CRON_SCHEDULE \
    --backup-retain-days=RETAIN_DAYS \
    --backup-delete-lock-days=DELETE_LOCK_DAYS \
    --locked

Sostituisci quanto segue:

  • BACKUP_PLAN: il nome del piano di backup che vuoi creare.
  • PROJECT_ID: l'ID del tuo progetto Google Cloud.
  • LOCATION: la regione di calcolo per la risorsa, ad esempio us-central1. Consulta Informazioni sulle località delle risorse.
  • CLUSTER: il percorso relativo al cluster:
    • Cluster regionali: projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
    • Cluster zonali: projects/PROJECT_ID/locations/ZONE/clusters/CLUSTER_NAME
  • CLUSTER_NAME: il nome del cluster di cui eseguire il backup.
  • --all-namespaces: esegue il backup di tutti gli spazi dei nomi del cluster.

    In alternativa, specifica:

    • --selected-applications con un elenco di ProtectedApplications come NAMESPACE1/APP1,NAMESPACE2/APP2,... di cui eseguire il backup.
    • --selected-namespaces con un elenco di spazi dei nomi da eseguire il backup.NAMESPACE1,NAMESPACE2,...

    Devi specificare una di queste opzioni quando crei un piano di backup.

  • --include-secrets: un argomento facoltativo per includere le risorse Secret se rientrano nell'ambito del backup.

  • --include-volume-data: un argomento facoltativo per includere i dati dei volumi permanenti nel backup. Non impostare questo argomento se vuoi creare volumi vuoti durante il recupero.

  • ENCRYPTION_KEY: un argomento facoltativo per definire il percorso di una chiave di crittografia gestita dal cliente. Consulta Informazioni sulla crittografia CMEK.

  • TARGET_RPO_MINUTES: argomento obbligatorio se è impostato EXCLUSION_WINDOWS_FILE. Specifica il RPO target in minuti. La pianificazione intelligente utilizza questo valore per creare automaticamente i backup. Il valore minimo è 60 minuti (1 ora) e il valore massimo è 86400 minuti (60 giorni). Non puoi impostare contemporaneamente TARGET_RPO_MINUTES e CRON_SCHEDULE in un piano di backup.

  • EXCLUSION_WINDOWS_FILE: un argomento facoltativo per definire le finestre di tempo durante le quali non è possibile eseguire il backup. Tutti gli orari sono interpretati come UTC. Questo argomento è disponibile solo se è impostato TARGET_RPO_MINUTES.

  • CRON_SCHEDULE: un argomento facoltativo per definire una pianificazione cron che crea automaticamente i backup e supporta la sintassi cron standard. Ad esempio, "10 3 * * *" crea un backup ogni giorno alle 03:10. Tutti gli orari sono interpretati come UTC. L'intervallo minimo tra i backup pianificati è di 10 minuti. Non puoi impostare contemporaneamente CRON_SCHEDULE e TARGET_RPO_MINUTES in un piano di backup.

  • RETAIN_DAYS: argomento obbligatorio se è impostato TARGET_RPO_MINUTES o CRON_SCHEDULE. Specifica il numero di giorni per cui conservare il backup. I backup per questo piano vengono eliminati automaticamente alla scadenza del periodo di conservazione.

  • DELETE_LOCK_DAYS: un argomento facoltativo per specificare il numero di giorni durante i quali i backup non possono essere eliminati. Se questo valore è impostato, i backup creati per il piano non possono essere eliminati (automaticamente o manualmente) fino alla scadenza della durata.

  • --locked: un argomento facoltativo per bloccare il criterio di conservazione per il piano di backup.

Per l'elenco completo delle opzioni, consulta la documentazione di gcloud beta container backup-restore backup-plans create.

Crea un piano di backup per tutti gli spazi dei nomi con un RPO di 24 ore e una singola finestra di esclusione

Crea un file window.yaml contenente un array YAML di exclusionWindows.

exclusionWindows:
- startTime:
    hours: 1
    minutes: 0
  duration: "3600s"
  singleOccurrenceDate:
    day: 1
    month: 3
    year: 2024

Il seguente comando crea un piano di backup per tutti gli spazi dei nomi con un RPO target di 24 ore e non sono consentiti backup dalle 01:00 alle 02:00 del 1° marzo 2024. I backup vengono conservati per sette giorni e bloccati per tre giorni dopo la creazione:

gcloud beta container backup-restore backup-plans create BACKUP_PLAN \
    --location=LOCATION \
    --cluster=CLUSTER \
    --all-namespaces \
    --include-secrets \
    --include-volume-data \
    --target-rpo-minutes=1440 \
    --exclusion-windows-file=window.yaml \
    --backup-retain-days=7 \
    --backup-delete-lock-days=3 \
    --locked

Creare un piano di backup per tutti gli spazi dei nomi con un RPO di 2 ore e più finestre di esclusione

Crea un file window.yaml contenente un array YAML di exclusionWindows: una finestra settimanale e una finestra di singola occorrenza.

exclusionWindows:
- startTime:
    hours: 15
    minutes: 0
  duration: "5400s"
  daysOfWeek:
    daysOfWeek:
    - MONDAY
    - FRIDAY
- startTime:
    hours: 1
    minutes: 0
  duration: "3600s"
  singleOccurrenceDate:
    day: 1
    month: 3
    year: 2024

Il seguente comando crea un piano di backup per tutti gli spazi dei nomi con un RPO target di 2 ore e nessun backup consentito dalle 01:00 alle 02:00 del 1° marzo 2024 e dalle 15:00 alle 16:30 ogni lunedì e venerdì. I backup vengono conservati per sette giorni e bloccati per tre giorni dopo la creazione:

gcloud beta container backup-restore backup-plans create BACKUP_PLAN \
    --location=LOCATION \
    --cluster=CLUSTER \
    --all-namespaces \
    --include-secrets \
    --include-volume-data \
    --target-rpo-minutes=120 \
    --exclusion-windows-file=window.yaml \
    --backup-retain-days=7 \
    --backup-delete-lock-days=3 \
    --locked

Creare un piano di backup per tutti gli spazi dei nomi con una pianificazione cron giornaliera

Il seguente comando crea un piano di backup per pianificare il backup giornaliero di tutti gli spazi dei nomi alle 05:20 ogni giorno. I backup vengono conservati per sette giorni e bloccati per tre giorni dopo la creazione:

gcloud beta container backup-restore backup-plans create BACKUP_PLAN \
    --location=LOCATION \
    --cluster=CLUSTER \
    --all-namespaces \
    --include-secrets \
    --include-volume-data \
    --cron-schedule="20 5 * * *" \
    --backup-retain-days=7 \
    --backup-delete-lock-days=3 \
    --locked

Creare un piano di backup per un ambito selezionato con una pianificazione cron ogni ora

Il seguente comando crea un piano di backup per pianificare il backup ogni ora per lo spazio dei nomi selezionato ( my-ns ) al minuto 15 di ogni ora. I backup vengono conservati per tre giorni dopo la creazione:

gcloud beta container backup-restore backup-plans create BACKUP_PLAN \
    --location=LOCATION \
    --cluster=CLUSTER \
    --selected-namespaces=my-ns \
    --include-secrets \
    --include-volume-data \
    --cron-schedule="15 * * * *" \
    --backup-retain-days=3

Creare un piano di backup per un ProtectedApplication selezionato

Il seguente comando crea un piano di backup per selezionare la ProtectedApplication (my-ns/my-app).

gcloud beta container backup-restore backup-plans create BACKUP_PLAN \
    --location=LOCATION \
    --cluster=CLUSTER \
    --selected-applications=my-ns1/my-app1,my-ns2/my-app2 \
    --include-secrets \
    --include-volume-data

Console

Segui le istruzioni riportate di seguito per creare un piano di backup nella console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel menu di navigazione, fai clic su Backup per GKE.

  3. Fai clic su Crea un piano di backup.

  4. Nella sezione Dettagli piano:

    1. Seleziona il cluster di cui eseguire il backup.
    2. Inserisci il nome e, facoltativamente, la descrizione del piano di backup.
    3. Scegli una posizione per il backup.
  5. Per creare automaticamente i backup, nella sezione Pianificazione dei backup, seleziona la casella di controllo Attiva la pianificazione dei backup e poi scegli uno dei seguenti metodi:

    1. Seleziona Pianificazione intelligente e svolgi i seguenti passaggi:

      1. Nel campo RPO target, inserisci il RPO per il piano di backup e poi seleziona il valore RPO in Minuti, Ore o Giorni dal menu a discesa.
      2. (Facoltativo) Seleziona la casella di controllo Definisci una singola finestra di esclusione backup ricorrente per l'esclusione del backup.
        1. Scegli Giornaliera o Settimanale dalla finestra di esclusione.
        2. Nella sezione Ripetizioni, seleziona i giorni della settimana da escludere dal piano di backup. Questo campo viene visualizzato solo per la finestra di esclusione settimanale.
        3. Nel campo Ora di inizio della finestra, inserisci l'ora di inizio dell'esclusione del piano di backup.
        4. Nel campo Durata, inserisci la durata dell'esclusione dal piano di backup e poi seleziona Secondi, Minuti o Ore dal menu a discesa.
      3. (Facoltativo) Se vuoi creare una o più finestre di esclusione del backup per singole occorrenze, seleziona la casella di controllo Definisci una o più date di esclusione del backup e svolgi i seguenti passaggi:
        1. Fai clic su Aggiungi data di esclusione.
        2. Nel campo Data e ora di inizio della finestra di esclusione, fai clic sull'icona e seleziona la Data e l'Ora dei backup.
        3. Nel campo Durata, inserisci la durata dell'esclusione dal piano di backup e poi seleziona Secondi, Minuti o Ore dal menu a discesa.
    2. Seleziona Pianificazione cron e inserisci un'espressione CRON utilizzando la sintassi cron standard. Ad esempio, 10 3 * * * crea un backup ogni giorno alle 03:10. L'intervallo minimo tra i backup pianificati è di 10 minuti.

  6. Nella sezione Criterio di fidelizzazione:

    1. Imposta il numero di giorni in cui conservare il backup prima che venga eliminato automaticamente.
    2. Imposta il numero di giorni durante i quali i backup non possono essere eliminati.
    3. Per bloccare la norma di conservazione, fai clic sull'icona lucchetto per impostarla su On.
  7. Nella sezione Configura l'ambito e la crittografia del backup, segui questi passaggi:

    1. Seleziona l'ambito del piano di backup:

      • Fai clic su Intero cluster (inclusi tutti gli spazi dei nomi) per eseguire il backup di tutte le risorse con spazio dei nomi nel backup.
      • Fai clic su Spazi dei nomi selezionati all'interno di questo cluster per scegliere gli spazi dei nomi da includere nel piano di backup.
      • Fai clic su Applicazioni protette selezionate all'interno di questo cluster per aggiungere risorse specificando lo spazio dei nomi e il nome dell'applicazione.
    2. Fai clic sulla casella di controllo Secrets per includere le risorse Kubernetes Secret.

    3. Fai clic sulla casella di controllo Dati di volumi permanenti se vuoi includere i dati del volume nel backup. Se scegli di saltare i dati di volume, non potrai ripristinarli durante il ripristino. Tuttavia, hai due opzioni per scegliere i dati di volume durante il ripristino: Esegui il provisioning di nuovi volumi o Riutilizza i volumi esistenti.

    4. Per attivare la crittografia CMEK, devi prima concedere l'accesso alle chiavi CMEK appropriate (consulta la sezione Informazioni sulla crittografia CMEK).

      1. Fai clic sulla casella di controllo Utilizza una chiave di crittografia gestita dal cliente per selezionare una chiave.
  8. Rivedi i dettagli del piano di backup e fai clic su Crea piano.

Terraform

Crea una risorsa google_gke_backup_backup_plan.

resource "google_gke_backup_backup_plan" "basic" {
   name = "BACKUP_PLAN"
   cluster = google_container_cluster.CLUSTER.id
   location = "LOCATION"
   retention_policy {
     backup_retain_days = 7
   }
   backup_schedule {
     cron_schedule = "17 3 * * *"
   }
   backup_config {
     include_volume_data = true
     include_secrets = true
     all_namespaces = true
   }
}

Sostituisci quanto segue:

  • BACKUP_PLAN: il nome del piano di backup che vuoi creare.
  • CLUSTER: il nome della risorsa google_container_cluster.
  • LOCATION: la regione in cui vuoi archiviare i backup.

Per ulteriori informazioni, consulta gke_backup_backup_plan.

Visualizzare un piano di backup

Visualizza un piano di backup e i relativi dettagli utilizzando gcloud CLI o la console Google Cloud.

gcloud

Per elencare tutti i piani di backup all'interno del progetto e della regione, esegui il seguente comando:

gcloud beta container backup-restore backup-plans list \
    --project=PROJECT_ID \
    --location=LOCATION

Solo per i comandi list, puoi specificare - come valore per qualsiasi parametro, tranne per PROJECT_ID. Il valore - funge da carattere jolly. Il valore - è predefinito per qualsiasi parametro se non specifichi un'opzione di riga di comando o non imposti una proprietà.

Per l'elenco completo delle opzioni, consulta la documentazione di gcloud beta container backup-restore backup-plans list.

Per visualizzare i dettagli di un piano di backup, esegui il seguente comando:

gcloud beta container backup-restore backup-plans describe BACKUP_PLAN \
     --project=PROJECT_ID \
     --location=LOCATION

Per l'elenco completo delle opzioni, consulta la documentazione di gcloud beta container backup-restore backup-plans describe.

Console

Segui le istruzioni riportate di seguito per visualizzare un piano di backup nella console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine.

  2. Nel menu di navigazione, fai clic su Backup per GKE.

  3. Fai clic sulla scheda Piani di backup.

  4. Espandi il cluster e fai clic sul nome del piano.

  5. Fai clic sulla scheda Dettagli per visualizzare i dettagli del piano.

Aggiornare un piano di backup

Puoi aggiornare le informazioni del piano di backup, ad esempio la descrizione, l'ambito del backup, la modalità di backup, la crittografia o la pianificazione del backup. Puoi anche modificare il criterio di conservazione del piano di backup, ad esempio il periodo di conservazione dei backup o il periodo di tempo durante il quale i backup non possono essere eliminati.

Aggiorna un piano di backup utilizzando gcloud CLI o la console Google Cloud.

gcloud

Per aggiornare un piano di backup, ad esempio aggiungendo una nuova descrizione, esegui il seguente comando:

gcloud beta container backup-restore backup-plans update BACKUP_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --description=DESCRIPTION

Per l'elenco completo delle opzioni, consulta la documentazione di gcloud beta container backup-restore backup-plans update.

Console

Segui le istruzioni riportate di seguito per aggiornare un piano di backup nella console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel menu di navigazione, fai clic su Backup per GKE.

  3. Fai clic sulla scheda Piani di backup.

  4. Espandi il cluster e fai clic sul nome del piano.

  5. Fai clic sulla scheda Dettagli per modificare i dettagli del piano.

  6. Fai clic su Modifica per modificare una sezione del piano e poi su Salva modifiche.

Mettere in pausa una pianificazione del backup

I piani di backup possono essere messi in pausa manualmente o automaticamente per mettere in pausa le pianificazioni dei backup. Quando il piano di backup è in pausa, i backup automatici non vengono creati. Tuttavia, puoi comunque creare backup manuali. Per le istruzioni, consulta Creare un backup manuale.

  • Pausa manuale: puoi mettere in pausa manualmente un piano di backup utilizzando la console Google Cloud, gcloud o terraform.
  • Messa in pausa automatica: Backup per GKE può mettere in pausa automaticamente un piano di backup nei seguenti scenari:

    • Quando avvii un backup (programmato o manuale), se si verifica uno dei seguenti errori:

      • StatusInvalidCluster: l'errore StatusInvalidCluster indica una condizione non recuperabile in cui il nome del cluster non è valido o le informazioni sui metadati del cluster non sono disponibili.
      • GKEMetadataNotEnabledOnNodepool: l'errore GKEMetadataNotEnabledOnNodepool rappresenta una condizione non recuperabile in cui la federazione delle identità per i carichi di lavoro per GKE è abilitata nel cluster, ma GKE_METADATA non è configurato su nessun pool di nodi, impedendo il corretto funzionamento dell'agente.
      • AgentNotInstalled: l'errore AgentNotInstalled indica una condizione non recuperabile in cui il cluster non ha installato le definizioni di risorse personalizzate dell'agente necessarie, il che implica un'installazione dell'agente non corretta.
    • Se un backup rimane nella fase Creazione per un'ora, potrebbe indicare problemi di connettività tra il cluster e Google Cloud o una configurazione errata dell'agente.

    • Per evitare ripetuti errori di backup se tutte le seguenti condizioni sono soddisfatte:

      • Il piano di backup contiene almeno tre backup, indipendentemente dal fatto che siano successful o failed.
      • Gli ultimi due tentativi di backup non sono riusciti.
      • L'ultimo backup riuscito risale a più di 30 giorni fa.

      Se il piano di backup è stato messo in pausa a causa di errori di backup, puoi risolvere il problema verificando il campo Rischio RPO attuale nella pagina dei dettagli del piano di backup e il campo Motivo dello stato nei backup non riusciti recenti. Se la messa in pausa non è intenzionale e il problema è stato risolto, riprendere il piano di backup per continuare i backup automatici.

Puoi configurare avvisi per i piani di backup in pausa e riattivarli quando i problemi di fondo sono stati risolti. Per le istruzioni, consulta Configurare gli avvisi per i piani di backup in pausa.

gcloud

Per mettere in pausa una pianificazione dei backup, esegui il comando seguente:

gcloud beta container backup-restore backup-plans update BACKUP_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --paused

Per l'elenco completo delle opzioni, consulta la documentazione di gcloud beta container backup-restore backup-plans update.

Console

Segui le istruzioni riportate di seguito per mettere in pausa una pianificazione dei backup nella console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel menu di navigazione, fai clic su Backup per GKE.

  3. Fai clic sulla scheda Piani di backup.

  4. Espandi il cluster e fai clic sul nome del piano.

  5. Fai clic su Metti in pausa pianificazione e poi su Metti in pausa pianificazione nella finestra di dialogo di conferma.

Terraform

   resource "google_gke_backup_backup_plan" "basic" {
     name = "BACKUP_PLAN"
     cluster = google_container_cluster.CLUSTER.id
     location = "LOCATION"
     backup_schedule {
       paused = True
     }
     backup_config {
       include_volume_data = true
       include_secrets = true
       all_namespaces = true
     }
   }

Sostituisci quanto segue:

  • BACKUP_PLAN: il nome del piano di backup che vuoi mettere in pausa.
  • CLUSTER: il nome della risorsa google_container_cluster.
  • LOCATION: la posizione del piano di backup.

Ripristinare un piano di backup

Console

Segui le istruzioni riportate di seguito per riprendere un piano di backup nella console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel menu di navigazione, fai clic su Backup per GKE.

  3. Fai clic sulla scheda Piani di backup.

  4. Espandi il cluster e fai clic sul nome del piano.

  5. Fai clic su Riprendi pianificazione e poi su Riprendi pianificazione nella finestra di dialogo di conferma.

Terraform

   resource "google_gke_backup_backup_plan" "basic" {
     name = "BACKUP_PLAN"
     cluster = google_container_cluster.CLUSTER.id
     location = "LOCATION"
     backup_schedule {
       paused = false
     }
     backup_config {
       include_volume_data = true
       include_secrets = true
       all_namespaces = true
     }
   }

Sostituisci quanto segue:

  • BACKUP_PLAN: il nome del piano di backup che vuoi riprendere.
  • CLUSTER: il nome della risorsa google_container_cluster.
  • LOCATION: la posizione del piano di backup.

Eliminare un piano di backup

Puoi eliminare un piano di backup utilizzando gcloud CLI o la console Google Cloud. Non puoi eliminare un piano di backup se contiene backup.

gcloud

Per eliminare un piano di backup, esegui il seguente comando:

gcloud beta container backup-restore backup-plans delete BACKUP_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION

Per l'elenco completo delle opzioni, consulta la documentazione di gcloud beta container backup-restore backup-plans delete.

Console

Segui queste istruzioni per eliminare un piano di backup nella console Google Cloud:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel menu di navigazione, fai clic su Backup per GKE.

  3. Fai clic sulla scheda Piani di backup.

  4. Espandi il cluster e fai clic sul nome del piano.

  5. Fai clic su Elimina piano.

  6. Digita il nome del piano di backup e fai clic su Elimina piano di backup nella finestra di dialogo di conferma.

Passaggi successivi