Prácticas recomendadas para aprovisionar y configurar de forma automática sistemas y servidores perimetrales y de equipos físicos

Last reviewed 2023-02-23 UTC

En este documento, se sugieren prácticas recomendadas para diseñar e implementar procesos de aprovisionamiento y configuración confiables y automatizados para dispositivos que se ejecutan en los perímetros de tu entorno, como los siguientes:

Lee este documento si diseñas procesos de aprovisionamiento y configuración de dispositivos de IoT y perimetrales, o si quieres obtener más información sobre las prácticas recomendadas para aprovisionar estos tipos de dispositivos.

El aprovisionamiento y la configuración manual de una gran flota de dispositivos son propensas a generar errores humanos y no se escala a medida que la flota crece. Por ejemplo, podrías olvidarte de ejecutar una tarea crítica de aprovisionamiento o de configuración, o es posible que dependas de procesos parcialmente incompletos o sin documentar. Los procesos de aprovisionamiento y configuración completamente automatizados y confiables ayudan a resolver estos problemas. También te ayudan a administrar el ciclo de vida de cada dispositivo, desde la fabricación hasta el retiro y la eliminación.

Terminología

Los siguientes términos son importantes a fin de comprender cómo implementar y compilar procesos automatizados de aprovisionamiento y configuración de tus dispositivos:

  • Dispositivos perimetrales: es el dispositivo que implementas en los perímetros del entorno que se encuentra cerca de los datos que deseas procesar.
  • Proceso de aprovisionamiento: es el conjunto de tareas que debes completar a fin de preparar un dispositivo para la configuración.
  • Proceso de configuración: es el conjunto de tareas que debes completar a fin de preparar un dispositivo para operar en un entorno específico.
  • Administración de configuración: Es el conjunto de tareas que realizas de forma continua para administrar la configuración de tu entorno y tus dispositivos.
  • Imagen base: es una imagen mínima de sistema operativo (SO) o firmware producido por tu empresa o producido por un dispositivo o fabricante del SO.
  • Imagen dorada: Es una imagen de SO o firmware inmutable que creas para tus dispositivos o que te preparas a partir de una imagen base. Las imágenes doradas incluyen todos los datos y la información de configuración que tus dispositivos necesitan para realizar las tareas asignadas. Puedes preparar varias imágenes doradas para realizar tareas diferentes. Los sinónimos para los tipos de imágenes doradas incluyen sabores, variantes y arquetipos.
  • Imagen Plata: es una imagen de SO o firmware que preparas para tus dispositivos mediante la aplicación de cambios mínimos a una imagen dorada o base. Los dispositivos que ejecutan una imagen plateada completan su aprovisionamiento y configuración en el primer inicio, según las necesidades de los casos de uso que esos dispositivos deben admitir.
  • Dispositivo inicial: es un dispositivo que inicia el entorno sin dependencias externas.
  • Inicio de la red: es el conjunto de tecnologías que permiten que un dispositivo obtenga software y cualquier información de configuración relacionada de la red, en lugar de un sistema de almacenamiento conectado al dispositivo.

Prácticas recomendadas para los procesos de aprovisionamiento y configuración

Para establecer objetivos y evitar errores comunes, aplica las siguientes prácticas recomendadas de aprovisionamiento y configuración. Cada recomendación se analiza en su propia sección.

Automatiza los procesos de aprovisionamiento y configuración

Durante su primer inicio, o cuando sea necesario, tus dispositivos deben poder aprovisionarse y configurarse solos con la imagen de software instalada en ellos.

Puedes usar herramientas que te brindan las primitivas necesarias para organizar e implementar esos procesos para evitar la implementación de la lógica que necesitas durante los procesos de aprovisionamiento y configuración. Por ejemplo, puedes usar cloud-init y su fuente de datos de NoCloud, junto con secuencias de comandos o una herramienta de administración de configuración, como Ansible, Puppet o Chef, que se ejecutan en el host local.

