Best practice per il provisioning e la configurazione automatici di sistemi e server edge e bare metal

Last reviewed 2024-07-31 UTC

Questo documento suggerisce le best practice per la progettazione e l'implementazione di processi di provisioning e configurazione affidabili e automatizzati per i dispositivi in esecuzione ai margini del tuo ambiente, ad esempio:

Leggi questo documento se progetti processi di provisioning e configurazione per dispositivi edge e sistemi e server bare metal o se vuoi saperne di più sulle best practice per il provisioning e la configurazione di questi tipi di dispositivi.

Questo documento non elenca tutte le best practice possibili per il provisioning e la configurazione di sistemi e server edge e bare metal e non ti offre garanzie di successo. Ti aiuta invece a stimolare discussioni su potenziali modifiche e miglioramenti ai processi di provisioning e configurazione.

Questo documento fa parte di una serie di documenti che forniscono informazioni sulle architetture IoT su Google Cloud. Gli altri documenti di questa serie includono:

Il provisioning e la configurazione manuali di un ampio parco dispositivi sono soggetti a errori umani e non sono scalabili man mano che il parco risorse cresce. Ad esempio, potresti dimenticarti di eseguire un'attività di provisioning o configurazione critica oppure potresti fare affidamento su processi documentati parzialmente o completamente. Processi di provisioning e configurazione completamente automatizzati e affidabili aiutano a risolvere questi problemi. Ti aiutano anche a gestire il ciclo di vita di ogni dispositivo dalla produzione al ritiro e allo smaltimento.

Terminologia

I seguenti termini sono importanti per comprendere come implementare e creare processi di provisioning e configurazione automatizzati per i tuoi dispositivi:

  • Dispositivo edge: un dispositivo che implementi ai margini del tuo ambiente vicino ai dati che vuoi elaborare.
  • Processo di provisioning:l'insieme di attività che devi completare per preparare un dispositivo per la configurazione.
  • Procedura di configurazione:l'insieme di attività che devi completare per preparare un dispositivo a operare in un ambiente specifico.
  • Gestione della configurazione:l'insieme di attività che esegui continuamente per gestire la configurazione del tuo ambiente e dei tuoi dispositivi.
  • Immagine di base:un sistema operativo (OS) o un firmware minimo funzionante prodotto dalla tua azienda o da un produttore di dispositivi o sistemi operativi.
  • Immagine golden:un'immagine del sistema operativo o del firmware immutabile che crei per i tuoi dispositivi o prepari da un'immagine di base. Le immagini dorate includono tutti i dati e le informazioni di configurazione necessarie ai tuoi dispositivi per svolgere le attività assegnate. Puoi preparare varie immagini dorate per svolgere diverse attività. I sinonimi per i tipi di immagini dorate includono varianti, versioni e archetipi.
  • Immagine silver: un'immagine del sistema operativo o del firmware che prepari per i tuoi dispositivi applicando modifiche minime a un'immagine golden o di base. I dispositivi che eseguono un'immagine silver completano il provisioning e la configurazione al primo avvio, in base alle esigenze dei casi d'uso che devono supportare.
  • Dispositivo seed:un dispositivo che avvia l'ambiente senza dipendenze esterne.
  • Avvio di rete:l'insieme di tecnologie che consente a un dispositivo di ottenere software e qualsiasi informazione di configurazione correlata dalla rete, anziché da un sistema di archiviazione collegato al dispositivo.

Per aiutarti a impostare gli obiettivi ed evitare problemi comuni, applica le best practice per il provisioning e la configurazione descritte nelle sezioni seguenti.

Automatizza i processi di provisioning e configurazione

Durante il primo avvio o in qualsiasi momento sia necessario, i tuoi dispositivi devono essere in grado di eseguire il provisioning e la configurazione utilizzando solo l'immagine software installata al loro interno.

Per evitare di implementare la logica necessaria durante i processi di provisioning e configurazione, puoi utilizzare strumenti che ti forniscono le primitive necessarie per orchestrare e implementare questi processi. Ad esempio, puoi utilizzare cloud-init e la relativa origine dati NoCloud, insieme a script o a uno strumento di gestione della configurazione, ad esempio Ansible, Puppet, o Chef, in esecuzione sull'host locale.

