Cómo usar entornos de marionetas en Linux para actualizar de forma segura un agente

Cómo usar entornos de marionetas en Linux para actualizar de forma segura un agente

Objetivo

Cree y use entornos de marionetas para probar una nueva configuración antes de actualizar un sistema de producción en vivo.

Sistema operativo y versiones de software

  • Sistema operativo: Cualquier gran distribución de Linux E.gramo. Ubuntu, Debian, Centos
  • Software: marioneta y marioneta

Requisitos

Acceso privilegiado al servidor maestro de Puppet y el nodo del cliente de Puppet.

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
  • ps - Dados los comandos de Linux para ser ejecutados como un usuario regular no privilegiado

Introducción

La mayoría de las instalaciones de títeres comienzan la vida como un servidor maestro que ejecuta una sola rama. El maestro contiene todos los manifiestos y otras configuraciones para todos los agentes de títeres que están sincronizados. Este es un buen lugar para comenzar, pero llegará rápidamente un momento en que una actualización necesita presionar que tiene el potencial de romper un servidor de producción. Esperar lo mejor no es la mejor manera de proceder.

Puppet proporciona las herramientas para separar las ramas completas de la configuración. Estos se llaman entornos. Un entorno de marionetas es una forma de suministrar un grupo aislado de nodos de agentes con su propia configuración dedicada. Cada entorno contiene un árbol de configuración de títeres entero y puede considerarse como un servidor de marionetas separadas.

¿Cómo se usan los entornos de marionetas??

El escenario típico para entornos, y es el que estamos explorando en esta guía, es crear un entorno de prueba, junto con el entorno de producción, donde se crea una nueva configuración de títeres.

Una forma de probar la nueva configuración en el entorno de prueba es actualizar una copia de un servidor de producción, como una instantánea de VM. Se observará cualquier problema en la máquina de prueba y la configuración de títeres modificada para corregir esto. Sin embargo, no siempre es posible tener un servidor de prueba para verificar los cambios en el entorno de prueba.

Otro método y el que exploraremos aquí es ejecutar el agente de títeres manualmente en el servidor de producción, pero use varias opciones que hagan que el agente de títeres se sincronice con el entorno de prueba, pero solo muestre lo que hubiera sucedido sin hacer cambios reales. Esto resaltará cualquier error que hubiera ocurrido en una actualización completa sin causar ningún tiempo de inactividad.

Creación de entornos de marionetas

En esta guía, crearemos una instancia de títere muy simple con un maestro de marionetas y un nodo de agente de marionetas. El servidor Puppet Master estará configurado para tener dos entornos; Prueba y desarrollo.

Esta guía supone que tiene un servidor Puppet Master y un nodo de agente de títeres que puede conectarse al Puppet Master.

Vamos a crear dos entornos en Puppet Master y dentro de estos entornos crearemos un manifiesto de marionetas muy simple que cree un archivo de texto en el nodo del agente.

La ubicación predeterminada para los cambios de configuración de Puppet dependiendo de la distribución que esté utilizando. En ubuntu 18.04LTS, la versión que se utilizará en esta guía, la ubicación está en /etc/marioneta. Otras distribuciones (y la documentación oficial) pueden colocarla en /etc/títeres/. Sin embargo, una vez que se encuentra en el directorio de configuración de títeres principales, todos los subdirectorios son los mismos para todas las distribuciones.

Instrucciones

Crear los directorios de entorno

Los entornos y su configuración existen bajo el /etc/títere/código/ directorio. En ubuntu 18.04 Este directorio está vacío en la instalación, por lo que primero tendremos que crear los dos directorios de entorno de nivel superior con los siguientes dos comandos:

# mkdir -p/etc/tupket/code/entornos/prueba # mkdir -p/etc/tupking/code/entornos/desarrollo 

Cualquier nuevo nodo de agente se conectará automáticamente al desarrollo entorno a menos que el ambiente La variable se establece en una alternativa en el [agente] Sección de la marioneta.confusión Archivo en el nodo del agente.



Creando dos sitios simples.PP manifiesta

El sitio.páginas El archivo es el manifiesto principal de donde el agente de títeres comienza a construir un catálogo del estado de la máquina deseado. Vamos a crear dos muy simples sitio.páginas archivos en los dos entornos que crean el mismo archivo en el nodo del agente. La única diferencia es que ponen un texto diferente en el archivo.

La primera sitio.páginas El archivo será el entorno de producción en:

/etc/títere/código/entornos/desarrollo/manifests/sitio.páginas

Este archivo debe tener el siguiente contenido:

Archivo '/tmp/ejemplo.txt ': asegurar => presente, mode => "0644", content => "del entorno de desarrollo \ n", 
Copiar

Use su editor de texto favorito para crear y llenar este archivo.

Este manifiesto asegura que un archivo esté presente en /tmp/ejemplo.TXT y contiene el texto "del entorno de desarrollo" (el "\ n" agrega una nueva línea al final del archivo que es una buena práctica y detiene la marioneta que muestra un mensaje de advertencia cuando no está presente).

El segundo manifiesto estará bajo el entorno de prueba en:

/etc/títere/código/entornos/prueba/manifests/sitio.páginas

Este archivo contiene lo siguiente:

Archivo '/tmp/ejemplo.txt ': asegurar => presente, mode => "0644", content => "del entorno de prueba \ n", 
Copiar

Esto es casi idéntico al archivo en el entorno de desarrollo con la única diferencia que el texto en el archivo indica que proviene del entorno de prueba.

Evaluación de la nueva configuración de títeres desde el entorno de prueba

El nodo del agente solo se sincronizará, por defecto, el entorno de desarrollo. Primero instruiremos manualmente al agente de títeres que se sincronice con el servidor maestro de marco y cree y aplique el sitio.páginas que creamos en el entorno de desarrollo.

