Le présent document suggère des bonnes pratiques pour concevoir et mettre en œuvre des processus de provisionnement et de configuration fiables et automatisés pour les appareils exécutés à la périphérie de votre environnement, tels que les suivants :
- Appareils IoT (Internet des objets), tels que des microordinateurs et des microcontrôleurs.
- Systèmes et serveurs sur solution Bare Metal
Lisez ce document si vous concevez des processus de provisionnement et de configuration pour les appareils de périphérie et IoT, ou si vous souhaitez en savoir plus sur les bonnes pratiques pour le provisionnement de ces types d'appareils.
Ce document fait partie d'une série de documents qui fournissent des informations sur les architectures IoT sur Google Cloud et la migration depuis IoT Core. Cette série comprend également les documents suivants :
- Présentation des architectures d'appareils connectés sur Google Cloud
- Architecture d'agent MQTT autonome sur Google Cloud
- Architecture des produits de plate-forme IoT sur Google Cloud
- Architecture d'appareils sur Pub/Sub vers Google Cloud
- Bonnes pratiques pour l'exécution d'un backend IoT sur Google Cloud
- Bonnes pratiques pour le provisionnement et la configuration automatiques des systèmes et serveurs de périphérie et sur solution Bare Metal (ce document)
- Migrer des environnements depuis IoT Core
Le provisionnement et la configuration manuels d'un grand parc d'appareils sont sujets aux erreurs humaines et n'évoluent pas avec votre parc. Par exemple, vous pouvez oublier d'exécuter une tâche de provisionnement ou de configuration critique, ou vous appuyer sur des processus partiellement ou entièrement non documentés. Des processus de provisionnement et de configuration entièrement automatisés et fiables permettent de résoudre ces problèmes. Ils vous aident également à gérer le cycle de vie de chaque appareil, de la fabrication à la mise hors service, en passant par la mise au rebut.
Terminologie
Les termes suivants sont importants pour comprendre comment mettre en œuvre et créer des processus automatisés de provisionnement et de configuration pour vos appareils :
- Appareil de périphérie : appareil que vous déployez à la périphérie de votre environnement, à proximité des données que vous souhaitez traiter.
- Processus de provisionnement : ensemble des tâches que vous devez effectuer pour préparer un appareil à la configuration.
- Processus de configuration : ensemble des tâches que vous devez effectuer pour rendre un appareil prêt à fonctionner dans un environnement spécifique.
- Gestion de la configuration : ensemble des tâches que vous effectuez en continu pour gérer la configuration de votre environnement et de vos appareils.
- Image de base : image minimale du système d'exploitation (OS) ou du micrologiciel produite par votre entreprise ou produite par un fabricant de l'appareil ou de l'OS.
- Image de référence : image immuable du système d'exploitation ou du micrologiciel que vous créez pour vos appareils ou que vous préparez à partir d'une image de base. Les images de référence incluent toutes les données et informations de configuration dont vos appareils ont besoin pour effectuer les tâches qui leur sont attribuées. Vous pouvez préparer diverses images de référence pour accomplir différentes tâches. Les synonymes utilisés pour parler des types d'images de référence sont les stypes, les spins et les archétypes.
- Image de référence modifiée : image d'OS ou de micrologiciel que vous préparez pour vos appareils en appliquant des modifications minimales à une image de référence ou à une image de base. Les appareils exécutant une image de référence modifiée terminent leur provisionnement et leur configuration lors du premier démarrage, en fonction des besoins des cas d'utilisation que ces appareils doivent prendre en charge.
- Appareil source : appareil qui amorce votre environnement sans dépendances externes.
- Démarrage réseau : ensemble des technologies permettant à un appareil d'obtenir un logiciel et toutes les informations de configuration associées à partir du réseau plutôt qu'à partir d'un système de stockage associé à l'appareil.
Bonnes pratiques pour les processus de provisionnement et de configuration
Pour définir des objectifs et éviter les pièges courants, appliquez les bonnes pratiques suivantes pour le provisionnement et la configuration. Chaque bonne pratique est décrite dans sa propre section.
- Automatiser les processus de provisionnement et de configuration
- Éviter les appareils à usage spécial
- Utiliser des appareils source pour amorcer votre environnement
- Minimiser l'état de vos appareils
- Créer automatiquement les images d'OS et de micrologiciel
- Orchestrer de manière fiable les charges de travail s'exécutant sur vos appareils
- Vérifier, authentifier et connecter les appareils
- Surveiller vos appareils
- Compatibilité avec le démarrage et les mises à niveau sans assistance
- Concevoir et mettre en œuvre des processus résilients
- Compatibilité avec l'ensemble du cycle de vie de vos appareils
Automatiser les processus de provisionnement et de configuration
Lors de leur premier démarrage, ou chaque fois que cela est nécessaire, vos appareils doivent pouvoir se provisionner et se configurer en utilisant uniquement l'image logicielle installée.
Pour éviter de mettre en œuvre la logique dont vous avez besoin pendant les processus de provisionnement et de configuration, vous pouvez utiliser des outils qui vous fournissent les primitives nécessaires à l'orchestration et à la mise en œuvre de ces processus. Par exemple, vous pouvez utiliser cloud-init et sa source de données NoCloud avec des scripts ou un outil de gestion de configuration exécuté sur l'hôte local comme Ansible, Puppet ou Chef.
Pour concevoir des processus de provisionnement et de configuration fiables, assurez-vous que toutes les étapes et tâches effectuées lors de ces processus sont valides, si possible de manière automatisée. Par exemple, vous pouvez utiliser un framework de tests de conformité automatisés comme InSpec pour vérifier que vos processus de provisionnement et de configuration fonctionnent comme prévu.
Cette bonne pratique vous permet d'éviter les points de défaillance uniques et la nécessité d'une intervention manuelle pour terminer le provisionnement et la configuration de l'appareil.
Éviter les appareils à usage spécial
Lorsque vous concevez vos appareils de périphérie, minimisez leurs variances en termes d'usage et de spécialisation. Cette recommandation ne signifie pas que tous vos appareils de périphérie doivent être égaux ou partager le même objectif, mais ils doivent être aussi homogènes que possible. Par exemple, vous pouvez définir des archétypes d'appareil en fonction des types de charges de travail auxquels ils sont dédiés. Vous pouvez ensuite déployer et gérer vos appareils en fonction des propriétés de ces archétypes.
Pour être sûr de suivre cette bonne pratique, vérifiez que vous pouvez choisir un appareil au hasard parmi ceux d'un archétype donné, puis procédez comme suit :
- Traitez l'appareil comme vous le feriez avec d'autres appareils du même archétype. Cela permettra de démontrer votre efficacité opérationnelle.
- Remplacez l'appareil par des appareils du même archétype, sans personnalisation supplémentaire. Cela permettra de démontrer que vous avez correctement mis en œuvre ces archétypes.
Cette bonne pratique vous permet de réduire la variance dans votre parc d'appareils, ce qui réduit la fragmentation dans votre environnement et dans les processus de provisionnement et de configuration.
Utiliser des appareils source pour amorcer votre environnement
Lors du provisionnement et de la configuration de vos appareils, vous pouvez rencontrer un problème de dépendance circulaire : vos appareils doivent disposer d'une infrastructure pour se provisionner et se configurer, mais cette infrastructure n'est pas en place, car vous devez toujours la provisionner la configurer.
Vous pouvez résoudre ce problème avec des appareils source. Les appareils source ont une fonction spéciale temporaire. Une fois les tâches pour lesquelles l'objectif spécial a été conçu terminées, l'appareil adapte son comportement et son état en fonction de l'archétype approprié.
Par exemple, si vous utilisez cloud-init pour initialiser automatiquement vos appareils, vous devrez peut-être configurer une source de données NoCloud cloud-init comme suit :
- Fournissez les données de source de données NoCloud à l'appareil source via un système de fichiers.
Attendez que l'appareil source termine son provisionnement et sa configuration à usage spécial, y compris la diffusion des données de source de données NoCloud sur d'autres appareils réseau.
Les processus de provisionnement et de configuration de l'appareil source passent ensuite en attente jusqu'à ce que les conditions pour supprimer l'objectif spécial temporaire de l'appareil source soient remplies. Voici quelques exemples de ces conditions :
- Y a-t-il d'autres appareils dans l'environnement qui diffusent les données sources de données NoCloud sur le réseau ?
- Le cluster comporte-t-il suffisamment de nœuds ?
- La première sauvegarde est-elle terminée ?
- Le site de reprise après sinistre est-il prêt ?
Provisionnez et configurez d'autres appareils qui téléchargent les données de source de données NoCloud sur le réseau à partir de l'appareil source. Certains appareils doivent pouvoir diffuser les données de source de données NoCloud sur le réseau.
Les processus de provisionnement et de configuration de l'appareil source sont rétablis, car les conditions permettant de supprimer l'objectif spécial de l'appareil source sont remplies : d'autres appareils du parc diffusent les données de source de données NoCloud sur le réseau.
Les processus de provisionnement et de configuration de l'appareil source suppriment l'objectif spécial, ce qui rend l'appareil source impossible à distinguer des autres appareils du même archétype.
Cette bonne pratique vous permet de démarrer votre environnement même sans assurer la compatibilité avec l'infrastructure et sans respecter les bonnes pratiques de la section Éviter les appareils à usage spécial.
Minimiser l'état de vos appareils
Lors de la conception de vos appareils de périphérie, évitez autant que possible de stocker des informations avec état. Les appareils de périphérie peuvent disposer de ressources matérielles limitées ou être déployés dans des environnements difficiles. La réduction des informations avec état dont ils ont besoin simplifie les processus de provisionnement, de configuration, de sauvegarde et de récupération, car vous pouvez traiter ces appareils de manière homogène. Si un appareil de périphérie sans état rencontre une panne et ne peut pas être restauré, par exemple, vous pouvez le remplacer par un autre appareil de même archétype avec des interruptions ou une perte de données minimales.
Cette bonne pratique vous permet d'éviter les problèmes imprévus liés à une perte de données ou à une trop grande complexité de vos processus. La plupart des complexités sont liées à la nécessité de gérer un parc d'appareils hétérogènes.
Créer automatiquement les images d'OS et de micrologiciel
Pour éviter les tâches coûteuses de provisionnement et de configuration lors du premier démarrage de vos appareils et pour économiser les ressources de l'appareil, personnalisez les images d'OS et de micrologiciel avant de les rendre disponibles. Vous pouvez par exemple installer des dépendances directement dans l'image plutôt que de les installer lorsque chaque appareil démarre pour la première fois.
Lors de la préparation des images d'OS et de micrologiciel pour vos appareils, le travail commence sur une image de base. Lorsque vous personnalisez l'image de base, vous pouvez effectuer les opérations suivantes :
- Produire des images de référence Les images de référence contiennent toutes les dépendances dans l'image afin que vos appareils n'aient pas à les installer au premier démarrage. La production d'images de référence est une tâche complexe, mais elle permet à vos appareils d'économiser du temps et des ressources lors du provisionnement et de la configuration.
- Produire des images de référence modifiées Contrairement aux images de référence, les appareils exécutant des images de référence modifiées effectuent tous les processus de provisionnement et de configuration lors de leur premier démarrage. La production d'images de référence modifiées peut être moins complexe que la production d'images de référence, mais les appareils qui exécutent ces images consacrent plus de temps et de ressources lors du provisionnement et de la configuration.
Vous pouvez personnaliser les images d'OS et de micrologiciel dans le cadre de vos processus d'intégration et de déploiement continus (CI/CD), et rendre les images personnalisées automatiquement disponibles pour vos appareils après validation. Les processus CI/CD que vous mettez en œuvre à l'aide d'un outil tel que Cloud Build, GitHub Actions, GitLab CI/CD ou Jenkins peuvent effectuer les séquences suivantes :
- Effectuer une validation automatisée des images personnalisées.
- Publiez les images personnalisées dans un dépôt auquel vos appareils peuvent accéder.
Si votre environnement CI/CD et le système d'exploitation ou le micrologiciel pour lesquels vous devez créer des images utilisent des architectures matérielles différentes, vous pouvez utiliser des outils tels que QEMU pour émuler ces architectures. Par exemple, vous pouvez émuler l'architecture matérielle de la famille ARM sur une architecture x86_64.
Pour personnaliser vos images d'OS ou de micrologiciel, vous devez pouvoir les modifier et les vérifier dans un environnement de test avant de les installer sur vos appareils de périphérie. Des outils tels que chroot vous permettent de modifier virtuellement (mais pas physiquement) le répertoire racine avant d'exécuter une commande.
Par exemple, l'exécution de la commande chroot /mnt/test-image apt-get install PACKAGENAME
entraîne le comportement du système comme si /mnt/test-image
était le répertoire racine de l'image d'OS ou de micrologiciel plutôt que /
, et installe PACKAGENAME dans ce répertoire.
Cette bonne pratique vous permet de personnaliser les images d'OS et de micrologiciel avant de les rendre disponibles pour vos appareils.
Orchestrer de manière fiable les charges de travail s'exécutant sur vos appareils
Si vos appareils sont compatibles avec les charges de travail hétérogènes, vous pouvez utiliser les outils suivants pour les orchestrer et gérer leur cycle de vie :
- Un système d'orchestration de charge de travail : Utiliser un système d'orchestration de charge de travail, tel queKubernetes, convient aux charges de travail ayant des exigences complexes en termes d'orchestration ou de gestion du cycle de vie. Ces systèmes sont également adaptés aux charges de travail couvrant plusieurs composants. Dans les deux cas, cela signifie que vous n'avez pas à mettre en œuvre vous-même cette logique d'orchestration et de gestion du cycle de vie de la charge de travail. Si vos appareils sont limités en ressources, vous pouvez installer une distribution Kubernetes légère qui nécessite moins de ressources que la version canonique, comme MicroK8s, K3s ou Google Distributed Cloud installé avec le profil de périphérie.
Un système init : l'utilisation d'un système init, tel que systemd, convient aux charges de travail avec les caractéristiques suivantes :
- Exigences d'orchestration simples
- Ressources insuffisantes pour prendre en charge un système d'orchestration de charge de travail
- Charges de travail ne pouvant pas conteneurisées
Une fois le système en place pour orchestrer vos charges de travail, vous pouvez également l'utiliser pour exécuter des tâches faisant partie de vos processus de provisionnement et de configuration. Si vous devez exécuter un outil de gestion de la configuration dans le cadre de vos processus de provisionnement et de configuration, par exemple, vous pouvez utiliser le système d'orchestration de charge de travail comme vous le feriez avec toute autre charge de travail. Pour obtenir un exemple de cette méthodologie, consultez la section Amorcer automatiquement des nœuds GKE avec DaemonSets. Cet article explique comment utiliser Kubernetes pour exécuter des tâches de provisionnement et de configuration privilégiées et non privilégiées sur les nœuds de cluster.
Cette bonne pratique vous permet d'orchestrer les charges de travail s'exécutant sur vos appareils.
Vérifier, authentifier et connecter les appareils
Lorsque vous devez vérifier si vos appareils doivent se connecter à des systèmes externes, tels que d'autres appareils ou un backend, tenez compte des recommandations figurant dans les sous-sections suivantes.
Pratiques de connexion à appliquer
- Authentifiez les autres parties qui envoient des requêtes d'information avant d'échanger des informations.
- Vérifier que les informations transmises ne transitent pas par des canaux inattendus.
- Appuyez-vous sur des environnements d'exécution fiables pour gérer les secrets tels que les clés de chiffrement, les clés d'authentification et les mots de passe.
- Vérifiez l'intégrité et l'authenticité de toute image d'OS ou de micrologiciel avant de l'utiliser.
- Vérifiez la validité, l'intégrité et l'authenticité de toute configuration fournie par l'utilisateur.
- Limitez la surface d'attaque en n'installant pas de logiciel inutile et en supprimant ceux déjà installés sur vos appareils.
- Limitez l'utilisation des opérations et des comptes privilégiés.
- Vérifiez l'intégrité du boîtier de l'appareil si celui-ci doit résister aux manipulations physiques et aux falsifications.
Pratiques de connexion à éviter
- Ne transmettez pas d'informations sensibles sur des canaux non chiffrés.
- Évitez de laisser un accès privilégié ouvert, par exemple :
- Les ports série et consoles série virtuels ou physiques dotés de privilèges élevés, même si les ports sont accessibles uniquement si quelqu'un manipule physiquement l'appareil.
- Points de terminaison qui répondent aux requêtes provenant du réseau et qui peuvent exécuter des opérations privilégiées.
- Ne vous reposez pas sur des identifiants codés en dur dans vos images, votre configuration ou votre code source de système d'exploitation ou de micrologiciel.
- Ne divulguez aucune information susceptible d'aider une personne mal intentionnée à rassembler des informations pour obtenir des privilèges élevés. Par exemple, vous devez chiffrer les données sur vos appareils et désactiver les systèmes de traçage et de journalisation inutiles sur les appareils de production.
- Ne laissez pas les utilisateurs et les charges de travail exécuter du code arbitraire.
Cette bonne pratique vous aide à :
- Concevoir des canaux de communication sécurisés pour vos appareils.
- Éviter les portes dérobées qui contournent le périmètre de sécurité de vos appareils.
- Garantir que vos appareils n'exposent pas d'interfaces non autorisées qu'un pirate informatique pourrait exploiter.
Surveiller vos appareils
Collecter des informations sur l'état de vos appareils sans intervention manuelle est essentiel pour la fiabilité de votre environnement. Assurez-vous que vos appareils fournissent automatiquement toutes les données dont vous avez besoin. Il existe deux raisons principales de collecter et de surveiller des données. La première raison de collecter et de surveiller les données est de s'assurer que vos appareils fonctionnent comme prévu. La deuxième raison de collecter et de surveiller les données est d'identifier les problèmes de manière proactive et d'effectuer une maintenance préventive. Par exemple, vous pouvez collecter des métriques et des événements de surveillance avec Cloud Monitoring.
Pour vous aider à examiner et à résoudre les problèmes, nous vous recommandons de concevoir et d'implémenter des processus permettant de collecter des données de diagnostic haute résolution, telles que des informations détaillées de surveillance, de traçage et de débogage, en plus des processus qui surveillent vos appareils pendant leur fonctionnement normal. La collecte de données de diagnostic haute résolution et leur transfert via un réseau peuvent s'avérer coûteux en termes de ressources d'appareil, telles qu'en calcul, en stockage de données et en puissance électrique. Pour cette raison, nous vous recommandons d'activer les processus permettant de collecter des données de diagnostic haute résolution uniquement lorsque cela est nécessaire et seulement pour les appareils nécessitant un examen plus approfondi. Par exemple, si l'un de vos appareils ne fonctionne pas comme prévu et que les données de surveillance standards signalées par l'appareil ne sont pas suffisantes pour diagnostiquer le problème, vous pouvez activer la collecte de données haute résolution pour cet appareil afin d'obtenir des informations supplémentaires pour vous aider à identifier les causes du problème.
Cette bonne pratique garantit que vous ne laissez pas les appareils dans un état inconnu, et que vous disposez de suffisamment de données pour déterminer si et comment vos appareils fonctionnent.
Compatibilité avec le démarrage et les mises à niveau sans assistance
Lorsque vous concevez vos processus de provisionnement et de configuration, assurez-vous que vos appareils sont capables de démarrer sans assistance et que vous disposez de l'infrastructure nécessaire. En mettant en œuvre un mécanisme de démarrage sans assistance compatible avec le premier démarrage et la diffusion de mises à niveau "Over-The-Air", vous améliorez la gestion de votre infrastructure. L'utilisation du démarrage sans assistance vous évite d'avoir à assurer le suivi de chaque appareil au démarrage ou à la mise à niveau. Assurer manuellement le suivi d'un grand nombre d'appareils est sujet aux erreurs, car les opérateurs risquent de rater quelque chose ou d'effectuer des actions incorrectes, ou ils peuvent ne pas avoir suffisamment de temps pour effectuer les actions requises pour chaque appareil du parc.
De plus, vous n'avez pas à préparer chaque appareil à l'avance pour démarrer l'image d'OS ou de micrologiciel appropriée. Vous pouvez, par exemple, publier une nouvelle version d'image d'OS ou de micrologiciel et la rendre disponible parmi les options que vos appareils peuvent choisir lorsqu'ils reçoivent les instructions de démarrage en provenance du réseau.
Cette bonne pratique vous permet de vous assurer que vos appareils peuvent effectuer des démarrages et des mises à niveau automatisés et sans assistance.
Concevoir et mettre en œuvre des processus résilients
Même avec des processus de provisionnement et de configuration entièrement automatisés, des erreurs peuvent se produire et empêcher ces processus de se terminer correctement, laissant ainsi vos appareils dans un état incohérent. Assurez-vous que vos appareils sont en mesure de résoudre ces pannes en mettant en œuvre des mécanismes de nouvelle tentative et de repli. Lorsqu'un appareil ne parvient pas à terminer une tâche faisant partie des processus de provisionnement et de configuration, par exemple, il doit automatiquement tenter de récupérer de cette défaillance. Une fois que l'appareil récupère de la défaillance ou revient à un état fonctionnel, il peut reprendre l'exécution des processus à partir du moment où ils ont échoué.
Cette bonne pratique vous aide à concevoir et à mettre en œuvre des processus de provisionnement et de configuration résilients.
Compatibilité avec l'ensemble du cycle de vie de vos appareils
Lorsque vous concevez vos processus de provisionnement et de configuration, assurez-vous qu'ils peuvent gérer l'intégralité du cycle de vie des appareils. La gestion efficace du cycle de vie des appareils implique la planification de l'arrêt et de la suppression, même si vos appareils doivent être exécutés pendant une durée relativement longue.
Si vous ne gérez pas le cycle de vie de vos appareils, cela peut entraîner des problèmes, par exemple :
- Des coûts élevés et durables : introduire l'assistance à la gestion du cycle de vie une fois les processus de provisionnement et de configuration en place peut augmenter les coûts. En planifiant cette assistance dès le début de la conception, vous pouvez réduire ces coûts. Si vos processus de provisionnement et de configuration ne prennent pas en charge le cycle de vie complet des appareils, par exemple, vous devrez peut-être intervenir manuellement sur chacun d'eux pour gérer correctement chaque phase de leur cycle de vie. Les interventions manuelles peuvent être coûteuses et peinent souvent à évoluer.
- Flexibilité accrue : l'absence d'assistance à la gestion du cycle de vie peut entraîner l'impossibilité de mettre à jour ou de gérer vos appareils. Si vous ne disposez pas d'un mécanisme pour éteindre vos appareils de manière sécurisée et efficace, par exemple, il peut être difficile de gérer leur fin de vie et leur destruction.
Étape suivante
- Découvrez comment créer des images de conteneurs multi-architectures pour les appareils IoT.
- Découvrez comment amorcer automatiquement les nœuds GKE avec les objets DaemonSet.
- Découvrez les architectures d'appareils connectés sur Google Cloud.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud. .