Práticas recomendadas para o provisionamento e a configuração automáticos de sistemas e servidores de borda e bare metal

Last reviewed 2023-02-23 UTC

Este documento sugere as práticas recomendadas para projetar e implementar processos de provisionamento e configuração confiáveis e automatizados para dispositivos executados nas extremidades do ambiente, como:

Leia este documento se você projetar processos de provisionamento e configuração para dispositivos de borda e IoT ou se quiser saber mais sobre as práticas recomendadas para provisionar esses tipos de dispositivos.

Este documento faz parte de uma série de documentos que fornecem informações sobre arquiteturas de IoT no Google Cloud e como migrar do IoT Core. Os outros documentos desta série incluem:

O provisionamento e a configuração manuais de uma grande frota de dispositivos estão sujeitos a erros humanos e não são escalonados à medida que sua frota cresce. Por exemplo, você pode esquecer de executar uma tarefa crítica de provisionamento ou configuração ou pode estar contando com processos parcialmente ou não documentados. Os processos de provisionamento e configuração totalmente automatizados e confiáveis ajudam a resolver esses problemas. Elas também ajudam a gerenciar o ciclo de vida de cada dispositivo, desde a fabricação até a desativação e o descarte.

Terminologia

Os termos a seguir são importantes para entender como implementar e criar processos automatizados de provisionamento e configuração nos seus dispositivos:

  • Dispositivo perimetral: um dispositivo que você implanta nas bordas do ambiente que esteja próximo aos dados que quer processar.
  • Processo de provisionamento: o conjunto de tarefas que você precisa concluir para preparar um dispositivo para configuração.
  • Processo de configuração: o conjunto de tarefas que você precisa concluir para preparar um dispositivo para operar em um ambiente específico.
  • Gerenciamento de configuração: o conjunto de tarefas realizadas continuamente para gerenciar a configuração do ambiente e dos dispositivos.
  • Imagem de base: uma imagem de firmware ou sistema operacional mínimo produzida pela sua empresa ou produzida por um dispositivo ou fabricante do SO.
  • Imagem dourada: uma imagem de SO ou firmware imutável que você cria para seus dispositivos ou se prepara a partir de uma imagem base. As imagens douradas incluem todos os dados e informações de configuração que os dispositivos precisam para realizar as tarefas atribuídas a eles. Você pode preparar várias imagens douradas para realizar tarefas diferentes. Os sinônimos para tipos de imagem dourados incluem sabors, spins e arquétipos.
  • Imagem Prata: uma imagem de SO ou firmware que você prepara para seus dispositivos aplicando mudanças mínimas a uma imagem dourada ou básica. Os dispositivos com uma imagem silver concluim o provisionamento e a configuração na primeira inicialização, de acordo com as necessidades dos casos de uso compatíveis com esses dispositivos.
  • Dispositivo seed: um dispositivo que inicializa seu ambiente sem dependências externas.
  • Inicialização da rede: o conjunto de tecnologias que permite que um dispositivo receba software e qualquer informação de configuração relacionada da rede, em vez de um sistema de armazenamento conectado ao dispositivo.

Práticas recomendadas para processos de provisionamento e configuração

Para definir metas e evitar armadilhas comuns, aplique as práticas recomendadas de provisionamento e configuração a seguir. Cada prática recomendada é discutida em sua própria seção.

Automatizar os processos de provisionamento e configuração

Durante a primeira inicialização ou a qualquer momento, os dispositivos precisam provisionar e configurar-se usando apenas a imagem de software instalada nele.

Para evitar a implementação da lógica necessária durante os processos de provisionamento e configuração, use as ferramentas que oferecem os primitivos necessários para orquestrar e implementar esses processos. Por exemplo, é possível usar o cloud-init e sua fonte de dados do NoCloud com scripts ou uma ferramenta de gestão de configuração. como Ansible, Puppet ou Chef, em execução no host local.

Para projetar processos de configuração e provisionamento confiáveis, verifique se todas as etapas e tarefas realizadas durante esses processos são válidas, possivelmente de maneira automatizada. Por exemplo, é possível usar uma biblioteca de testes de conformidade automatizada, como a InSpec, para verificar se os processos de provisionamento e configuração estão funcionando conforme o esperado.

