Questo documento suggerisce le best practice per la progettazione e il provisioning e la configurazione affidabili e automatizzati per i dispositivi in esecuzione del tuo ambiente ad esempio:
- I dispositivi periferici, come Internet of Things (IoT), microcomputer e microcontroller
- Sistemi e server Bare Metal
Leggi questo documento se progetti processi di provisioning e configurazione per dispositivi periferici e sistemi e server bare metal o per saperne di più sulle best practice per il provisioning e la configurazione di questi tipi di dispositivi.
Questo documento non elenca tutte le possibili best practice per il provisioning e la configurazione di sistemi e server periferici e bare metal. Inoltre, garanzie di successo. Ti aiuta invece a stimolare la discussione su potenziali modifiche e miglioramenti ai processi di provisioning e configurazione.
Il presente documento fa parte di una serie di documenti che forniscono informazioni su IoT su Google Cloud. Gli altri documenti di questa serie includono i seguenti:
- Panoramica delle architetture di dispositivi connessi su Google Cloud
- Architettura autonoma del broker MQTT su Google Cloud
- Architettura dei prodotti della piattaforma IoT su Google Cloud
- Dispositivo nell'architettura Pub/Sub a Google Cloud
- Best practice per l'esecuzione di un backend IoT su Google Cloud
- Best practice per il provisioning e la configurazione automatici di sistemi e server perimetrali e bare metal (questo documento)
Il provisioning e la configurazione manuale di un ampio parco dispositivi sono soggetti a errore umano e non si adatta all'espansione della flotta. Ad esempio, potresti dimenticare di eseguire un'attività critica di provisioning o di configurazione, oppure su processi parzialmente o completamente non documentati. Completamente automatizzati e processi di provisioning e configurazione affidabili aiutano a risolvere questi problemi. Loro ti aiutano anche a gestire il ciclo di vita di ogni dispositivo, dalla produzione dal ritiro delle risorse per lo smaltimento.
Terminologia
I termini seguenti sono importanti per capire come implementare e creare processi di provisioning e configurazione automatici per i tuoi dispositivi:
- Dispositivo Edge: un dispositivo di cui esegui il deployment a livello perimetrale del tuo ambiente più vicino ai dati che vuoi elaborare.
- Processo di provisioning: l'insieme di attività da completare per prepararti un dispositivo per la configurazione.
- Procedura di configurazione: l'insieme di attività che devi completare per creare una pronto per operare in un ambiente specifico.
- Gestione della configurazione:l'insieme di attività che esegui continuamente per gestire la configurazione dell'ambiente e dei dispositivi.
- Immagine di base: un sistema operativo o un firmware che funzionano al minimo indispensabile immagine prodotta dalla tua azienda o prodotta da un produttore di dispositivi o sistemi operativi.
- Immagine aurea: un'immagine del sistema operativo o del firmware immutabile per cui crei i tuoi dispositivi o prepararti da un'immagine di base. Le immagini dorate includono tutti i dati e le informazioni di configurazione necessarie ai dispositivi per ad attività assegnate. Puoi preparare varie immagini dorate per svolgere diverse attività. I sinonimi dei tipi di immagini aurea includono: flavors, spin e archetipi.
- Immagine argento: un'immagine del sistema operativo o del firmware che hai preparato per il tuo dispositivi con l'applicazione di modifiche minime a un'immagine dorata o a un'immagine di base. I dispositivi con un'immagine di colore argento completano il provisioning e configurazione al primo avvio, in base alle esigenze dei casi d'uso che questi dispositivi devono supportare.
- Dispositivo seed: un dispositivo che esegue il bootstrap del tuo ambiente senza server delle dipendenze.
- Avvio dalla rete:l'insieme di tecnologie che consentono a un dispositivo di ottenere software ed eventuali informazioni di configurazione correlate provenienti dalla rete, anziché da un sistema di archiviazione collegato al dispositivo.
Per impostare gli obiettivi ed evitare problemi comuni, applica le best practice per il provisioning e la configurazione descritti nelle sezioni seguenti.
Automatizza i processi di provisioning e configurazione
Durante il primo avvio, o ogni volta che è necessario, i tuoi dispositivi dovrebbero 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 il provisioning di configurazione, puoi usare strumenti che ti forniscono le primitive necessarie per orchestrare e implementare questi processi. Ad esempio, puoi utilizzare cloud-init e le relative Origine dati NoCloud, insieme allo scripting o a uno strumento di gestione delle configurazioni, 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à eseguite durante questi processi siano validi, possibilmente in una in modo automatizzato. Ad esempio, puoi utilizzare un test di conformità automatizzato modello di machine learning, come InSpec, per verificare che i processi di provisioning e configurazione operino previsto.
Questa best practice consente di evitare single point of failure e la necessità di l'intervento manuale quando devi completare il provisioning configurazione.
Evita di usare dispositivi per scopi speciali
Quando progetti i tuoi dispositivi periferici, riduci al minimo la loro varianza in termini di finalità e specialità. Questo consiglio non significa che tutti i dispositivi periferici essere uguali o condividere lo stesso scopo, ma devono essere entrambi più omogeneo possibile. Ad esempio, puoi definire gli archetipi dei dispositivi in base tipi di carichi di lavoro da supportare. Dopodiché potrai 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 in modo casuale da quelli di un determinato archetipo, quindi:
- Utilizza il dispositivo come qualsiasi altro dispositivo dello stesso archetipo. Attività dimostra l'efficienza operativa.
- Sostituire il dispositivo con dispositivi dello stesso archetipo senza ulteriori personalizzazioni. In questo modo dimostri di aver implementato correttamente questi archetipi.
Questa best practice garantisce di ridurre la varianza nel parco risorse dispositivi, riducendo la frammentazione all'interno dell'ambiente e e processi di provisioning e configurazione.
Usa i dispositivi di origine per eseguire il bootstrap del tuo ambiente
Durante il provisioning e la configurazione dei dispositivi, potresti imbatterti in una di dipendenza circolare: i dispositivi hanno bisogno di un'infrastruttura di supporto eseguire il provisioning e configurare da soli, ma l'infrastruttura non è attiva perché devi ancora eseguirne il provisioning e configurarlo.
Puoi risolvere questo problema con i dispositivi di origine. I dispositivi origine hanno un accesso temporaneo per uno scopo speciale. Dopo aver completato le attività per le quali lo scopo speciale era progettato, il dispositivo è conforme al comportamento e allo stato all'archetipo pertinente.
Ad esempio, se utilizzi cloud-init per inizializzare automaticamente il tuo potrebbe essere necessario configurare un'origine dati Cloud-init NoCloud nel nei seguenti modi:
- Fornisci i dati dell'origine dati NoCloud al dispositivo di origine tramite un file di un sistema operativo completo.
Attendi che il dispositivo di origine completi il proprio provisioning configurazione con il suo scopo speciale, che include la pubblicazione l'origine dati NoCloud ad altri dispositivi sulla rete.
I processi di provisioning e configurazione sul dispositivo di origine attendono quindi finché non vengono soddisfatte le condizioni in cui il dispositivo di origine non ha più lo scopo speciale sono soddisfatte determinate condizioni. Alcuni esempi di queste condizioni sono:
- Sono presenti altri dispositivi nell'ambiente che gestiscono Dati dell'origine dati NoCloud sulla rete?
- Ci sono abbastanza nodi nel cluster?
- Il primo backup è stato completato?
- Il sito di ripristino di emergenza è pronto?
Esegui il provisioning e la configurazione di altri dispositivi che scaricano l'app Dati dell'origine dati NoCloud sulla rete dal dispositivo di origine. Alcuni dispositivi i dati dell'origine dati NoCloud sulla rete.
I processi di provisioning e configurazione sul dispositivo di origine riprendono poiché le condizioni per rilasciare lo scopo speciale del dispositivo di origine sono soddisfatti: nel parco dispositivi sono presenti altri dispositivi che gestiscono l'origine dati NoCloud dati sulla rete.
I processi di provisioning e configurazione sul dispositivo di origine eliminano per uno scopo speciale, rendendo il dispositivo di origine indistinguibile dagli altri dello stesso archetipo.
Questa best practice garantisce di poter eseguire il bootstrap del tuo ambiente anche senza infrastruttura di supporto e senza violare Evita dispositivi per scopi speciali best practice.
Riduci al minimo lo statefulness dei dispositivi
Durante la progettazione dei dispositivi periferici, mantieni la necessità di archiviare informazioni stateful come minimo. I dispositivi periferici potrebbero avere risorse hardware limitate o eseguire il deployment in ambienti difficili. Riducendo al minimo le informazioni stateful necessarie semplifica il provisioning, la configurazione, il backup processi di ripristino perché è possibile trattare questi dispositivi in modo omogeneo. Se dispositivo periferico stateless inizia a funzionare in modo non corretto e non è recuperabile, Ad esempio, puoi sostituirlo con un altro dispositivo dello stesso archetipo con una o la perdita di dati.
Questa best practice ti aiuta a evitare problemi imprevisti dovuti alla perdita di dati oppure perché i tuoi processi sono troppo complessi. La maggior parte della complessità deriva dalla necessità per supportare un parco dispositivi eterogenei.
Crea automaticamente immagini del sistema operativo e del firmware
Per evitare dispendiose attività di provisioning e configurazione all'inizio dei dispositivi all'avvio e per risparmiare risorse del dispositivo, personalizza le immagini del sistema operativo e del firmware rendendoli disponibili. Puoi, ad esempio, installare le dipendenze direttamente l'immagine anziché installarle all'avvio di ciascun dispositivo per la prima nel tempo.
Quando prepari le immagini del sistema operativo e del firmware per i tuoi dispositivi, inizi da una come immagine di base. Quando personalizzi l'immagine di base, puoi effettuare le seguenti operazioni:
- Produci immagini dorate. Le immagini dorate contengono tutte le dipendenze nell'immagine, che i dispositivi non debbano installare queste dipendenze al primo avvio. Realizzare immagini dorate può essere un'attività complessa, ma ti consentono per risparmiare tempo e risorse durante il provisioning e la configurazione.
- Produci immagini d'argento. A differenza delle immagini dorate, i dispositivi che eseguono immagini argento completare tutti i processi di provisioning e configurazione durante il primo processo avvio. Produrre immagini d'argento può essere meno complesso che produrre immagini dorate ma i dispositivi con un'immagine di colore argento impiegano più tempo e risorse durante il provisioning e la configurazione.
Puoi personalizzare le immagini del sistema operativo e del firmware come parte delle processi di integrazione e deployment continuo (CI/CD) e rende le immagini personalizzate disponibili per i dispositivi dopo la convalida. CI/CD i processi implementati con uno strumento come Cloud Build Azioni GitHub, CI/CD GitLab, o Jenkins, può eseguire la seguente sequenza di attività:
- Esegui una convalida automatica delle immagini personalizzate.
- Pubblica le immagini personalizzate in un repository in cui i dispositivi possono ottenerle.
Se il tuo ambiente CI/CD e il sistema operativo o il firmware per cui devi creare le immagini usano diverse architetture hardware, puoi usare strumenti come QEMU per emulare queste architetture. Ad esempio, puoi emulare l'hardware dell'architettura Famiglia ARM su un architettura x86_64.
Per personalizzare le immagini del sistema operativo o del firmware, devi poterle modificare e verificare le modifiche in un ambiente di test prima di installarle nel tuo dispositivi periferici. Strumenti come chroot consente di cambiare virtualmente ma non fisicamente la directory radice prima eseguendo un comando.
Questa best practice consente di personalizzare le immagini del sistema operativo e del firmware prima di effettuare le immagini disponibili per i 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 i carichi di lavoro e gestirne il ciclo di vita:
- Un sistema di orchestrazione dei carichi di lavoro:utilizzo di un'orchestrazione dei carichi di lavoro come Kubernetes è adatta a carichi di lavoro con orchestrazione o ciclo di vita complessi requisiti di gestione. Questi sistemi sono adatti anche a carichi di lavoro su più componenti. In entrambi i casi, significa che non dovrai implementare la logica di orchestrazione e di gestione del ciclo di vita dei carichi di lavoro per te. Se i tuoi dispositivi non dispongono di risorse sufficienti, puoi installare una distribuzione Kubernetes leggera che richiede meno risorse canonico, come MicroK8s K3 o Google Distributed Cloud installato con il profilo perimetrale.
Un sistema di inizializzazione: l'utilizzo di un oggetto init system, Mi piace systemd, è adatto a carichi di lavoro con le seguenti caratteristiche:
- Semplici requisiti di orchestrazione
- Mancanza di risorse per supportare un sistema di orchestrazione dei carichi di lavoro
- Carichi di lavoro che non possono essere inseriti in container
Una volta messo a punto il sistema per l'orchestrazione dei carichi di lavoro, puoi anche eseguire attività che fanno parte dei processi di provisioning e configurazione. Se devi eseguire uno strumento di gestione della configurazione nell'ambito del provisioning per i processi di configurazione e configurazione, ad esempio, puoi utilizzare l'orchestrazione come faresti con qualsiasi altro carico di lavoro.
Questa best practice aiuta a garantire di poter orchestrare i carichi di lavoro in esecuzione sui tuoi dispositivi.
Verificare, autenticare e connettere i dispositivi
Per verificare se i dispositivi devono connettersi a sistemi esterni, ad esempio altri dispositivi o a un backend, considera i consigli le seguenti sottosezioni.
Questa best practice consente di:
- Progetta canali di comunicazione sicuri per i tuoi dispositivi.
- Evitare potenziali backdoor che aggirano il perimetro di sicurezza del dispositivi mobili.
- Verifica che i dispositivi non espongono interfacce non autorizzate che che un aggressore potrebbe sfruttare.
Pratiche di connessione da applicare
- Autenticare le altre parti che effettuano richieste di informazioni prima scambiando informazioni.
- Verifica che le informazioni trasmesse non si trasferiscano in modo imprevisto canali.
- Affidati ad ambienti di esecuzione affidabili per gestire come chiavi di crittografia, chiavi di autenticazione e password.
- Verificare l'integrità e l'autenticità di qualsiasi immagine del sistema operativo o del firmware prima dell'uso.
- Verificare la validità, l'integrità e l'autenticità di qualsiasi configurazione fornita dall'utente.
- Limita la superficie di attacco evitando di installare software superflui rimuovendo quelli già esistenti sui tuoi dispositivi.
- Limita l'utilizzo di operazioni e account con privilegi.
- Verifica l'integrità della custodia del dispositivo se è necessario resistere manipolazione fisica e manomissione.
Pratiche di connessione da evitare
- Non trasmettere informazioni sensibili tramite canali non criptati.
- Evita di lasciare aperto l'accesso privilegiato, ad esempio:
- Virtuale o fisico porte seriali e console seriali con privilegi elevati, anche se le porte sono accessibili solo se che qualcuno manometta fisicamente il dispositivo.
- Gli endpoint che rispondono alle richieste provenienti dalla rete che possono eseguire operazioni con privilegi.
- Non fare affidamento su credenziali hardcoded nelle immagini del sistema operativo o del firmware. configurazione o codice sorgente.
- Non rivelare informazioni che potrebbero aiutare un avversario a raccogliere informazioni per ottenere privilegi elevati. Ad esempio, dovresti criptare dati sui tuoi dispositivi e disattivare i sistemi di tracciamento e logging non necessari i dispositivi di produzione.
- Non consentire a utenti e carichi di lavoro di eseguire codice arbitrario.
Monitora i tuoi dispositivi
Raccolta di informazioni sullo stato dei dispositivi senza istruzioni è essenziale per l'affidabilità del tuo ambiente. Assicurati che i tuoi dispositivi segnalano automaticamente tutti i dati di cui hai bisogno. Esistono due tipi principali Motivi per raccogliere e monitorare i dati:
- Per aiutarti a garantire 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 ad alta dati diagnostici, come monitoraggio, tracciamento e informazioni di debug, oltre ai processi che monitorano i dispositivi durante durante il normale funzionamento. Raccolta di dati diagnostici ad alta risoluzione e il trasferimento mediante una rete può essere costoso in termini di risorse del dispositivo, come elaborazione, archiviazione dei dati ed energia 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 la normale I dati di monitoraggio segnalati dal dispositivo non sono sufficienti per eseguire una diagnosi approfondita problema, puoi attivare la raccolta di dati ad alta risoluzione per quel dispositivo segnala ulteriori informazioni che possono aiutarti ad approfondire le cause del problema.
Questa best practice garantisce di non lasciare i dispositivi in uno stato sconosciuto, e di disporre di dati sufficienti per determinare se e come i tuoi dispositivi vengono l'efficienza operativa.
Supporta l'avvio automatico e gli upgrade
Quando progetti i processi di provisioning e configurazione, assicurati che dispositivi siano in grado di avviarsi in modo automatico e che tu disponga dei necessari dell'infrastruttura. Implementando un meccanismo di avvio automatico che supporta sia il primo avvio sia la distribuzione di aggiornamenti over-the-air, aumenta la manutenibilità dell'infrastruttura. Utilizzo dell'avvio automatico ti evita di dover accedere manualmente a ogni dispositivo durante l'avvio o l'upgrade. L'accesso manuale a un ampio parco di dispositivi è soggetto a errori, in quanto gli operatori potrebbero non eseguire azioni oppure eseguire in modo errato oppure non avere tempo sufficiente eseguire le azioni richieste per ogni dispositivo del parco risorse.
Inoltre, non è necessario preparare ogni dispositivo in anticipo per l'avvio del sistema operativo corretto. o l'immagine del firmware. Puoi rilasciare una nuova versione di un'immagine sistema operativo o firmware, ad esempio: e rendi disponibile tale versione come una delle opzioni che i tuoi dispositivi possono scegliere quando ricevere le istruzioni di avvio dalla rete.
Questa best practice ti aiuta a garantire che i tuoi dispositivi possano eseguire avvii e che sono automatizzati e non monitorati.
Progettare e implementare processi resilienti
Anche con processi di configurazione e provisioning completamente automatizzati, gli errori possono che impediscono il corretto completamento di questi processi, lasciando in uno stato incoerente. Assicurati che i tuoi dispositivi possano il ripristino da questi errori implementando meccanismi di ripetizione e fallback. Quando dispositivo non riesce a completare un'attività che fa parte del provisioning ai processi di configurazione, ad esempio, deve tentare automaticamente di recuperare dall'errore. Dopo che il dispositivo si è ripristinato dall'errore o fa tornare a una di lavoro, può riprendere l'esecuzione dei processi dal punto processi non riusciti.
Questa best practice è utile per progettare e implementare un provisioning resiliente e i processi di configurazione.
Supporta l'intero ciclo di vita dei tuoi dispositivi
Quando progetti i processi di provisioning e configurazione, assicurati che possono gestire l'intero ciclo di vita dei dispositivi. Gestione efficace del dispositivo dei cicli di vita include la pianificazione della chiusura e dello smaltimento, anche se i tuoi dispositivi devono essere eseguiti per un tempo relativamente lungo.
Se non gestisci il ciclo di vita dei tuoi dispositivi, potresti creare problemi. ad esempio:
- Costi elevati sostenuti: supporto per la gestione del ciclo di vita dopo mentre i processi di provisioning e configurazione possono aumentare costi aggiuntivi. Se pianifichi questo supporto nelle prime fasi della progettazione, potresti ridurre costi aggiuntivi. Se i processi di provisioning e di configurazione non supportano l'intero ciclo di vita dei dispositivi, ad esempio potresti dover intervenire su ciascun dispositivo per gestire adeguatamente ogni fase del loro ciclo di vita. L'intervento manuale può essere costoso e spesso non è adeguato.
- Maggiore rigidità: il mancato supporto della gestione del ciclo di vita potrebbe che può portare all'impossibilità di aggiornare o gestire i dispositivi. Se non abbia un meccanismo per spegnere in modo sicuro ed efficiente i dispositivi, Ad esempio, potrebbe essere difficile gestire la lo smaltimento definitivo.
Passaggi successivi
- Letto Architetture di dispositivi connessi su Google Cloud.
- Per altre architetture di riferimento, diagrammi e best practice, esplora il Centro architetture cloud. .
Collaboratori
Autore: Marco Ferrari | Cloud Solutions Architect