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

Last reviewed 2024-07-31 UTC

Este documento sugere práticas recomendadas para conceber e implementar processos de aprovisionamento e configuração fiáveis e automáticos para dispositivos em execução nos limites do seu ambiente, como os seguintes:

Leia este documento se criar processos de aprovisionamento e configuração para dispositivos periféricos e sistemas e servidores bare metal, ou se quiser saber mais acerca das práticas recomendadas para o aprovisionamento e a configuração destes tipos de dispositivos.

Este documento não lista todas as práticas recomendadas possíveis para o aprovisionamento e a configuração de sistemas e servidores de edge e bare metal, e não lhe dá garantias de sucesso. Em vez disso, ajuda a estimular debates sobre potenciais alterações e melhorias aos seus processos de aprovisionamento e configuração.

Este documento faz parte de uma série de documentos que fornecem informações sobre as arquiteturas de IoT no Google Cloud. Os outros documentos desta série incluem o seguinte:

O aprovisionamento e a configuração manuais de uma grande frota de dispositivos são propensos a erros humanos e não são escaláveis à medida que a sua frota cresce. Por exemplo, pode esquecer-se de executar uma tarefa de aprovisionamento ou configuração crítica, ou pode estar a confiar em processos parcial ou totalmente não documentados. Os processos de aprovisionamento e configuração totalmente automatizados e fiáveis ajudam a resolver estes problemas. Também ajudam a gerir o ciclo de vida de cada dispositivo, desde o fabrico à desativação e eliminação.

Terminologia

Os seguintes termos são importantes para compreender como implementar e criar processos de aprovisionamento e configuração automáticos para os seus dispositivos:

  • Dispositivo periférico: um dispositivo que implementa nos limites do seu ambiente e que está próximo dos dados que quer processar.
  • Processo de aprovisionamento: o conjunto de tarefas que tem de concluir para preparar um dispositivo para a configuração.
  • Processo de configuração: o conjunto de tarefas que tem de concluir para preparar um dispositivo para funcionar num ambiente específico.
  • Gestão da configuração: o conjunto de tarefas que realiza continuamente para gerir a configuração do seu ambiente e dispositivos.
  • Imagem de base: uma imagem de firmware ou de sistema operativo (SO) funcional mínima produzida pela sua empresa ou por um fabricante de dispositivos ou SO.
  • Imagem dourada: uma imagem imutável do SO ou do firmware que cria para os seus dispositivos ou prepara a partir de uma imagem base. As imagens douradas incluem todos os dados e informações de configuração de que os seus dispositivos precisam para realizar as tarefas atribuídas. Pode preparar várias imagens de referência para realizar diferentes tarefas. Os sinónimos para tipos de imagens principais incluem variantes, variações e arquétipos.
  • Imagem prateada: uma imagem do SO ou do firmware que prepara para os seus dispositivos aplicando alterações mínimas a uma imagem dourada ou a uma imagem base. Os dispositivos com uma imagem prateada concluem o aprovisionamento e a configuração no primeiro arranque, de acordo com as necessidades dos exemplos de utilização que esses dispositivos têm de suportar.
  • Dispositivo de base: um dispositivo que inicializa o seu ambiente sem dependências externas.
  • Arranque de rede: o conjunto de tecnologias que permite a um dispositivo obter software e quaisquer informações de configuração relacionadas a partir da rede, em vez de um sistema de armazenamento associado ao dispositivo.

Para ajudar a definir objetivos e evitar problemas comuns, aplique as práticas recomendadas de aprovisionamento e configuração descritas nas secções seguintes.

Automatize os processos de aprovisionamento e configuração

Durante o primeiro arranque ou sempre que for necessário, os seus dispositivos devem conseguir preparar e configurar-se automaticamente usando apenas a imagem do software instalada no respetivo interior.

Para evitar a implementação da lógica necessária durante os processos de aprovisionamento e configuração, pode usar ferramentas que lhe dão os elementos básicos necessários para orquestrar e implementar esses processos. Por exemplo, pode usar o cloud-init e a respetiva origem de dados NoCloud, juntamente com scripts ou uma ferramenta de gestão de configuração, como o Ansible, Puppet, ou Chef, executados no anfitrião local.