Essa prática recomendada ajuda a evitar pontos únicos de falha e a necessidade de intervenção manual quando você precisa concluir o provisionamento e a configuração do dispositivo.

Evite dispositivos para fins especiais

Ao projetar seus dispositivos de borda, minimize a variação em termos de finalidade e especialidade. Essa recomendação não significa que todos os dispositivos perimetrais precisam ser iguais ou compartilhar a mesma finalidade, mas precisam ser o mais homogêneos possível. Por exemplo, defina arquétipos de dispositivo pelos tipos de carga de trabalho que eles precisam aceitar. Em seguida, implante e gerencie os dispositivos de acordo com as propriedades desses arquétipos.

Para garantir que você esteja seguindo essa prática recomendada, verifique se é possível escolher um dispositivo aleatoriamente entre os de um determinado arquétipo e, em seguida, faça o seguinte:

  • Trate o dispositivo como você faria com outros dispositivos do mesmo arquétipo. Isso mostra que você tem eficiência operacional.
  • Substitua os dispositivos por dispositivos do mesmo arquétipo sem personalizações adicionais. Isso mostra que você implementou corretamente esses arquétipos.

Essa prática recomendada garante que você reduza a variação na frota de dispositivos, levando a menos fragmentação no ambiente e nos processos de provisionamento e configuração.

Usar dispositivos semente para inicializar o ambiente

Ao provisionar e configurar seus dispositivos, você pode encontrar um problema de dependência circular: os dispositivos precisam de infraestrutura de suporte para provisionar e configurar a si mesmos, mas essa infraestrutura não está em vigor porque ainda é necessário provisionar. e configurá-la.

É possível resolver esse problema com dispositivos semente. Os dispositivos semente têm uma finalidade especial temporária. Depois de concluir as tarefas para que o objetivo especial foi projetado, o dispositivo segue o comportamento e o status para o arquétipo relevante.

Por exemplo, se você estiver usando cloud-init para inicializar automaticamente seus dispositivos, talvez seja necessário configurar uma origem de dados NoCloud do cloud-init das seguintes maneiras:

  1. Forneça os dados da fonte de dados NoCloud ao dispositivo original por meio de um sistema de arquivos.
  2. Aguarde até que o dispositivo de origem conclua o próprio provisionamento e configuração com a finalidade especial dele, que inclui a exibição dos dados de origem de dados do NoCloud a outros dispositivos na rede.

    Os processos de provisionamento e configuração no dispositivo semente aguardam até que as condições para descartar a finalidade especial temporária do dispositivo semente sejam atendidas. Alguns exemplos dessas condições:

    • Existem outros dispositivos no ambiente que exibem os dados da fonte de dados NoCloud pela rede?
    • Há nós suficientes no cluster?
    • O primeiro backup foi concluído?
    • O local de recuperação de desastres está pronto?
  3. Provisione e configure outros dispositivos que fazem o download dos dados de origem de dados NoCloud pela rede do dispositivo semente. Alguns dispositivos precisam atender aos dados da fonte de dados NoCloud pela rede.

  4. Os processos de provisionamento e configuração no dispositivo semente são retomados porque as condições para descartar o propósito especial do dispositivo seed são atendidas: há outros dispositivos na frota que exibem os dados da fonte de dados NoCloud pela rede. de dados.

  5. Os processos de provisionamento e configuração no dispositivo semente descartam o propósito especial, tornando o dispositivo semente indistinguível de outros dispositivos do mesmo arquétipo.

Essa prática recomendada garante que você consiga inicializar seu ambiente mesmo sem oferecer compatibilidade com a infraestrutura e sem violar a prática recomendada de Evitar dispositivos para fins especiais.

Minimizar o estado dos seus dispositivos

Ao projetar seus dispositivos de borda, mantenha a necessidade de armazenar informações com estado no mínimo. Os dispositivos perimetrais podem ter recursos de hardware limitados ou ser implantados em ambientes rigorosos. Minimizar as informações com estado de que precisam para funcionar simplifica os processos de provisionamento, configuração, backup e recuperação, porque é possível tratar esses dispositivos de maneira homogênea. Se um dispositivo de borda sem estado começar a funcionar incorretamente e não for recuperável, por exemplo, será possível trocá-lo por outro dispositivo do mesmo arquétipo com o mínimo de interrupções ou perda de dados.