Para diseñar procesos confiables de aprovisionamiento y configuración, asegúrate de que todos los pasos y tareas que se realizan durante esos procesos sean válidos, posiblemente de forma automatizada. Por ejemplo, puedes usar un framework de prueba de cumplimiento automatizado, como InSpec, para verificar que tus procesos de aprovisionamiento y configuración funcionen como se espera.

Esta práctica recomendada te ayudará a evitar puntos únicos de fallo y la necesidad de intervención manual cuando necesites completar el aprovisionamiento y la configuración del dispositivo.

Evita los dispositivos de propósito especial

Cuando diseñes tus dispositivos perimetrales, minimiza su variación en términos de propósito y especialidad. Esta recomendación no significa que todos tus dispositivos perimetrales deben ser iguales entre sí o compartir el mismo propósito, pero deben ser lo más homogéneos posible. Por ejemplo, puedes definir arquetipos de dispositivo según los tipos de carga de trabajo que necesitan admitir. Luego, puedes implementar y administrar tus dispositivos según las propiedades de esos arquetipos.

Para asegurarte de seguir esta práctica recomendada, verifica que puedas elegir un dispositivo de forma aleatoria de los de un arquetipo determinado y, luego, haz lo siguiente:

  • Trata el dispositivo como lo harías con otros dispositivos del mismo arquetipo. Esto demuestra que tienes eficiencia operativa.
  • Reemplaza el dispositivo por dispositivos del mismo arquetipo sin personalizaciones adicionales. Si lo haces, se muestra que implementaste correctamente esos arquetipos.

Esta práctica recomendada garantiza que se reduzca la variación en la flota de dispositivos, lo que genera una menor fragmentación en tu entorno y los procesos de aprovisionamiento y configuración.

Usa dispositivos iniciales para iniciar tu entorno

Cuando aprovisionas y configuras tus dispositivos, es posible que te encuentres con un problema de dependencia circular: los dispositivos deben tener una infraestructura de respaldo para aprovisionarse y configurarse, pero esa infraestructura no existe porque aún debes aprovisionarla y configurarla.

Puedes resolver este problema con los dispositivos iniciales. Los dispositivos iniciales tienen un propósito especial temporal. Después de completar las tareas para las que se diseñó el propósito especial, el dispositivo cumple con su comportamiento y su estado al arquetipo relevante.

Por ejemplo, si usas cloud-init para inicializar de manera automática los dispositivos, es posible que debas configurar una fuente de datos cloud-init NoCloud de la siguiente manera:

  1. Proporciona los datos de la fuente de datos de NoCloud al dispositivo de origen a través de un sistema de archivos.
  2. Espera a que el dispositivo inicial complete su propio aprovisionamiento y configuración con su propósito especial, que incluye la entrega de datos de fuente de datos NoCloud a otros dispositivos a través de la red.

    Los procesos de aprovisionamiento y configuración del dispositivo de origen esperan hasta que se cumplan las condiciones para descartar el propósito especial temporal del dispositivo de origen. A continuación, se muestran algunos ejemplos de estas condiciones:

    • ¿Existen otros dispositivos en el entorno que entreguen los datos de la fuente de datos de NoCloud a través de la red?
    • ¿Existen suficientes nodos en el clúster?
    • ¿Se completó la primera copia de seguridad?
    • ¿Está listo el sitio de recuperación ante desastres?
  3. Aprovisiona y configura otros dispositivos que descarguen los datos de la fuente de datos NoCloud a través de la red desde el dispositivo de origen Algunos dispositivos deben poder entregar los datos de la fuente de datos NoCloud a través de la red.

  4. Los procesos de aprovisionamiento y configuración del dispositivo de origen se reanudan porque se cumplen las condiciones para descartar el propósito especial del dispositivo de origen: existen otros dispositivos en la flota que entregan los datos de la fuente de datos de NoCloud a través de la red.

  5. Los procesos de aprovisionamiento y configuración del dispositivo de origen descartan el propósito especial, lo que hace que el dispositivo de origen no se pueda distinguir de otros dispositivos del mismo arquetipo.