Para criar processos de aprovisionamento e configuração fiáveis, certifique-se de que todos os passos e tarefas realizados durante esses processos são válidos, possivelmente de forma automática. Por exemplo, pode usar uma framework de testes de conformidade automatizados, como o InSpec, para verificar se os seus processos de aprovisionamento e configuração estão a funcionar conforme esperado.

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

Evite dispositivos de fins especiais

Ao criar os seus dispositivos periféricos, minimize a respetiva variação em termos de finalidade e especialidade. Esta recomendação não significa que todos os seus dispositivos periféricos tenham de ser iguais entre si ou partilhar o mesmo objetivo, mas devem ser o mais homogéneos possível. Por exemplo, pode definir arquétipos de dispositivos pelos tipos de carga de trabalho que têm de suportar. Em seguida, pode implementar e gerir os seus dispositivos de acordo com as propriedades desses arquétipos.

Para garantir que está a seguir esta prática recomendada, verifique se consegue escolher um dispositivo aleatoriamente entre os de um determinado arquétipo e, em seguida, faça o seguinte:

  • Trate o dispositivo como trataria outros dispositivos do mesmo arquétipo. Ao fazê-lo, mostra que tem eficiência operacional.
  • Substituir o dispositivo por dispositivos do mesmo arquétipo sem personalizações adicionais. Ao fazê-lo, mostra que implementou corretamente esses arquétipos.

Esta prática recomendada garante que reduz a variação na sua frota de dispositivos, o que leva a uma menor fragmentação no seu ambiente e nos processos de aprovisionamento e configuração.

Use dispositivos de semente para iniciar o seu ambiente

Ao aprovisionar e configurar os seus dispositivos, pode deparar-se com um problema de dependência circular: os seus dispositivos precisam de uma infraestrutura de apoio para se aprovisionarem e configurarem, mas essa infraestrutura não está implementada porque ainda tem de a aprovisionar e configurar.

Pode resolver este problema com dispositivos de teste. Os dispositivos de teste têm uma finalidade especial temporária. Após a conclusão das tarefas para as quais a finalidade especial foi concebida, o dispositivo adapta o respetivo comportamento e estado ao arquétipo relevante.

Por exemplo, se estiver a usar o cloud-init para inicializar automaticamente os seus dispositivos, pode ter de configurar uma origem de dados NoCloud do cloud-init das seguintes formas:

  1. Forneça os dados da origem de dados NoCloud ao dispositivo de teste através de um sistema de ficheiros.
  2. Aguarde que o dispositivo de origem conclua o respetivo aprovisionamento e configuração com a sua finalidade especial, que inclui o fornecimento dos dados da origem de dados NoCloud a outros dispositivos através da rede.

    Os processos de aprovisionamento e configuração no dispositivo de origem aguardam até que as condições para eliminar a finalidade especial temporária do dispositivo de origem sejam cumpridas. Seguem-se alguns exemplos destas condições:

    • Existem outros dispositivos no ambiente que fornecem os dados da origem de dados NoCloud através da rede?
    • Existem nós suficientes no cluster?
    • A primeira cópia de segurança foi concluída?
    • O site de recuperação de desastres está pronto?
  3. Aprovisione e configure outros dispositivos que transfiram os dados da origem de dados NoCloud através da rede a partir do dispositivo de origem. Alguns dispositivos têm de conseguir fornecer os dados da origem de dados NoCloud através da rede.

  4. Os processos de aprovisionamento e configuração no dispositivo inicial retomam-se porque as condições para anular a finalidade especial do dispositivo inicial foram cumpridas: existem outros dispositivos na frota que servem os dados da origem de dados NoCloud através da rede.

  5. Os processos de aprovisionamento e configuração no dispositivo de origem eliminam o objetivo especial, tornando o dispositivo de origem indistinguível de outros dispositivos do mesmo arquétipo.