Per progettare processi di provisioning e configurazione affidabili, assicurati che tutti i passaggi e le attività eseguiti durante questi processi siano validi, possibilmente in modo automatico. Ad esempio, puoi utilizzare un framework di test di conformità automatizzato, come InSpec, per verificare che i processi di provisioning e configurazione funzionino come previsto.

Questa best practice ti aiuta a evitare single point of failure e la necessità di un intervento manuale quando devi completare il provisioning e la configurazione del dispositivo.

Evita i dispositivi per scopi speciali

Quando progetti i tuoi dispositivi edge, riduci al minimo la loro varianza in termini di scopo e specialità. Questo consiglio non significa che tutti i tuoi dispositivi edge debbano essere uguali tra loro o condividere lo stesso scopo, ma dovrebbero essere il più omogenei possibile. Ad esempio, potresti definire gli archetipi di dispositivo in base ai tipi di carichi di lavoro che devono supportare. Poi puoi eseguire il deployment e gestire i tuoi dispositivi in base alle proprietà di questi archetipi.

Per assicurarti di seguire questa best practice, verifica di poter scegliere un dispositivo a caso tra quelli di un determinato archetipo e poi procedi nel seguente modo:

  • Tratta il dispositivo come faresti con altri dispositivi dello stesso tipo. In questo modo dimostri di avere efficienza operativa.
  • Sostituisci il dispositivo con dispositivi dello stesso archetipo senza personalizzazioni aggiuntive. In questo modo dimostri di aver implementato correttamente questi archetipi.

Questa best practice ti consente di ridurre la varianza nel tuo parco dispositivi, il che porta a una minore frammentazione nell'ambiente e nei processi di provisioning e configurazione.

Utilizza i dispositivi seed per eseguire il bootstrap dell'ambiente

Durante il provisioning e la configurazione dei dispositivi, potresti riscontrare un problema di dipendenza circolare: i dispositivi hanno bisogno di un'infrastruttura di supporto per eseguire il provisioning e la configurazione, ma questa infrastruttura non è presente perché devi ancora eseguire il provisioning e la configurazione.

Puoi risolvere questo problema con i dispositivi seed. I dispositivi seed hanno uno scopo speciale temporaneo. Dopo aver completato le attività per le quali è stato progettato lo scopo speciale, il comportamento e lo stato del dispositivo vengono conformati all'archetipo pertinente.

Ad esempio, se utilizzi cloud-init per inizializzare automaticamente i tuoi dispositivi, potresti dover configurare un'origine dati NoCloud di cloud-init nei seguenti modi:

  1. Fornisci i dati dell'origine dati NoCloud al dispositivo di seeding tramite un file system.
  2. Attendi che il dispositivo seed completi il provisioning e la configurazione con il suo scopo speciale, che include la pubblicazione dei dati dell'origine dati NoCloud su altri dispositivi tramite la rete.

    Le procedure di provisioning e configurazione sul dispositivo seed attendono fino a quando non vengono soddisfatte le condizioni per eliminare lo scopo speciale temporaneo del dispositivo seed. Ecco alcuni esempi di queste condizioni:

    • Nell'ambiente sono presenti altri dispositivi che forniscono i dati dell'origine dati NoCloud sulla rete?
    • Il cluster contiene un numero sufficiente di nodi?
    • Il primo backup è stato completato?
    • Il sito di ripristino di emergenza è pronto?
  3. Esegui il provisioning e configura altri dispositivi che scaricano i dati dell'origine dati NoCloud tramite la rete dal dispositivo seed. Alcuni dispositivi devono essere in grado di fornire i dati dell'origine dati NoCloud tramite la rete.

  4. I processi di provisioning e configurazione sul dispositivo seed riprendono perché sono soddisfatte le condizioni per abbandonare lo scopo speciale del dispositivo seed: ci sono altri dispositivi nel parco che forniscono i dati dell'origine dati NoCloud tramite la rete.

  5. Le procedure di provisioning e configurazione sul dispositivo seed eliminano lo scopo speciale, rendendo il dispositivo seed indistinguibile dagli altri dispositivi dello stesso archetipo.

Questa best practice garantisce che tu possa eseguire il bootstrap del tuo ambiente anche senza infrastruttura di supporto e senza contravvenire alla best practice Evita dispositivi per scopi speciali.

Ridurre al minimo la gestione dello stato dei dispositivi