Essa prática recomendada ajuda a evitar problemas imprevistos devido à perda de dados ou aos processos muito complexos. A maior parte da complexidade vem da necessidade de oferecer suporte a uma frota de dispositivos heterogêneos.

Crie automaticamente imagens de SO e firmware

Para evitar tarefas caras de provisionamento e configuração quando os dispositivos forem inicializados primeiros e para economizar recursos, personalize as imagens do SO e do firmware antes de disponibilizá-las. Por exemplo, é possível instalar dependências diretamente na imagem, em vez de instalá-las quando cada dispositivo for inicializado pela primeira vez.

Ao preparar as imagens de SO e firmware dos seus dispositivos, você começa com uma imagem de base. Ao personalizar a imagem de base, você pode fazer o seguinte:

  • Produza imagens douradas As imagens douradas contêm todas as dependências da imagem. Assim, os dispositivos não precisam instalá-las na primeira inicialização. A produção de imagens douradas pode ser uma tarefa complexa, mas permite que seus dispositivos economizem tempo e recursos durante o provisionamento e a configuração.
  • Produzir imagens de prata Ao contrário das imagens douradas, os dispositivos que executam imagens silver concluem todos os processos de provisionamento e configuração durante a primeira inicialização. A produção de imagens de prata pode ser menos complexa do que produzir imagens de ouro. No entanto, os dispositivos que executam uma imagem de prata passam mais tempo e recursos durante o provisionamento e a configuração.

É possível personalizar as imagens de SO e firmware como parte dos processos de integração e implantação contínuas (CI/CD) e disponibilizar automaticamente as imagens personalizadas para seus dispositivos após a validação. Os processos de CI/CD que você implementa com uma ferramenta como o Cloud Build, GitHub Actions, GitLab CI/CD ou Jenkins (em inglês), podem executar a seguinte sequência de tarefas:

  1. Execute uma validação automatizada nas imagens personalizadas.
  2. Publique as imagens personalizadas em um repositório em que seus dispositivos possam consegui-las.

Se o ambiente de CI/CD e o SO ou firmware para os quais você precisa criar imagens usam diferentes arquiteturas de hardware, use ferramentas como QEMU para emular essas arquiteturas. Por exemplo, você pode emular a arquitetura do hardware da família ARM em uma arquitetura x86_64.

Para personalizar as imagens do SO ou do firmware, é necessário modificá-las e verificar essas modificações em um ambiente de teste antes de instalá-las nos dispositivos de borda. Ferramentas como chroot permitem alterar virtualmente, mas não alterar fisicamente o diretório raiz antes de executar um comando.

Por exemplo, executar o comando chroot /mnt/test-image apt-get install PACKAGENAME faz com que o sistema se comporte como se /mnt/test-image fosse o diretório raiz do SO ou da imagem do firmware em vez de / e instale o PACKAGENAME nesse diretório.

Essa prática recomendada ajuda a personalizar as imagens do SO e do firmware antes de disponibilizar as imagens nos seus dispositivos.

Faça a orquestração de cargas de trabalho em execução nos seus dispositivos de maneira confiável

Se os dispositivos forem compatíveis com cargas de trabalho heterogêneas, use as seguintes ferramentas para orquestrar essas cargas de trabalho e gerenciar o ciclo de vida delas:

  • Um sistema de orquestração de carga de trabalho: o uso de um sistema de orquestração de carga de trabalho, como o Kubernetes, é adequado para cargas de trabalho que tenham orquestração complexa ou ciclo de vida }de gerenciamento. Esses sistemas também são adequados para cargas de trabalho que abrangem diversos componentes. Nos dois casos, isso significa que você não precisa implementar essa orquestração e a lógica de gerenciamento do ciclo de vida da carga de trabalho por conta própria. Caso seus dispositivos tenham recursos limitados, instale uma distribuição leve do Kubernetes que precisa de menos recursos do que canônico, como MicroK8s, K3s, ou Google Distributed Cloud instalado com o perfil de borda.
  • Um sistema init: usar um sistema init, como systemd é adequado para cargas de trabalho com as seguintes características:

    • Requisitos de orquestração simples
    • Sem recursos para oferecer suporte a um sistema de orquestração de carga de trabalho
    • cargas de trabalho que não podem ser colocadas em contêineres;