Esta prática recomendada garante que pode iniciar o seu ambiente mesmo sem infraestrutura de apoio e sem contrariar a prática recomendada Evite dispositivos para fins especiais.

Minimize a dependência de estado dos seus dispositivos

Ao criar os seus dispositivos periféricos, mantenha a necessidade de armazenar informações com estado ao mínimo. Os dispositivos periféricos podem ter recursos de hardware limitados ou ser implementados em ambientes adversos. A minimização das informações com estado de que precisam para funcionar simplifica os processos de aprovisionamento, configuração, cópia de segurança e recuperação, porque pode tratar esses dispositivos de forma homogénea. Se um dispositivo periférico sem estado começar a funcionar mal e não for recuperável, por exemplo, pode trocá-lo por outro dispositivo do mesmo arquétipo com interrupções mínimas ou perda de dados.

Esta prática recomendada ajuda a evitar problemas inesperados devido à perda de dados ou à complexidade excessiva dos seus processos. A maior parte da complexidade resulta da necessidade de suportar uma frota de dispositivos heterogéneos.

Crie automaticamente imagens de SO e firmware

Para evitar tarefas de aprovisionamento e configuração dispendiosas quando os dispositivos são iniciados pela primeira vez, e para poupar recursos do dispositivo, personalize as imagens do SO e do firmware antes de as disponibilizar. Por exemplo, pode instalar dependências diretamente na imagem em vez de as instalar quando cada dispositivo arranca pela primeira vez.

Quando prepara as imagens do SO e firmware para os seus dispositivos, começa com uma imagem base. Quando personaliza a imagem base, pode fazer o seguinte:

  • Produza imagens de ouro. As imagens douradas contêm todas as dependências na imagem para que os seus dispositivos não tenham de instalar essas dependências no primeiro arranque. A produção de imagens de referência pode ser uma tarefa complexa, mas permite que os seus dispositivos poupem tempo e recursos durante o aprovisionamento e a configuração.
  • Produzir imagens prateadas. Ao contrário das imagens douradas, os dispositivos com imagens prateadas concluem todos os processos de aprovisionamento e configuração durante o primeiro arranque. A produção de imagens prateadas pode ser menos complexa do que a produção de imagens douradas, mas os dispositivos que executam uma imagem prateada gastam mais tempo e recursos durante o aprovisionamento e a configuração.

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

  1. Realizar uma validação automática em relação às imagens personalizadas.
  2. Publique as imagens personalizadas num repositório onde os seus dispositivos as possam obter.

Se o seu ambiente de CI/CD e o SO ou o firmware para o qual precisa de criar imagens usarem arquiteturas de hardware diferentes, pode usar ferramentas como o QEMU para emular essas arquiteturas. Por exemplo, pode emular a arquitetura de hardware da família ARM numa arquitetura x86_64.

Para personalizar as imagens do SO ou firmware, tem de poder modificá-las e validar essas modificações num ambiente de teste antes de as instalar nos seus dispositivos periféricos. As ferramentas como o chroot permitem-lhe alterar virtualmente, mas não fisicamente, o diretório raiz antes de executar um comando.

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

Orquestre de forma fiável cargas de trabalho executadas nos seus dispositivos

Se os seus dispositivos suportarem cargas de trabalho heterogéneas, pode usar as seguintes ferramentas para orquestrar essas cargas de trabalho e gerir o respetivo ciclo de vida:

  • Um sistema de orquestração de cargas de trabalho: a utilização de um sistema de orquestração de cargas de trabalho, como o Kubernetes, é adequada para cargas de trabalho que tenham requisitos complexos de orquestração ou gestão do ciclo de vida. Estes sistemas também são adequados para cargas de trabalho que abrangem vários componentes. Em ambos os casos, significa que não tem de implementar essa lógica de gestão do ciclo de vida da orquestração e da carga de trabalho. Se os seus dispositivos tiverem recursos limitados, pode instalar uma distribuição do Kubernetes simples que precise de menos recursos do que a canónica, como o MicroK8s, o K3s ou o Google Distributed Cloud instalado com o perfil de limite.
  • Um sistema de inicialização: usar um sistema de inicialização, como o systemd>, é adequado para cargas de trabalho com as seguintes caraterísticas:

    • Requisitos de orquestração simples
    • A falta de recursos para suportar um sistema de orquestração de cargas de trabalho
    • Cargas de trabalho que não podem ser colocadas em contentores