Quando progetti i tuoi dispositivi edge, riduci al minimo la necessità di memorizzare informazioni stateful. I dispositivi edge potrebbero avere risorse hardware limitate o essere implementati in ambienti difficili. Ridurre al minimo le informazioni con stato necessarie per il funzionamento semplifica i processi di provisioning, configurazione, backup e ripristino, perché puoi trattare questi dispositivi in modo omogeneo. Se un dispositivo edge stateless inizia a funzionare male e non è recuperabile, ad esempio, puoi sostituirlo con un altro dispositivo dello stesso archetipo con interruzioni o perdita di dati minime.

Questa best practice ti aiuta a evitare problemi imprevisti dovuti alla perdita di dati o alla complessità eccessiva dei tuoi processi. La maggior parte della complessità deriva dalla necessità di supportare un parco dispositivi eterogeneo.

Crea automaticamente immagini del sistema operativo e del firmware

Per evitare costose attività di provisioning e configurazione al primo avvio dei dispositivi e per risparmiare risorse del dispositivo, personalizza le immagini del sistema operativo e del firmware prima di renderle disponibili. Ad esempio, potresti installare le dipendenze direttamente nell'immagine anziché installarle al primo avvio di ogni dispositivo.

Quando prepari le immagini del sistema operativo e del firmware per i tuoi dispositivi, parti da un'immagine di base. Quando personalizzi l'immagine di base, puoi:

  • Produci immagini dorate. Le immagini dorate contengono tutte le dipendenze nell'immagine, in modo che i dispositivi non debbano installarle al primo avvio. La produzione di immagini dorate potrebbe essere un'attività complessa, ma consente ai tuoi dispositivi di risparmiare tempo e risorse durante il provisioning e la configurazione.
  • Produci immagini in bianco e nero. A differenza delle immagini golden, i dispositivi che eseguono immagini silver completano tutti i processi di provisioning e configurazione durante il primo avvio. La produzione di immagini silver può essere meno complessa rispetto alla produzione di immagini golden, ma i dispositivi che eseguono un'immagine silver impiegano più tempo e risorse durante il provisioning e la configurazione.

Puoi personalizzare le immagini del sistema operativo e del firmware nell'ambito dei processi di integrazione continua e deployment continuo (CI/CD) e rendere automaticamente disponibili le immagini personalizzate sui tuoi dispositivi dopo la convalida. I processi CI/CD che implementi con uno strumento come Cloud Build, GitHub Actions, GitLab CI/CD, o Jenkins, possono eseguire la seguente sequenza di attività:

  1. Esegui una convalida automatica rispetto alle immagini personalizzate.
  2. Pubblica le immagini personalizzate in un repository da cui i tuoi dispositivi possono ottenerle.

Se l'ambiente CI/CD e il sistema operativo o il firmware per cui devi creare immagini utilizzano architetture hardware diverse, puoi utilizzare strumenti come QEMU per emulare queste architetture. Ad esempio, puoi emulare l'architettura hardware della famiglia ARM su un'architettura x86_64.

Per personalizzare le immagini del sistema operativo o del firmware, devi essere in grado di modificarle e verificare queste modifiche in un ambiente di test prima di installarle nei tuoi dispositivi edge. Strumenti come chroot consentono di modificare virtualmente, ma non fisicamente, la directory principale prima di eseguire un comando.

Questa best practice ti aiuta a personalizzare le immagini del sistema operativo e del firmware prima di renderle disponibili per i tuoi dispositivi.

Orchestra in modo affidabile i carichi di lavoro in esecuzione sui tuoi dispositivi

Se i tuoi dispositivi supportano carichi di lavoro eterogenei, puoi utilizzare i seguenti strumenti per orchestrare questi carichi di lavoro e gestirne il ciclo di vita:

  • Un sistema di orchestrazione dei carichi di lavoro:l'utilizzo di un sistema di orchestrazione dei carichi di lavoro, come Kubernetes, è adatto per i carichi di lavoro che hanno requisiti complessi di orchestrazione o gestione del ciclo di vita. Questi sistemi sono adatti anche per i workload che si estendono su più componenti. In entrambi i casi, non devi implementare autonomamente la logica di orchestrazione e gestione del ciclo di vita dei carichi di lavoro. Se i tuoi dispositivi hanno risorse limitate, puoi installare una distribuzione Kubernetes leggera che richiede meno risorse di quella canonica, ad esempio MicroK8s, K3s o Google Distributed Cloud installato con il profilo edge.
  • Un sistema init:l'utilizzo di un sistema init, come systemd, è adatto per i workload con le seguenti caratteristiche:

    • Requisiti di orchestrazione semplici
    • Mancanza di risorse per supportare un sistema di orchestrazione dei workload
    • Carichi di lavoro che non possono essere inseriti nei container