Depois de implantar o sistema para orquestrar as cargas de trabalho, você também poderá usá-lo para executar as tarefas que fazem parte dos processos de provisionamento e configuração. Por exemplo, se você precisar executar uma ferramenta de gerenciamento de configuração como parte dos processos de provisionamento e configuração, use o sistema de orquestração de carga de trabalho, como faria com qualquer outra carga de trabalho. Para um exemplo dessa metodologia, consulte Como inicializar os nós do GKE automaticamente com DaemonSets. O artigo descreve como usar o Kubernetes para executar tarefas de configuração e provisionamento privilegiadas e não privilegiadas nos nós do cluster.

Essa prática recomendada ajuda a orquestrar as cargas de trabalho em execução nos seus dispositivos.

Verificar, autenticar e conectar dispositivos

Quando você precisar verificar se seus dispositivos precisam se conectar a sistemas externos, como outros dispositivos ou um back-end, considere as recomendações nas subseções a seguir.

Práticas de conexão para aplicar

  • Autentique outras partes que estão fazendo solicitações de informações antes de trocar informações.
  • Verifique se as informações transmitidas não estão viajando por canais inesperados.
  • Confie em ambientes de execução confiáveis para processar secrets, como chaves de criptografia, chaves de autenticação e senhas.
  • Verifique a integridade e a autenticidade de qualquer imagem do SO ou do firmware antes de usá-la.
  • Verifique a validade, a integridade e a autenticidade de qualquer configuração fornecida pelo usuário.
  • Para limitar a superfície de ataque, não instale softwares desnecessários e remova os que já existem nos seus dispositivos.
  • Limite o uso de operações e contas privilegiadas.
  • Verifique a integridade do estojo do dispositivo se ele precisar resistir à manipulação e adulteração física.

Práticas de conexão a serem evitadas

  • Não transmita informações confidenciais em canais não criptografados.
  • Evite deixar o acesso privilegiado aberto, como nos exemplos a seguir:
    • Portas seriais e consoles seriais virtuais ou físicos com privilégios elevados, mesmo que as portas sejam acessíveis somente se alguém adulterar fisicamente o dispositivo.
    • Endpoints que respondem a solicitações provenientes da rede e que podem executar operações privilegiadas.
  • Não dependa de credenciais codificadas no seu SO, nas imagens de firmware ou na configuração ou no código-fonte.
  • Não revele informações que possam ajudar um invasor a coletar informações para conseguir privilégios elevados. Por exemplo, é necessário criptografar os dados nos dispositivos e desativar os sistemas desnecessários de rastreamento e geração de registros nos dispositivos de produção.
  • Não permita que usuários e cargas de trabalho executem código arbitrário.

Essa prática recomendada ajuda você a:

  • Crie canais de comunicação seguros para seus dispositivos.
  • Evite possíveis backdoors que burlem o perímetro de segurança dos dispositivos.
  • Verifique se seus dispositivos não expõem interfaces não autorizadas que um invasor pode explorar.

Monitorar seus dispositivos

Coletar informações sobre o estado dos dispositivos sem intervenção manual é essencial para a confiabilidade do ambiente. Certifique-se de que seus dispositivos informem automaticamente todos os dados necessários. Há dois motivos principais para coletar e monitorar dados. O primeiro motivo para coletar e monitorar dados é garantir que os dispositivos funcionem conforme o esperado. O segundo motivo para coletar e monitorar dados é detectar problemas proativamente e realizar manutenção preventiva. Por exemplo, é possível coletar métricas e eventos de monitoramento com o Cloud Monitoring.