Depois de ter um sistema implementado para orquestrar as suas cargas de trabalho, também pode usá-lo para executar tarefas que fazem parte dos seus processos de aprovisionamento e configuração. Se precisar de executar uma ferramenta de gestão de configuração como parte dos processos de aprovisionamento e configuração, por exemplo, pode usar o sistema de orquestração de cargas de trabalho como faria com qualquer outra carga de trabalho.

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

Valide, autentique e ligue dispositivos

Quando precisar de verificar se os seus dispositivos têm de se ligar a sistemas externos, como outros dispositivos ou um back-end, considere as recomendações nas seguintes subsecções.

Esta prática recomendada ajuda a:

  • Crie canais de comunicação seguros para os seus dispositivos.
  • Evite potenciais acessos furtivos que contornam o perímetro de segurança dos seus dispositivos.
  • Verifique se os seus dispositivos não expõem interfaces não autorizadas que um atacante possa explorar.

Práticas de associação a aplicar

  • Autentique outras partes que estejam a fazer pedidos de informações antes de trocar informações.
  • Verifique se as informações transmitidas não estão a ser enviadas através de canais inesperados.
  • Confie em ambientes de execução fiáveis para processar segredos, como chaves de encriptação, chaves de autenticação e palavras-passe.
  • Valide a integridade e a autenticidade de qualquer imagem do SO ou firmware antes da utilização.
  • Valide a validade, a integridade e a autenticidade de qualquer configuração fornecida pelo utilizador.
  • Limite a superfície de ataque não instalando software desnecessário e removendo qualquer software que já exista nos seus dispositivos.
  • Limite a utilização de operações e contas privilegiadas.
  • Valide a integridade da caixa do dispositivo se esta tiver de resistir a manipulação física e adulteração.

Práticas de ligação a evitar

  • Não transmita informações confidenciais através de canais não encriptados.
  • Evite deixar o acesso privilegiado aberto, como o seguinte:
    • Portas série e consolas série virtuais ou físicas com privilégios elevados, mesmo que as portas só sejam acessíveis se alguém adulterar fisicamente o dispositivo.
    • Pontos finais que respondem a pedidos provenientes da rede e que podem executar operações privilegiadas.
  • Não confie em credenciais codificadas nas imagens do SO ou firmware, na configuração nem no código-fonte.
  • Não revele informações que possam ajudar um adversário a recolher informações para obter privilégios elevados. Por exemplo, deve encriptar os dados nos seus dispositivos e desativar os sistemas de registo e monitorização desnecessários nos dispositivos de produção.
  • Não permitir que os utilizadores e as cargas de trabalho executem código arbitrário.

Monitorize os seus dispositivos

A recolha de informações sobre o estado dos seus dispositivos sem intervenção manual é essencial para a fiabilidade do seu ambiente. Certifique-se de que os seus dispositivos comunicam automaticamente todos os dados de que precisa. Existem dois motivos principais para recolher e monitorizar dados:

  • Para ajudar a garantir que os seus dispositivos estão a funcionar conforme esperado.
  • Para detetar problemas de forma proativa e realizar manutenção preventiva.

Por exemplo, pode recolher métricas de monitorização e eventos com o Cloud Monitoring.

Para ajudar a investigar e resolver problemas, recomendamos que crie e implemente processos para recolher dados de diagnóstico de alta resolução, como informações detalhadas de monitorização, rastreio e depuração, além dos processos que monitorizam os seus dispositivos durante o funcionamento normal. A recolha de dados de diagnóstico de alta resolução e a respetiva transferência através de uma rede podem ser dispendiosas em termos de recursos do dispositivo, como computação, armazenamento de dados e energia elétrica. Por este motivo, recomendamos que ative processos para recolher dados de diagnóstico de alta resolução apenas quando necessário e apenas para os dispositivos que precisam de uma investigação mais aprofundada. Por exemplo, se um dos seus dispositivos não estiver a funcionar como esperado e os dados de monitorização normais que o dispositivo comunica não forem suficientes para diagnosticar completamente o problema, pode ativar a recolha de dados de alta resolução para esse dispositivo, de modo que comunique mais informações que possam ajudar a investigar as causas do problema.