Dopo aver implementato un sistema per orchestrare i carichi di lavoro, puoi utilizzarlo anche per eseguire attività che fanno parte dei processi di provisioning e configurazione. Se devi eseguire uno strumento di gestione della configurazione nell'ambito dei processi di provisioning e configurazione, ad esempio, puoi utilizzare il sistema di orchestrazione dei carichi di lavoro come faresti con qualsiasi altro carico di lavoro.

Questa best practice ti aiuta a orchestrare i workload in esecuzione sui tuoi dispositivi.

Verificare, autenticare e connettere i dispositivi

Quando devi verificare se i tuoi dispositivi devono connettersi a sistemi esterni, come altri dispositivi o un backend, prendi in considerazione i consigli nelle sottosezioni seguenti.

Questa best practice ti aiuta a:

  • Progetta canali di comunicazione sicuri per i tuoi dispositivi.
  • Evita potenziali backdoor che aggirano il perimetro di sicurezza dei tuoi dispositivi.
  • Verifica che i tuoi dispositivi non espongano interfacce non autorizzate che un malintenzionato potrebbe sfruttare.

Pratiche di connessione da applicare

  • Autentica le altre parti che effettuano richieste di informazioni prima di scambiare qualsiasi informazione.
  • Verifica che le informazioni trasmesse non vengano inviate tramite canali inattesi.
  • Affidati a Trusted Execution Environment per gestire i secret, come chiavi di crittografia, chiavi di autenticazione e password.
  • Verifica l'integrità e l'autenticità di qualsiasi immagine del sistema operativo o del firmware prima dell'uso.
  • Verifica la validità, l'integrità e l'autenticità di qualsiasi configurazione fornita dall'utente.
  • Limita la superficie di attacco non installando software non necessari e rimuovendo quelli già presenti sui tuoi dispositivi.
  • Limita l'utilizzo di operazioni e account con privilegi.
  • Verifica l'integrità della custodia del dispositivo se deve resistere a manipolazioni e manomissioni fisiche.

Pratiche di connessione da evitare

  • Non trasmettere informazioni sensibili su canali non criptati.
  • Evita di lasciare aperto l'accesso con privilegi, ad esempio:
    • Porte seriali e console seriali virtuali o fisiche con privilegi elevati, anche se le porte sono accessibili solo se qualcuno manomette fisicamente il dispositivo.
    • Endpoint che rispondono alle richieste provenienti dalla rete e che possono eseguire operazioni con privilegi.
  • Non fare affidamento su credenziali hardcoded nelle immagini del sistema operativo o del firmware, nella configurazione o nel codice sorgente.
  • Non rivelare informazioni che potrebbero aiutare un avversario a raccogliere informazioni per ottenere privilegi elevati. Ad esempio, devi criptare i dati sui tuoi dispositivi e disattivare i sistemi di tracciamento e registrazione non necessari sui dispositivi di produzione.
  • Non consentire a utenti e carichi di lavoro di eseguire codice arbitrario.

Monitorare i dispositivi

La raccolta di informazioni sullo stato dei tuoi dispositivi senza intervento manuale è essenziale per l'affidabilità del tuo ambiente. Assicurati che i tuoi dispositivi segnalino automaticamente tutti i dati di cui hai bisogno. Esistono due motivi principali per raccogliere e monitorare i dati:

  • Per aiutarti ad assicurarti che i tuoi dispositivi funzionino come previsto.
  • Per individuare in modo proattivo i problemi ed eseguire la manutenzione preventiva.

Ad esempio, puoi raccogliere metriche ed eventi di monitoraggio con Cloud Monitoring.