Para ajudar a investigar e resolver problemas, recomendamos projetar e implementar processos para coletar dados de diagnóstico de alta resolução, como informações detalhadas de monitoramento, rastreamento e depuração, além dos processos que monitoram seus dispositivos durante a operação normal. A coleta e transferência de dados de diagnóstico de alta resolução por meio de uma rede pode ser cara em termos de recursos do dispositivo, como computação, armazenamento de dados e energia elétrica. Por esse motivo, recomendamos que você permita que os processos coletem dados de diagnóstico de alta resolução apenas quando necessário e apenas para os dispositivos que precisam de uma investigação mais detalhada. Por exemplo, se um dos seus dispositivos não estiver funcionando conforme o esperado e os dados de monitoramento regulares que ele informa não forem suficientes para diagnosticar o problema, ative a coleta de dados de alta resolução para o dispositivo para que ele dê mais informações que podem ajudar você a investigar as causas do problema.

Essa prática recomendada garante que você não deixe os dispositivos em um estado desconhecido e que tenha dados suficientes para determinar se e como seus dispositivos estão se saindo.

Suporte para inicialização e upgrades automáticos

Ao projetar seus processos de provisionamento e configuração, verifique se seus dispositivos são capazes de inicializar sozinhos e se você tem a infraestrutura necessária no local. Ao implementar um mecanismo de inicialização autônomo compatível com a primeira inicialização e a entrega de upgrades OTA, você aumenta a manutenção da infraestrutura. O uso da inicialização automática evita que você participe manualmente de cada dispositivo durante a inicialização ou o upgrade. Atender manualmente a uma grande frota de dispositivos é propenso a erros, porque os operadores podem perder ou executar ações incorretamente ou não têm tempo suficiente para executar as ações necessárias para cada dispositivo na frota.

Além disso, não é preciso preparar cada dispositivo com antecedência para inicializar a imagem correta de SO ou firmware. É possível lançar uma nova versão de uma imagem do SO ou firmware, por exemplo, e disponibilizar essa versão como uma das opções que seus dispositivos podem escolher ao receber instruções de inicialização da rede.

Essa prática recomendada ajuda a garantir que seus dispositivos possam executar inicializações e upgrades automáticos e autônomos.

Projetar e implementar processos resilientes

Mesmo com processos de provisionamento e configuração totalmente automatizados, podem ocorrer erros que impedem que esses processos sejam concluídos corretamente, deixando os dispositivos em um estado inconsistente. Ajude a garantir que seus dispositivos possam se recuperar dessas falhas implementando mecanismos de repetição e substituto. Quando um dispositivo não consegue concluir uma tarefa que faz parte dos processos de provisionamento e configuração, por exemplo, ele tenta se recuperar automaticamente dessa falha. Depois que o dispositivo se recuperar da falha ou retornar a um estado de trabalho, ele poderá retomar os processos em execução do ponto em que os processos falharam.

Essa prática recomendada ajuda a projetar e implementar processos de provisionamento e configuração resilientes.

Ofereça suporte a todo o ciclo de vida dos seus dispositivos

Ao projetar os processos de provisionamento e configuração, verifique se eles podem gerenciar todo o ciclo de vida do dispositivo. O gerenciamento eficaz dos ciclos de vida dos dispositivos inclui planejamento para encerramento e descarte, mesmo que eles sejam executados por um tempo relativamente longo.

Se você não gerencia o ciclo de vida dos seus dispositivos, isso pode gerar problemas como os seguintes:

  • Custos altos altos:a introdução do suporte ao gerenciamento do ciclo de vida pode aumentar seus custos depois que os processos de provisionamento e configuração estiverem em vigor. Ao planejar esse suporte no início do design, é possível reduzir esses custos. Por exemplo, se os processos de provisionamento e configuração não forem compatíveis com todo o ciclo de vida dos dispositivos, talvez seja necessário intervir manualmente em cada dispositivo para processar corretamente cada fase do ciclo de vida. A intervenção manual pode ser cara e, muitas vezes, não é escalonada.
  • Maior rigidez: não oferecer suporte ao gerenciamento do ciclo de vida pode impedir que os dispositivos sejam atualizados ou gerenciados. Por exemplo, se você não tiver um mecanismo para desligar seus dispositivos de maneira segura e eficiente, pode ser difícil gerenciar o fim da vida útil e o descarte final.

A seguir