Esto se hace con el siguiente comando:

# agente de títeres --environment = producción -prueba 

El --prueba La opción hace que el agente de títeres realice una ejecución de catálogo en primer plano con registro detallado. Cualquier actualización o cambio se aplicará al nodo.

El --medio ambiente = producción La opción está ahí para dejar en claro que estamos sincronizando del entorno de producción. Por lo general, esto se configuraría en la configuración principal del agente de títeres y no necesitaría ser incluido en el comando.

Cuando se ejecuta el comando anterior obtenemos la siguiente salida:

 Información: Uso del entorno configurado 'Producción' Información: Recuperación de pluginfacts Información: Recuperación del complemento Información: Recuperación de locales Información: Carga de datos Información: Catálogo de almacenamiento en caché para digital-2.Información neta: Aplicación de la versión de configuración '1527680694' Aviso:/etapa [main]/main/file [/tmp/ejemplo.txt]/Asegro: contenido definido como 'MD5 59F9CE1D4AAD5FD155DB7CCC2478A93B' AVISO: Catálogo aplicado en 0.02 segundos 

Esta salida indica ese archivo /tmp/ejemplo.TXT no estuvo presente, por lo que el agente de títeres lo creó como se instruyó en el sitio.páginas manifiesto. Las carreras posteriores no tendrán el Aviso: líneas como la /tmp/ejemplo.TXT El archivo existe con el contenido correcto.

Ahora que el estado del nodo del agente está de acuerdo con el manifiesto del entorno de desarrollo, podemos probar lo que sucedería si aplicamos el manifiesto alternativo del entorno de prueba.

Para probar y no confirmar la nueva configuración, necesitamos ejecutar el siguiente comando:

# agente de títeres --environment = prueba - -test --nope 

Como puedes ver el --ambiente La opción se ha cambiado a las pruebas y hemos incluido la opción adicional --Noop. Esta opción hace que el agente realice una carrera seca. Esto significa que el agente de títeres no realizará ningún cambio real en el nodo del agente, sino que producirá toda la salida como si hubiera tenido.

Esto nos permite evaluar lo que habría sucedido si la nueva configuración se aplicara al servidor. En este caso, la salida del comando anterior parece:

 Información: Uso del entorno configurado 'Prueba' Información: Recuperación de factores complementarios Información: Recuperación del complemento Información: Recuperación de locales Información: Carga de datos Información: Aplicación de la versión de configuración '1527683748' Aviso:/Etapa [Main]/Main/File [/TMP/Ejemplo.txt]/contenido: ---/tmp/ejemplo.txt 2018-05-30 12:19:16.205774048 +0000 +++ /TMP /Puppet-File20180530-21610-8ipzur 2018-05-30 12:35:48.740982652 +0000 @@ -1 +1 @@ -del entorno de desarrollo +del entorno de prueba Aviso:/etapa [main]/main/file [/tmp/ejemplo.txt]/content: current_value 'md5 59f9ce1d4aad5fd155db7ccc2478a93b', debería ser 'md5 ABBB8f68df144a5673d 62ae6c4a036ed' (noop) aviso: class [principal]: habría habido Triggered ' activado 'actualizar' de 1 aviso de eventos: catálogo aplicado en 0.04 segundos 

Las líneas más interesantes aquí son las siguientes:

 -Del entorno de desarrollo +del entorno de prueba 

Estos indican con el símbolo menos ( -) Lo que se está cambiando de y con el símbolo más ( +) lo que se está cambiando a. En este ejemplo es el texto en el archivo.

Toda esta salida indica que la nueva configuración se habría aplicado con éxito y el contenido de /tmp/ejemplo.TXT habría sido modificado. Si este es el estado deseado del servidor de producción, los cambios en el sitio.páginas El archivo se puede hacer de forma segura en el entorno de producción.



Identificar un error

La nueva configuración de títeres no siempre se aplica sin error y esa es la razón por la que siempre debe probarse antes de aplicarse a un sistema de producción. Forzaremos un error en esta situación cometiendo un error deliberado en las pruebas sitio.páginas archivo. Intentaremos establecer los permisos del archivo en 0944 que no es un permiso válido y causará un error.

Ahora, cuando corremos:

 # agente de títeres --environment = prueba - -test --nope 

Veremos la siguiente salida:

 Información: Uso del entorno configurado 'Prueba' Información: Recuperación de pluginfacts Información: Recuperación de la información del complemento: Recuperación de locales Información: Carga de hechos Error: No se pudo aplicar el catálogo: el modo de parámetro falló en el archivo [/tmp/ejemplo.txt]: la especificación del modo de archivo no es válida: "0944" (archivo:/etc/tuprupetcode/entornos/testing/manifests/sitio.PP, línea: 1) 

La siguiente captura de pantalla muestra esta salida, ya que se presentaría en la línea de comando:

Puppet indicará cualquier error imprimiéndolos en rojo.

Los colores nos hacen saber inmediatamente que habría habido un error al intentar usar la nueva configuración de títeres desde el entorno de prueba. Sin embargo, mientras usábamos el --Noop Opción No se comprometieron errores con el servidor de producción.

Conclusión

Al ejecutar sistemas de producción que gestionan Puppet, siempre es importante probar cualquier configuración nueva antes de aplicarlo. El uso de las herramientas que Puppet proporciona para crear entornos alternativos donde la nueva configuración se puede crear y evaluar de manera segura con los sistemas de producción significará menos errores y menos tiempo de inactividad.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Descargar CD/DVD Linux en vivo
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Descarga de Linux
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Cómo arrancar dual Kali Linux y Windows 10
  • Cómo actualizar Firefox en Linux