Per aiutarti a esaminare e risolvere i problemi, ti consigliamo di progettare e implementare processi per raccogliere dati diagnostici ad alta risoluzione, come informazioni dettagliate su monitoraggio, tracciamento e debug, oltre ai processi che monitorano i tuoi dispositivi durante il normale funzionamento. La raccolta di dati diagnostici ad alta risoluzione e il loro trasferimento tramite una rete possono essere costosi in termini di risorse del dispositivo, come computing, archiviazione dati e alimentazione elettrica. Per questo motivo, ti consigliamo di attivare le procedure per raccogliere dati diagnostici ad alta risoluzione solo quando necessario e solo per i dispositivi che richiedono ulteriori accertamenti. Ad esempio, se uno dei tuoi dispositivi non funziona come previsto e i dati di monitoraggio regolari che il dispositivo segnala non sono sufficienti per diagnosticare a fondo il problema, puoi attivare la raccolta di dati ad alta risoluzione per quel dispositivo in modo che segnali più informazioni che possono aiutarti a esaminare le cause del problema.

Questa best practice ti consente di non lasciare i dispositivi in uno stato sconosciuto e di disporre di dati sufficienti per determinare se e come funzionano i tuoi dispositivi.

Supportare l'avvio e gli upgrade automatici

Quando progetti i processi di provisioning e configurazione, assicurati che i tuoi dispositivi siano in grado di avviarsi automaticamente e di disporre dell'infrastruttura necessaria. Implementando un meccanismo di avvio automatico che supporta sia il primo avvio sia la distribuzione di upgrade over-the-air, aumenti la manutenibilità della tua infrastruttura. L'utilizzo dell'avvio automatico ti evita di intervenire manualmente su ogni dispositivo durante l'avvio o l'upgrade. La gestione manuale di una flotta di dispositivi di grandi dimensioni è soggetta a errori perché gli operatori potrebbero non eseguire correttamente le azioni o non avere abbastanza tempo per eseguire le azioni richieste per ogni dispositivo della flotta.

Inoltre, non devi preparare in anticipo ogni dispositivo per avviare il sistema operativo o l'immagine firmware corretti. Puoi rilasciare una nuova versione di un'immagine del sistema operativo o del firmware, ad esempio, e renderla disponibile come una delle opzioni che i tuoi dispositivi possono scegliere quando ricevono le istruzioni di avvio dalla rete.

Questa best practice ti aiuta a garantire che i tuoi dispositivi possano eseguire avvii e aggiornamenti automatici e non presidiati.

Progettare e implementare processi resilienti

Anche con processi di provisioning e configurazione completamente automatizzati, possono verificarsi errori che impediscono il corretto completamento di questi processi, lasciando i tuoi dispositivi in uno stato incoerente. Aiuta a garantire che i tuoi dispositivi siano in grado di recuperare da questi errori implementando meccanismi di ripetizione e di riserva. Quando un dispositivo non riesce a completare un'attività che fa parte dei processi di provisioning e configurazione, ad esempio, dovrebbe tentare automaticamente di ripristinare l'errore. Dopo il ripristino del dispositivo dall'errore o il ripristino di uno stato di funzionamento, può riprendere l'esecuzione dei processi dal punto in cui si è verificato l'errore.

Questa best practice ti aiuta a progettare e implementare processi di provisioning e configurazione resilienti.

Supportare l'intero ciclo di vita dei tuoi dispositivi

Quando progetti i processi di provisioning e configurazione, assicurati che possano gestire l'intero ciclo di vita del dispositivo. La gestione efficace dei cicli di vita dei dispositivi include la pianificazione della terminazione e dello smaltimento, anche se i dispositivi devono funzionare per un periodo di tempo relativamente lungo.

Se non gestisci il ciclo di vita dei tuoi dispositivi, potrebbero verificarsi problemi, come i seguenti:

  • Costi elevati sostenuti:l'introduzione del supporto per la gestione del ciclo di vita dopo che i processi di provisioning e configurazione sono stati implementati può aumentare i costi. Se pianifichi questo supporto in una fase iniziale della progettazione, potresti ridurre questi costi. Se i processi di provisioning e configurazione non supportano l'intero ciclo di vita dei tuoi dispositivi, ad esempio, potresti dover intervenire manualmente su ogni dispositivo per gestire correttamente ogni fase del ciclo di vita. L'intervento manuale può essere costoso e spesso non è scalabile.
  • Maggiore rigidità:la mancata assistenza alla gestione del ciclo di vita potrebbe alla fine impedire l'aggiornamento o la gestione dei tuoi dispositivi. Se non disponi di un meccanismo per spegnere in modo sicuro ed efficiente i tuoi dispositivi, ad esempio, potrebbe essere difficile gestirne la fine del ciclo di vita e lo smaltimento finale.

Passaggi successivi

Collaboratori

Autore: Marco Ferrari | Cloud Solutions Architect