Esta prática recomendada garante que não deixa os dispositivos num estado desconhecido e que tem dados suficientes para determinar se e como os seus dispositivos estão a ter um bom desempenho.

Suporte atualizações e arranque autónomos

Quando conceber os processos de aprovisionamento e configuração, certifique-se de que os seus dispositivos são capazes de arrancar sem supervisão e que tem a infraestrutura necessária implementada. Ao implementar um mecanismo de arranque não assistido que suporta o primeiro arranque e o fornecimento de atualizações remotas, aumenta a capacidade de manutenção da sua infraestrutura. A utilização do arranque não assistido liberta-o da necessidade de prestar atenção manualmente a cada dispositivo à medida que arranca ou é atualizado. A gestão manual de uma grande frota de dispositivos é propensa a erros porque os operadores podem falhar ou executar incorretamente ações, ou podem não ter tempo suficiente para executar as ações necessárias para cada dispositivo na frota.

Além disso, não tem de preparar cada dispositivo antecipadamente para arrancar o SO correto ou a imagem de firmware. Pode lançar uma nova versão de uma imagem de SO ou firmware, por exemplo, e disponibilizar essa versão como uma das opções que os seus dispositivos podem escolher quando recebem as respetivas instruções de arranque da rede.

Esta prática recomendada ajuda a garantir que os seus dispositivos podem realizar arranques e atualizações automáticos e não supervisionados.

Crie e implemente processos resilientes

Mesmo com processos de aprovisionamento e configuração totalmente automatizados, podem ocorrer erros que impedem a conclusão correta desses processos, deixando assim os seus dispositivos num estado inconsistente. Ajude a garantir que os seus dispositivos conseguem recuperar de tais falhas implementando mecanismos de repetição e alternativos. Quando um dispositivo não consegue concluir uma tarefa que faz parte dos processos de aprovisionamento e configuração, por exemplo, deve tentar automaticamente recuperar dessa falha. Depois de o dispositivo recuperar da falha ou voltar a um estado de funcionamento, pode retomar a execução de processos a partir do ponto em que os processos falharam.

Esta prática recomendada ajuda a conceber e implementar processos de aprovisionamento e configuração resilientes.

Apoie todo o ciclo de vida dos seus dispositivos

Ao conceber os processos de aprovisionamento e configuração, certifique-se de que esses processos podem gerir todo o ciclo de vida do dispositivo. A gestão eficaz dos ciclos de vida dos dispositivos inclui o planeamento da rescisão e da eliminação, mesmo que os seus dispositivos devam funcionar durante um período relativamente longo.

Se não gerir o ciclo de vida dos seus dispositivos, podem surgir problemas, como os seguintes:

  • Custos elevados sustentados: a introdução do suporte de gestão do ciclo de vida após a implementação dos processos de aprovisionamento e configuração pode aumentar os custos. Se planear este suporte no início do design, pode reduzir esses custos. Se os processos de aprovisionamento e configuração não suportarem todo o ciclo de vida dos seus dispositivos, por exemplo, pode ter de intervir manualmente em cada dispositivo para processar corretamente cada fase do respetivo ciclo de vida. A intervenção manual pode ser dispendiosa e, muitas vezes, não é escalável.
  • Maior rigidez: a não compatibilidade com a gestão do ciclo de vida útil pode, eventualmente, impedir a atualização ou a gestão dos seus dispositivos. Se não tiver um mecanismo para desligar os seus dispositivos de forma segura e eficiente, por exemplo, pode ser difícil gerir o fim da vida útil e a eliminação final dos mesmos.

O que se segue?

Colaboradores

Autor: Marco Ferrari | Arquiteto de soluções na nuvem