Esta práctica recomendada garantiza que puedas iniciar el entorno, incluso sin admitir la infraestructura, y sin infringir la práctica recomendada Evita los dispositivos de propósito especial.

Minimiza el estado de tus dispositivos

Cuando diseñes tus dispositivos perimetrales, mantén la necesidad de almacenar información con estado al mínimo. Los dispositivos perimetrales pueden tener recursos de hardware limitados o pueden implementarse en entornos estrictos. Minimizar la información con estado que necesitan simplifica los procesos de aprovisionamiento, configuración, copia de seguridad y recuperación porque puedes tratar esos dispositivos de forma homogénea. Si un dispositivo perimetral sin estado comienza a fallar y no se puede recuperar, por ejemplo, puedes cambiarlo por otro dispositivo del mismo arquetipo con interrupciones o pérdida de datos mínimas.

Esta práctica recomendada te ayuda a evitar problemas inesperados debido a la pérdida de datos o a que tus procesos son demasiado complejos. La mayor complejidad proviene de la necesidad de prestar servicio a una flota de dispositivos heterogéneos.

Compila imágenes de SO y firmware de forma automática.

Para evitar tareas de aprovisionamiento y configuración costosas cuando tus dispositivos se inician por primera vez y para ahorrar recursos de los dispositivos, personaliza las imágenes de SO y firmware antes de que estén disponibles. Por ejemplo, puedes instalar dependencias directamente en la imagen en lugar de instalarlas cuando se inicia cada dispositivo por primera vez.

Cuando prepares imágenes de SO y firmware para tus dispositivos, comienzas desde una imagen base. Cuando personalizas la imagen base, puedes hacer lo siguiente:

  • Produce imágenes doradas. Las imágenes doradas contienen todas las dependencias en la imagen, por lo que tus dispositivos no tienen que instalarlas en el primer inicio. Producir imágenes doradas puede ser una tarea compleja, pero permiten que los dispositivos ahorren tiempo y recursos durante el aprovisionamiento y la configuración.
  • Produce imágenes plateadas. A diferencia de las imágenes doradas, los dispositivos que ejecutan imágenes plateadas completan todos los procesos de aprovisionamiento y configuración durante su primer inicio. Producer imágenes plateadas puede ser menos complejo que producir imágenes doradas, pero los dispositivos que ejecutan una imagen plateada ocupan más tiempo y recursos durante el aprovisionamiento y la configuración.

Puedes personalizar las imágenes de SO y firmware como parte de los procesos de integración continua y de implementación continua (CI/CD) y hacer que las imágenes personalizadas estén disponibles para tus dispositivos después de la validación de forma automática. Los procesos de IC/EC que implementas con una herramienta como Cloud Build, GitHub Actions, GitLab CI/CD o Jenkins, pueden realizar la siguiente secuencia de tareas:

  1. Realiza una validación automática con las imágenes personalizadas.
  2. Publica las imágenes personalizadas en un repositorio en el que tus dispositivos puedan obtenerlas.

Si tu entorno de CI/CD y el SO o firmware para el que necesitas compilar imágenes usan diferentes arquitecturas de hardware, puedes usar herramientas como QEMU a fin de emular esas arquitecturas. Por ejemplo, puedes emular la arquitectura de hardware de la familia ARM en una arquitectura x86_64.

Para personalizar tus imágenes de SO o firmware, debes poder modificarlas y verificar esas modificaciones en un entorno de prueba antes de instalarlas en tus dispositivos perimetrales. Herramientas como chroot te permiten cambiar virtualmente, pero no cambian de forma física el directorio raíz antes de ejecutar un comando.

Por ejemplo, ejecutar el comando chroo