Contactos

Instalación y configuración de títeres. Instalación y configuración del servidor de títeres. Lista completa de los parámetros de Bash del script de instalación original

Para un uso más eficiente, la títere debe entenderse cómo se construyen los módulos y los manifiestos. Este manual lo familiarizará con el trabajo de estos componentes de títeres en el ejemplo de configuración de la pila de lámpara en el servidor Ubuntu 14.04.

Requisitos

  • Instalación de títeres (maestro y agente). Más sobre esto -.
  • La capacidad de crear al menos un servidor virtual de Ubuntu 14.04 para mantener el servicio del nodo de la agencia de títeres.

Conceptos básicos del código de títeres

Recursos

El código de títeres consiste principalmente en recursos. El recurso es un fragmento de un código que describe el estado del sistema y determina los cambios que necesitan. Por ejemplo:

usuario ("Mitchell":
Asegurar \u003d\u003e presente
uid \u003d\u003e "1000",
gid \u003d\u003e "1000",
shell \u003d\u003e "/ bin / bash",
Inicio \u003d\u003e "/ / home / mitchell"
}

El anuncio del recurso tiene un formato de este tipo:

resource_Type ("Resource_Name"
atributo \u003d\u003e valor
...
}

Para ver todos los tipos de recursos de títeres, ingrese el comando:

recursos de títeres - Types.

Más sobre los tipos de recursos: aprenderá en este manual.

Manifiesto

Manifiesto es el escenario de la orquestación. Los programas de marionetas con expansión .pp se llaman manifiestos. Puppet manifiesto predeterminado - /etc/puppet/manifests/site.pp.

Clases

Al igual que en cualquier lenguaje de programación convencional, las clases son responsables de organizar y reutilizar las partes del Orchec.

La definición de clase es un bloque de código que describe cómo funciona la clase. Habiendo determinado la clase, puedes usarlo en Manifesta.

La definición de la clase tiene un formato de este tipo:

clase example_class (
...
Código.
...
}

Este código define la clase de Ejemplos. El código de títere estará en soportes rizados.

La Declaración de Clase es el lugar en el código donde se llama una u otra clase. Usando los anuncios de la clase títere, procesa su código.

La declaración de clase es común y por el tipo de recurso.

La declaración de clase habitual se agrega al código utilizando la palabra clave Incluir.

incluir example_class

Al declarar el tipo de recurso, la clase se anuncia en el formato de recursos:

clase ("example_class" :)

Tal AD le permite agregar parámetros de clase al código que anulan los valores estándar de los atributos de la clase. Por ejemplo:

nodo "host2" (
Clase ("Apache" :) # Usa Módulo Apache
Apache :: VHOST ("example.com": # Defina el recurso de VHOST
puerto \u003d\u003e "80",
DoCroot \u003d\u003e "/ var / www / html"
}
}

Módulos

El módulo es un grupo de manifiestos y otros archivos, organizados de antemano de cierta manera, lo que le permite facilitar la articulación y la reutilización de las partes individuales del Orchec. Los módulos ayudan a sistematizar el código de títeres, ya que con su código de ayuda se puede dividir en varios manifiestos.

Los módulos de títeres se almacenan en el directorio / etc / títere / módulos.

Escritura de manifiesta

Puede practicar manifiestos, módulos y clases de títeres en el ejemplo de la instalación de la pila de lámparas al servidor Ubuntu (como resultado que resulta).

Entonces, para realizar la orquestación del servidor Ubuntu 14.04 e instalar la pila de la lámpara, necesita recursos para tales acciones:

  • instalación del paquete Apache2.
  • iniciar el servicio Apache2.
  • instalación de un paquete servidores mysql, MySQL-Server.
  • lanzar el servicio MySQL.
  • instalación del paquete PC5
  • creación de un script de prueba PHP, info.php.
  • actualice el índice APT antes de instalar cada paquete.

A continuación encontrará tres ejemplos del código de títeres, con los que puede obtener una instalación de pila de lámpara.

El primer ejemplo le enseñará los manifiestos básicos en un archivo. El segundo ejemplo ayudará a ensamblar y usar la clase y el módulo según los manifiestos previamente escritos. En el tercer ejemplo, aprenderá a usar los módulos disponibles públicos premontados para instalar la pila de la lámpara.

Nota: Para probar, es mejor usar un servidor virtual fresco.

Ejemplo 1: Instalación de la lámpara usando un manifiesto

Puppet Manifesto se puede escribir en el nodo de la agencia y luego realizarlo usando el comando Puppet Aply (para esto, no necesita tener una configuración del asistente y el agente).

En esta sección, aprenderá cómo escribir manifiestos que utilizarán tales tipos de anuncios de recursos:

  • eXEC: Ejecución de los comandos.
  • paquete: Instalación de paquetes.
  • servicio: Servicios de gestión.
  • archivo: Administración de archivos.

Creando manifiesta

Crea un nuevo manifiesto:

sudo vi /etc/puppet/manifests/lamp.pp.

Agregue el siguiente código para declarar los recursos necesarios.

Ejecutando el comando "Apt-get Actualizar"
EXEC ("APT-ACTUALIZACIÓN": Recurso EXEC "APT-update"
Comando \u003d\u003e "/ usr / bin / apt-get update" # command que ejecutará este recurso
}
# Paquete de instalación apache2
Paquete ("Apache2":
Requerir \u003d\u003e ejecuto ["apt-update"], # APT-Update Swyer antes de instalar el paquete
Asegurarse \u003d\u003e instalado,
}
# Ejecutar el servicio APACE2
Servicio ("Apache2":
Asegurarse \u003d\u003e Correr,
}
# Set MySQL-Server
Paquete ("MySQL-Server":
Requerir \u003d\u003e EXEC ["APT-update"], # APT-Solicitud de actualización pospone
Asegurarse \u003d\u003e instalado,
}
# Ejecutando el servicio MySQL
Servicio ("MySQL":
Asegurarse \u003d\u003e Correr,
}
# Paquete de instalación php5
Paquete ("PHP5":
Requerir \u003d\u003e ejecutado ["apt-update"], # solicitud de APT-Update antes de instalar
Asegurarse \u003d\u003e instalado,
}
# Servicio de ejecución info.php
Archivo ("/var/www/html/info.php":
Asegurarse \u003d\u003e Archivo,
Contenido \u003d\u003e ""Código # phpinfo
Requerir \u003d\u003e Paquete ["Apache2"], # Apache2 Solicitud de paquete
}

Aplicación manifiesta

Para usar el nuevo manifiesto, ingrese el comando:

sudo títere Aplicar -

Guardará un resultado de volumen que muestre todos los cambios en el estado del medio. Si no hay errores en la salida, puede abrir su dirección IP externa o nombre de dominio en el navegador. La página de prueba PHP aparece en la pantalla con información de pila. Esto significa que Apache y PHP trabajan.

Ahora la pila de lámpara está instalada en el servidor usando títere.

Este es un manifiesto bastante simple, ya que se puede realizar en el agente. Si no tiene un asistente de títeres, otros nodos de la agencia no podrán usar este manifiesto.

El servidor Master Puppet comprueba el estado del servidor cambia cada 30 minutos.

Ejemplo 2: Configuración de la pila de la lámpara con el módulo

Ahora intente crear un módulo simple basado en el manifiesto de la lámpara, que escribió en la sección anterior.

Para crear un módulo, cree un nuevo directorio en el directorio de los módulos (su nombre debe coincidir con el nombre del módulo). Este directorio debe contener el directorio de manifiestos y el archivo init.pp. En el archivo init.pp, se especifica la clase de títere (su nombre debe coincidir con el nombre del módulo).

Creando un módulo

Vaya al servidor Master Puppet y cree la estructura de directorios para el módulo:

cD / etc / títere / módulos
Sudo mkdir -p lámpara / manifiesta

Cree y abra el archivo init.pp en el editor:

sudo VI Lámpara / Manifiesta / init.pp

Inserte la clase de la lámpara en el archivo:

lámpara de clase (
}

Copie los contenidos del manifiesto de la Sección 1 e insértelo en la unidad de clase de lámpara. Ahora tienes una definición de una clase de lámpara. Otros manifiestos podrán usar esta clase como un módulo.

Guarde y cierre el archivo.

Usando el módulo en el manifiesto principal.

Ahora puede configurar el manifiesto principal y use el módulo de la lámpara para instalar la pila de la lámpara en el servidor.

En el servidor Puppet Master, edite tal archivo:

sudo vi /etc/puppet/manifests/site.pp.

Lo más probable es que, en este momento, el archivo está vacío. Agregue las siguientes líneas:

nodo predeterminado ()
Nodo "lámpara-1" (
}

Nota: En lugar de la lámpara-1, especifique el nombre del host de su agente de títeres para instalar la pila.

El bloque de nodos le permite especificar el código de títere que se aplicará solo a algunos nodos.

La unidad predeterminada se aplica a todos los nodos de la agencia que no tienen un bloque individual (déjelo vacío). La unidad Lámpara-1 se aplicará al nodo de la agencia de la lámpara 1.

Agregue la siguiente línea a este bloque que use el módulo de la lámpara:

Guarde y cierre el archivo.

Ahora, el títere del nodo de la agencia podrá descargar la configuración del servidor maestro e instalar la pila de lámpara. Si desea realizar cambios en este momento, ejecute el comando en el agente:

agente de títeres sudo -

Los módulos son la forma más conveniente. reutilizar Código de títeres. Además, los módulos ayudan a organizar lógicamente el código.

Ejemplo 3: Instalación de la lámpara usando módulos públicos

El módulo MySQL se usa de la misma manera. Agregue tales líneas para bloquear nodos:

clase ("MySQL :: Server":
root_password \u003d\u003e "contraseña",
}

También puede pasar los parámetros del módulo MySQL.

Agregue un recurso que copie info.php a la ubicación deseada. Utilice el parámetro de origen. Agregue las siguientes líneas al bloque de nodos:

archivo ("info.php": # Nombre del archivo de recursos
ruta \u003d\u003e "/var/www/html/info.php", # ruta de destino
Asegurarse \u003d\u003e Archivo,
Requerir \u003d\u003e Clase ["apache"], # clase de apache para usar
fuente \u003d\u003e "títere: ///modules/apache/info.php", el lugar donde necesita copiar el archivo
}

Esta declaración de clase utiliza el parámetro de origen en lugar del contenido. Este parámetro no solo utiliza los contenidos del archivo, sino que también lo copia.

El títere: ///modules/apache/info.php Puppet copiará en /etc/puppet/modules/apache/files/info.php.

Guarde y cierre el archivo.

Crear un archivo info.php.

sudo sh -c "echo""\u003e /etc/puppet/modules/apache/files/info.php"

Ahora, el títere del nodo de la agencia podrá descargar la configuración del servidor maestro e instalar la pila de lámpara. Si desea realizar cambios en el entorno del agente en este momento, ejecute el comando en este nodo:

agente de títeres sudo -

Este comando descargará todas las actualizaciones para el nodo actual e instalará la pila en ella. Para asegurarse de que Apache y PHP funcione, abra la dirección IP o el nodo de dominio en el navegador:

http: //lamp_1_public_ip/info.php.

Conclusión

Ahora tienes habilidades básicas para trabajar con módulos y manifiestos de títeres. Intenta crear un simple manifiesto y un módulo.

Puppet es ideal para administrar archivos de configuración de la aplicación.

Etiquetas:

Administrar una gran cantidad de sistemas UNIX no se pueden llamar cómodos. Para cambiar un parámetro, el administrador tiene que acceder a cada máquina, los scripts solo pueden ayudar parcialmente, y no en todas las situaciones.

Debe ser reconocido que administradores de Windows Las redes todavía están en una posición más ventajosa. Es suficiente cambiar la configuración de las políticas de grupo y después de un tiempo todas las computadoras de la red, incluido el sistema operativo recién instalado "Reconocer" sobre la innovación, si ciertamente les concierne. Mirando a su alrededor por un largo período de desarrollo de UNIX, se puede observar que nada como eso no encajaba. Hay soluciones como Kickstart, que ayudan con la instalación primaria. sistema operativoPero el acabado adicional requerirá un esfuerzo considerable. Soluciones comerciales como BladeLogic y OPSWare, el problema de la automatización de la configuración se resuelve solo en parte, su principal ventaja. interfaz gráficaSí, y permítales comprarlos solo en grandes organizaciones. Por supuesto, hay proyectos que ofrecen soluciones gratuitas, pero para todo el tiempo de su existencia, no podían crear una comunidad grande. Por ejemplo, CFENGINE no es muy popular entre los administradores, aunque aparte de que Linux se puede usar en * BSD, Windows y Mac OS X. Puede deberse a la complejidad relativa en la creación de configuraciones. Al describir las tareas, es necesario tener en cuenta las características de cada sistema específico, y controlar manualmente la secuencia de acciones al ejecutar comandos. Es decir, el administrador debe recordar que para algunos sistemas es necesario escribir Adduser para otra persona de usuario, tener en cuenta la ubicación de los archivos en diferentes sistemas, etc. Este es un orden de magnitud complica el proceso de escritura de comandos, es muy difícil crear la configuración correcta con el proceso, y puede leer las configuraciones creadas después de un tiempo, prácticamente no real. A pesar de la licencia de GPL CFENGINE, de hecho, un proyecto de una persona que controla todos los cambios y no está muy interesado en construir una sociedad abierta. Como resultado, CFENGINE es bastante satisfactorio al desarrollador, y para los administradores restantes es más bien un exceso de dolor de cabeza. Para mejorar el cfengine desarrolladores de terceros Se crearon diferentes adiciones, que a menudo solo empeoran la situación. El autor de varios módulos de este tipo a Cfengine Luke Kanies, al final, decidió desarrollar una herramienta similar, pero sin muchas fallas de CFENGINE.

Características de la marioneta

La títere como CFENGINE es un sistema cliente-servidor que utiliza un declarativo, es decir, obligatorio realizar un idioma para describir las tareas y las bibliotecas para implementarlas. Los clientes periódicamente (por defecto 30 minutos) están conectados al servidor central y obtén la configuración más reciente. Si la configuración no coincide con el estado del sistema, se ejecutarán, si es necesario, el servidor se refiere a las operaciones de las operaciones. El servidor de mensajes puede guardar en syslog o archivo, cree un programa de RRD, envíe al correo electrónico especificado. Los niveles adicionales de abstracción transaccional y de recursos están enviando la máxima compatibilidad con la configuración y las aplicaciones existentes, lo que le permite enfocarse en objetos del sistemaSin preocuparse por las diferencias en la implementación y la descripción de los comandos detallados y los formatos de archivos. El administrador funciona solo con el tipo de objeto, el resto del títere se toma en sí mismo. Por lo tanto, el tipo de paquetes conoce alrededor de 17 sistemas de lotes, que se reconocerán automáticamente sobre la base de la información sobre la versión de la distribución o el sistema, aunque, si es necesario, se puede agregar un administrador por lotes a la fuerza.

A diferencia de los scripts que a menudo no son posibles para usar en otros sistemas, las configuraciones de títeres escritas por los administradores de terceros trabajarán principalmente en cualquier otra red. En el libro de cocina de títeres [ http://www.reductivelabs.com/trac/puppet/tags/puppet%2crecipe] Ya hay tres docenas de recetas preparadas. Actualmente, títere apoya oficialmente los siguientes sistemas y servicios operativos: Debian, Redhat / Fedora, Solaris, SUSE, CENTOS, MAC OS X, OpenBSD, Gentoo y MySQL, LDAP.

Títere. Idioma

Para continuar, primero debe tratarse con los elementos principales y las capacidades de idioma. El lenguaje es uno de los puntos fuertes del títere. Con él, se describe por los recursos que el administrador planea gestionar y acciones. A diferencia de la mayoría de estas soluciones, el idioma títere le permite simplificar la apelación a todos los recursos similares en cualquier sistema en un entorno heterogéneo. Una descripción de recursos, por regla general, consiste en un nombre, tipo y atributos. Por ejemplo, especifique un archivo / etc / passwd y configure sus atributos:

archivo ("/ etc / passwd":

propietario \u003d\u003e raíz,

grupo \u003d\u003e raíz,

Ahora, los clientes, se conectan al servidor, copian el archivo / etc / passwd e instale los atributos específicos. En una regla, puede definir varios recursos a la vez, separándolos con un punto con una coma. ¿Y qué si el archivo de configuración se usa en el servidor difiere del cliente o no se usa en absoluto? Por ejemplo, esta situación puede ocurrir cuando la configuración Conexiones VPN. En este caso, puede especificar la directiva de origen. Aquí hay dos opciones, como es habitual para especificar la ruta a otro archivo, también se admiten dos URI del protocolo: Archivo y títere. En el primer caso, se usa un enlace a un servidor NFS externo, en la segunda versión del servidor de títeres, NFS se inicia un servicio similar, que exporta recursos. En este último caso, de forma predeterminada, la ruta se indica en relación con el directorio raíz de títeres: / etc / títere. Es decir, el títere de enlace: //server.domain.com/config/sshd_config se corresponderá al archivo / etc / tuppet / config / sshd_config. Puede anular este directorio con la directiva FileBucket, aunque es más correcta usar la sección del mismo nombre en el archivo /etc/puppet/fileserver.conf. En este caso, puede restringir el acceso al servicio solo de direcciones específicas. Por ejemplo, describimos la sección de configuración.

pATH / VAR / Puppet / Config

permitir * .domain.com.

permitir 192.168.0. *

permitir 192.168.1.0/224

negar * .wireless.domain.com.

Y luego referirse a esta sección al describir el recurso.

fuente \u003d\u003e "títere: //server.domain.com/config/sshd_config"

Antes de que el colon sea el nombre del recurso. En los casos más simples, como nombre, simplemente puede especificar los mejores alias o variables de uso. Alias \u200b\u200bse instala utilizando la directiva de alias. Ruta completa de archivos. En configuraciones más complejas.

archivo ("/ etc / passwd":

alias \u200b\u200b\u003d\u003e passwd

Otra opción para crear un seudónimo es adecuado en el caso cuando tenga que lidiar con diferentes sistemas operativos. Por ejemplo, cree un recurso que describe el archivo SSHD_CONFIG:

archivo (sshdconfig:

nombre \u003d\u003e $ Operatingsystem? (

solaris \u003d\u003e "/ usr / local / etc / ssh / sshd_config",

predeterminado \u003d\u003e "/ etc / ssh / sshd_config"

En este ejemplo, enfrentamos la posibilidad de elección. Se especifica un archivo para Solaris por separado, se seleccionará el archivo / etc / ssh / sshd_config para todos los demás. Ahora puede ponerse en contacto con este recurso como SSHDCONFIG, dependiendo del sistema operativo, se seleccionará la ruta deseada. Por ejemplo, indicamos que si el demonio SSHD se inicia y recibe un nuevo archivo, debe reiniciar el servicio.

asegúrate \u003d\u003e Verdadero,

suscribirse \u003d\u003e archivo

Las variables se usan a menudo cuando se trabaja con los datos de usuario. Por ejemplo, describe la ubicación de los directorios de inicio:

$ Caseroot \u003d "/ home"

Ahora puede ponerse en contacto con los archivos de un usuario específico como

$ (Caseroot) / $ nombre

El nombre de la cuenta del usuario será sustituido en el parámetro de nombre de $. En algunos casos, es conveniente determinar el valor predeterminado para algún tipo. Por ejemplo, para el tipo EXEC, los directorios en los que debe buscar el archivo ejecutable se indica muy a menudo.

EXEC (ruta \u003d\u003e "/ usr / bin: / bin: / usr / sbin: / sbin")

De hecho, si necesita especificar algunos archivos y directorios anidados, puede usar el parámetro Recurse.

archivo ("/etc/apache2/conf.d":

fuente \u003d\u003e "títere: // Puppet: //server.domain.com/config/apache/conf.d",

recurse \u003d\u003e "verdadero"

Varios recursos se pueden integrar en clases o definiciones. Las clases son una descripción completa del sistema o servicio y se usan aparte.

"/ Etc / passwd": propietario \u003d\u003e raíz, grupo \u003d\u003e raíz, modo \u003d\u003e 644;

"/ Etc / shadow": propietario \u003d\u003e raíz, grupo \u003d\u003e raíz, modo \u003d\u003e 440

Al igual que en los idiomas orientados a objetos, las clases pueden ser anuladas. Por ejemplo, el propietario del grupo FreeBSD de estos archivos es la rueda. Por lo tanto, para no reescribir completamente el recurso, cree una nueva clase FreeBSD, que heredará la clase Linux:

clase FreeBSD hereda Linux (

Archivo ["/ etc / passwd"] (grupo \u003d\u003e rueda);

Archivo ["/ etc / shadow"] (grupo \u003d\u003e rueda)

Para mayor comodidad, todas las clases se pueden realizar en un archivo separado que incluye una directiva de inclusión. Las definiciones pueden tomar numerosos parámetros como argumentos, pero no admiten la herencia y se utilizan si necesita describir múltiples objetos utilizados. Por ejemplo, definimos el directorio de inicio de los usuarios y los comandos que necesita para crear una nueva cuenta.

define user_Homedir ($ Group, $ Fullname, $ Ingroups) (

usuario ("$ nombre":

asegurar \u003d\u003e presente

comentario \u003d\u003e "$ fullname",

gid \u003d\u003e "$ grupo",

grupos \u003d\u003e $ ingrupos,

membresía \u003d\u003e Mínimo,

shell \u003d\u003e "/ bin / bash",

inicio \u003d\u003e "/ / Inicio / Nombre",

requerir \u003d\u003e Grupo [$ grupo],

eXEC ("$ NOMBRE HOMEDIR":

comando \u003d\u003e "/ bin / cp -r / etc / skel / home / $ nombre; / Chown -R $ Nombre: $ Grupo / Inicio / Nombre »

crea \u003d\u003e "/ casa / nombre",

requerir \u003d\u003e usuario [$ nombre],

Ahora para crear un nuevo cuenta Es suficiente para contactar a User_Homedir.

user_homedir ("Sergej":

grupo \u003d\u003e "Sergej",

fullname \u003d\u003e "Sergej Jaremchuk",

ingroups \u003d\u003e ["Medios", "Admin]

Por separado, hay descripciones de los nodos (nodo) que apoyan la herencia, así como las clases. Cuando conecte el cliente al servidor de títeres, se verá los soportes de nodo y se emiten la configuración específica para esta computadora. Para describir todos los demás sistemas, puede usar el valor predeterminado del nodo. La descripción de todos los tipos se proporciona en el documento "Tipo de referencia" con el que necesita familiarizarse en cualquier caso, al menos para comprender todas las características del idioma títere. diferentes tipos Permitido ejecutar los comandos especificados, incluso cuando realizan ciertas condiciones (por ejemplo, cambiando el archivo de configuración), trabaje con Cron, credenciales y grupos de usuarios, computadoras, recursos de montaje, servicios de inicio y detención, instalación, actualización y eliminación de paquetes, trabaje con Claves SSH, zonas de Solaris y así sucesivamente. Esto es lo simple que se puede hacer para actualizar la lista de paquetes en las distribuciones utilizando el APT, diariamente entre 2 y 4 horas.

horario (diario:

periodo \u003d\u003e diario

rango \u003d\u003e

eXEC ("/ usr / bin / apt-get update":

horario \u003d\u003e diario

Para ese período, cada sistema se actualizará solo una vez, después de lo cual la tarea se considera ejecutada y se eliminará de computadora cliente. El lenguaje de títeres apoya otras estructuras familiares: condiciones, funciones, matrices, comentarios y similares.

Instalando títere.

Puppet requerirá Ruby (\u003e \u003d 1.8.1) con soporte openssl y bibliotecas XMLRPC, así como la biblioteca más rápida [ http://reductivelabs.com/projects/facter.]. En el repositorio ubuntu 7.04, que se usó durante una instalación de prueba, el paquete de cachorros ya está habilitado.

$ sudo apt-cache buscar títere

marioneta - Gestión centralizada de configuración para redes.

puppetmaster - Configuración centralizada Control de manías Daemon

Al instalar, se instalarán todas las dependencias necesarias: FACTER LIBOPENSSL-RUBY LIBXMLRPC-RUBY.

$ sudo apt-get install Puppet Puppetmaster

Compruebe las bibliotecas de Ruby por el comando.

$ Ruby -ropenssl -e "PUT PUTS: YEP"

~ $ ruby \u200b\u200b-rxmlrpc / cliente -e "pone: Sí"

Si no se reciben errores, entonces todo lo que necesita ya está incluido. Los archivos en los que se describen en la configuración deseada del sistema en la terminología de títeres se llaman manifiestos. Al comenzar, el demonio intenta leer el archivo /etc/puppet/manifests/site.pp, con su ausencia le da un mensaje de advertencia. Al probar, puede especificar un demonio para trabajar en el modo AUTON en el que se requiere el manifiesto

$ sudo / usr / bin / puppetmasterd -nonoces

Si es necesario, otros archivos se pueden conectar a Site.pp si puede conectarse. Para la ejecución de la prueba a este archivo, puede aplicar la instrucción más simple.

archivo ("/ etc / sudoers":

propietario \u003d\u003e raíz,

grupo \u003d\u003e raíz,

Todos los archivos de configuración como servidores y clientes están ubicados en / etc / títere. El archivo FileServerver.conf Acerca de los que hablamos anteriormente no se requiere y se usa solo cuando el títere funcionará como un servidor de archivos. Ubuntu En este archivo, se exporta el subdirectorio / etc / títere / archivos. En el subdirectorio SSL, los certificados y las claves se utilizarán para encriptar las conexiones de los clientes. Las teclas se crean automáticamente cuando comienza a Puppetmasterd, puede crearlos manualmente.

$ sudo / usr / bin / puppetmasterd -mkusers.

Los archivos Puppetd.conf y Puppetmasterd.conf son similares. Incluyen algunos parámetros de los demonios en el sistema clásico y del servidor. El archivo cliente es diferente solo por la presencia. parámetro del servidorseñalando a una computadora en la que se está ejecutando Puppetmasterd.

servidor \u003d grinder.com.

logdir \u003d / var / log / títere

vardir \u003d / var / lib / títere

rundir \u003d / var / run

# Enviar servidor de informes

Para no imprimir todo manualmente, puede crear una plantilla con el propio Puppetd.

$ Puppetd -GENCONFIG\u003e /etc/puppet/puppetd.conf

De manera similar, puede crear tanto sitio.pp en el servidor.

$ Puppetd -GenNifest\u003e /etc/puppet/manifests/site.pp

Otro archivo Tagmail.conf le permite especificar las direcciones postales a las que se enviarán los informes. En el caso más simple, puedes usar una línea.

todas: [Correo electrónico protegido]

Los archivos de configuración no son suficientes para que el cliente pueda conectarse al servidor. Para hacer esto, todavía necesita firmar certificados. Primero, para que el servidor se presente sobre la nueva computadora en el sistema cliente, ingresamos el comando:

$ sudo puppetd -server grinder.com -waitforcert 60 -test

info: Certificado de solicitud

advertencia: el certificado de pares no será verificado en esta sesión SSL

aVISO: No recibió el certificado

Si se emite otra cadena, debe verificar la operación del servidor.

$ PS AUX | Grep Puppet.

puppet 5779 0.0 1.4 27764 15404? SSL 21:49 0:00 RUBY / USR / SBIN / Puppetmasterd

El firewall debe permitir conexiones al puerto 8140.

En el servidor obtenemos una lista de certificados que necesitan firmas.

$ sudo puppetca -list

nomad.grinder.com.

Y suscribirse un certificado de cliente.

$ sudo puppetca -sign nomad.grinder.com

Ahora el cliente puede conectarse libremente al servidor y recibir la configuración.

Desafortunadamente, todas las posibilidades de títere dentro del artículo se muestran simplemente no posibles. Pero a medida que vea esta herramienta funcional y flexible que le permite resolver la mayoría de las tareas en la administración simultánea de un gran número de sistemas. Si tiene que configurar varios sistemas por naturaleza. Y el proyecto más importante logró recolectar hasta ahora una comunidad pequeña pero constantemente en crecimiento. Por lo tanto, esperamos que una buena idea no le dé a morir o salir.

No hace mucho tiempo en las páginas de la revista, vimos el sistema. control remoto Configuración de máquinas CFENGINE UNIX, que facilita enormemente la vida. administrador de sistema Al automatizar acciones para configurar una pluralidad de nodos de red. Pero no importa cuán conveniente, Cfengine, tiene muchos inconvenientes, que está privado de un sistema llamado títere.

Imagínese como administrador del sistema responsable de mantener el rendimiento de cientos y otras máquinas que ejecutan sistemas operativos como UNIX. Cada uno de ellos requiere la configuración, actualizaciones periódicas y monitoreo, mientras que se supone que muchas de ellas realizan funciones similares.

Dos tercios son estaciones de trabajo, varios enrutadores más, el resto son varios servidores web y almacenes de datos. Pregunta: ¿Cómo manejar esta economía? La respuesta más fácil es fácil de conectar a cada una de ellas utilizando SSH y hacer los cambios necesarios. Sin embargo, este método tiene dos problemas. Primero, es muy laborioso. En segundo lugar, el administrador tendrá constantemente para realizar muchas acciones monótonas (por ejemplo, para actualizar a OpenOffice.org en todas las estaciones de trabajo, tendrá que completar los mismos comandos de varias decenas de veces). Puede intentar evitar este problema escribiendo varios scripts que se conectarán a cada máquina y realizarán comandos pre-prescritos. Pero aquí estás esperando problemas.

Los scripts tendrán que modificar constantemente para ajustarlos a cada tarea; En los scripts deberá tener en cuenta la diferencia en los sistemas operativos y las versiones, tendrán que depurarlos antes de aplicar a las máquinas de trabajo. En general, no en Commilfo. La respuesta correcta es usar los llamados sistemas de control remoto para configuraciones, cuyos representantes más conocidos son sistemas abiertos Cfengine y títere. Dichos sistemas asumen todas las responsabilidades para llevar la configuración de las máquinas a escuchando, exigente del administrador, solo una descripción del estado final del sistema en un idioma especial (por ejemplo, una descripción de qué paquetes deben instalarse en el sistema operativo, qué filas debe agregarse a los archivos de configuración, qué comandos deben completarse , etc.). Después de eso, todos los nodos recibirán información sobre el estado requerido desde el servidor y se llevará a cabo la autoconfiguración del sistema. Gracias a este mecanismo, las nuevas máquinas pueden configurarse completamente sin intervención humana, y las existentes se reconfiguran agregando solo algunas filas a la descripción del estado.

¿Marioneta?

Ya hemos dedicado todo un artículo por el sistema CFENGINE, por lo que hoy nos centraremos en el sistema de títeres, que se puede llamar su seguidor ideológico. La títere fue desarrollada por Luke Kanies, que estaba cansada de las restricciones de CFENGINE y decidió crear su análogo más perfecto desde cero. Si ya ha usado CFENfine, probablemente encontrará un sistema más conveniente y poderoso de títeres. El idioma de la descripción del estado títere es de nivel superior y flexible, de modo que el administrador no necesita tener cuidado de las cosas como redactar las reglas individuales para cada tipo de sistema operativo o descripción detallada Realizando acciones triviales. Puppet le permite a su Sr. se enfoca en lo que quiere hacer, en lugar de hacerlo (por ejemplo, para establecer un paquete específico a cualquiera de los sistemas de sistema operativo compatible, es suficiente escribir una "instalación de este programa", literalmente. En lugar de describir los comandos, necesarios para su instalación). Títere escrito en lenguaje Ruby, por lo que es suficiente para adaptarse a la tarea específica y ampliar la funcionalidad (se proporciona un sistema de complemento flexible).

Además, en contraste con el modelo de CFEngine, que en realidad gira alrededor de una persona, se ha formado una gran comunidad entusiasta en torno a la marioneta, que hacen que el refinamiento al código se comparan mediante los ejemplos de configuración y la documentación de escritura.

En general, el títere da la impresión de un sistema más moderno y bien pensado con un buen diseño. Al igual que CFENGINE, es compatible con casi todos los sistemas operativos modernos de unix (incluidos MacOS X), y también pueden funcionar en el entorno de Cygwin sobre Windows. La lista de sus dependencias incluye solo el intérprete de rubí y la herramienta de factor, por lo que no debería haber problemas con la instalación (la justicia vale la pena decir que la lista de dependencias de CFENGINE también es más corta).

Instalación

Al igual que CFENGNE, Puppet es un sistema cliente-servidor que consiste en un servidor de control y nodos subordinados. El servidor almacena la descripción de los estados finales de los nodos (que en términos de títere se llama manifiesto) y está esperando su conexión. Cada media hora (predeterminada), el cliente se conecta al servidor, recibe una descripción del estado final de él, lo verifica con la corriente y, si es y / o el estado descrito cambiado, reforzando el sistema, después de lo cual se duerme . La comunicación se realiza a través de un canal cifrado, por lo que se excluyen los ataques en función de la descripción del estado La sustitución (pero si la galleta capturará el servidor, todos los nodos estarán bajo su control).

El títere está incluido en el repositorio de todas las distribuciones populares, por lo que su instalación no debe causar dificultades. Por ejemplo, en Debian / Ubuntu, el cliente de títeres se puede instalar de la siguiente manera:

$ sudo apt-get install typet

Un servidor - Entonces:

$ sudo apt-get install Puppet Puppetmaster

Los archivos de configuración del cliente y del servidor se almacenan en el directorio / etc / títere. El más importante de ellos es el archivo /etc/puppet/manifests/site.pp que contiene manifiesto.

Almacena la descripción del estado y debe existir solo en el servidor. Para la conveniencia de la depuración. configuración simple:


Clase passwd (
Archivo ("/ etc / passwd":
Propietario \u003d\u003e raíz,
Grupo \u003d\u003e raíz,
MODE \u003d\u003e 644,
}
}
Nodo predeterminado (
Incluir PASSWD.
}

Estas filas describen el estado en el que el propietario del propietario / etc / passwd debe ser root, y los derechos de acceso a 644 se establecen en 644. En la siguiente sección, consideraremos el formato del archivo manifiesto. El segundo archivo más importante se llama /etc/puppet/puppet.conf. Establece la configuración del servidor y al cliente, por lo que debe estar presente en todas las máquinas organizadas en la red de títeres. En Ubuntu, este archivo contiene el mínimo necesario y, en la mayoría de los casos, configuraciones suficientes. A continuación se dan con los comentarios:

# Vi /etc/puppet/puppet.conf.
# Formas estándar de catálogos
Logdir \u003d / var / log / títere
Vardir \u003d / var / lib / títere
Ssldir \u003d / var / lib / títere / SSL
Rundir \u003d / var / run / títere
# Facter de la herramienta de ubicación,
# Se utiliza para obtener información sobre el sistema operativo.
FACTPATH \u200b\u200b\u003d $ VARDIR / LIB / FETTER
# Sincronizar los complementos
# (complementos instalados en el servidor: se copian a los clientes)
Pluginsync \u003d verdadero.
# Catálogo con plantillas (lea sobre ellos a continuación)
TemplateDir \u003d $ Confdir / plantillas
# Sincronización con etc.
# (quién sabe, entenderá, el resto no necesita)
prerrun_command \u003d / etc / títere / etc lea-commitrip
POSTRUN_COMMAND \u003d / etc / títere / etc.eper-cometerpost

El archivo de configuración puede incluir un gran número de Diferentes opciones cuya información se puede obtener generando una configuración predeterminada:

$ sudo puppetmasterd-genconfig\u003e / etc / títere /
Puppetd.conf.default.

La configuración de cliente predeterminada se genera usando otro comando:

$ sudo tuppet -genconfig\u003e /etc/puppet/puppetd.conf.default

Los archivos Fileserver.conf y auth.conf se utilizan para configurar el servidor de archivos (lea esto en la sección del servidor de archivos) y la autenticación. Mientras no tienen sentido. Al final de la configuración, el servidor de títeres debe reiniciarse:

$ sudo /etc/init.d/puppetmaster reiniciar

Después de eso, estará listo para aceptar solicitudes de clientes. Sin embargo, sin un certificado firmado, ningún cliente puede obtener un manifiesto del servidor y configurar la máquina.

Por lo tanto, debemos ejecutar clientes de títeres en modo de prueba para que puedan transferir sus certificados al servidor de firmas (por cierto, simultáneamente en todas las máquinas, se puede hacer usando la herramienta Shmux):

$ sudo puppetd -server typet server --verbose -test

Regresamos al servidor y realicemos una lista de certificados listos para las firmas:

$ sudo puppetca - lista

Elija un host de la lista y firme el certificado:

$ sudo puppetca --sign nomad.grinder.com

O suscribimos todo a la vez:

$ sudo Puppetca --Sign -

Ahora puede ejecutar clientes en modo de combate. Pero primero debe registrar el nombre del servidor de títeres en el archivo de configuración (por defecto, su nombre es solo títere):

$ sudo su.
# Echo "" \u003e\u003e /etc/puppet/puppet.conf
# Echo "servidor \u003d puppet-server.com" \u003e\u003e /etc/puppet/puppet.conf
# SALIDA.

Ejecutar clientes:

$ sudo /etc/init.d/puppet start

Estado Descripción Idioma

Como se mencionó anteriormente, Puppet usa su propio idioma de la descripción del idioma del estado final del sistema operativo, con el cual el SYSADMIN indica cómo se deben administrar los componentes del sistema operativo para lograr el estado deseado. Este es un lenguaje bastante complicado, que, sin embargo, es mucho más fácil que cualquier lenguaje de programación. Si al menos está familiarizado con el lenguaje de script de Bash, puede entender fácilmente el idioma títere. El elemento clave del idioma son los recursos con los que la descripción se basa en cómo se deben dar uno de los componentes del sistema operativo. Por ejemplo, el siguiente recurso más simple describe el estado deseado del archivo / etc / passwd:

# Vi /etc/puppet/manifests/site.pp.
Archivo ("/ etc / passwd":
Propietario \u003d\u003e "root"
}

Aquí el archivo es un tipo de recurso. Hay varias docenas de ellos, que van desde recursos que administran archivos, como en este ejemplo, y terminan con paquetes y servicios. Fila / etc / passwd - Nombre de recursos.

En el caso del tipo de archivo, el nombre coincide con la ruta al archivo, sin embargo, en algunos otros tipos, el nombre puede ser arbitrario. La fila del propietario \u003d\u003e "root" describe la instalación del atributo del propietario al valor de la raíz, es decir, dice que el propietario (propietario) del archivo especificado debe ser un administrador.

Cada tipo de recursos tiene su propio conjunto de atributos disponibles para modificar, además, hay atributos meta especiales que se pueden usar en cualquier recurso. Una de las cualidades importantes de los recursos es la posibilidad de referencia a ellos. Esto se puede utilizar para formar cadenas de dependencia. La siguiente entrada crea un recurso / etc / grupo que depende del recurso / etc / passwd (las dependencias se especifican utilizando el atributo meta requerido):

# Vi /etc/puppet/manifests/site.pp.
Archivo ("/ etc / grupo":
Requerir \u003d\u003e Archivo ["/ etc / passwd"],
Propietario \u003d\u003e "raíz",
}

Esto significa que el recurso / etc / grupo se puede configurar (dado a lo anterior) solo si el recurso / etc / passwd está configurado. Los recursos se pueden agrupar en una colección de recursos llamados clases. Es necesario para combinar un significado similar y tipo de tareas realizadas recursos en un recurso abstracto. Por ejemplo, por conveniencia, podríamos combinar la instalación y el lanzamiento del servidor web de NGINX a un recurso abstracto del mismo nombre:

# Vi /etc/puppet/manifests/site.pp.
Clase nginx (
Paquete ("Nginx":
Asegurarse \u003d\u003e instalado
}
Servicio ("Nginx":
Asegurarse \u003d\u003e Correr,
Requerir \u003d\u003e Paquete ["nginx"],
}
}

Aquí, el tipo de recurso del paquete se usa para instalar el paquete NGINX en el sistema, y \u200b\u200bel servicio es para iniciar el servicio del mismo nombre. Usando Requerido, forzamos al sistema a iniciar el servicio solo si el paquete se ha instalado correctamente. La conveniencia de las clases es que también se pueden incluir dependiendo de:

# Vi /etc/puppet/manifests/site.pp.
Servicio ("Squid":
Asegurarse \u003d\u003e Correr,
Requiere \u003d\u003e clase ["nginx"],
}

Al igual que en los idiomas reales de OOP, las clases pueden heredarse entre sí y anular los atributos:

# Vi /etc/puppet/manifests/site.pp.
Clase passwd (
Archivo ("/ etc / passwd":
Propietario \u003d\u003e "raíz",
grupo \u003d\u003e "raíz",
}
}
Clase PassWD-BSD hereda PASSWD (
Archivo ["/ etc / passwd"] (grupo \u003d\u003e "rueda")
}

Aquí, la clase PASSWD-BSD se hereda de PASSWD para anular el atributo de recursos / etc / passwd del grupo (en sistemas BSD / etc / PASSWD, pertenece al grupo de ruedas, por lo que hemos creado una clase separada para dichos sistemas). Posteriormente consideramos la forma más correcta y obvia de seleccionar valores alternativos de atributos utilizando condiciones.

Las variables son uno de los componentes inalienables de cualquier lenguaje de programación, y en el idioma títere, también tienen. Las variables comienzan desde $ marca y pueden contener cualquier número, cadena o valor booleano (verdadero, falso):

$ Want_apache \u003d verdadero
$ Apache_version \u003d "2.2.14"

Una de las propiedades más poderosas del lenguaje títere asociado con las variables es la integración con una herramienta para obtener información sobre la máquina FETTER. Esta utilidad devuelve toda la información específica a la máquina, en forma de pares de "valor clave", que en títere se transforman en las variables del mismo nombre. Junto con las instrucciones condicionales del idioma títere, se pueden usar para alterar los atributos de recursos según las propiedades de la máquina.

Por ejemplo, la clase PASSWD descrita anteriormente se puede reescribir fácilmente para seleccionar automáticamente el atributo dependiendo del tipo de sistema operativo (ya no se necesita la clase):

# Vi /etc/puppet/manifests/site.pp.
Archivo ("/ etc / passwd":
Propietario \u003d\u003e "raíz",
Grupo \u003d\u003e $ kernel? (
Linux \u003d\u003e "root",
FreeBSD \u003d\u003e "Rueda",
},
}

Dependiendo de qué sistema operativo se analizará por este fragmento del manifiesto, el valor del atributo del grupo será la raíz o la rueda. Además del operador condicional, el idioma títere admite el operador de selección de casos, que se puede usar para crear uno u otro recurso según el valor de la variable:

# Vi /etc/puppet/manifests/site.pp.
Caso $ Operatingsystem (
RedHat: (Servicio ("httpd": asegúrese \u003d\u003e ejecutando))
Debian: (Servicio ("Apache": Asegurarse \u003d\u003e Correr))
Predeterminado: (Servicio ("Apache2": Asegúrese \u003d\u003e
Corriendo))
}

Este código define varias opciones de recursos para el tipo de servicio, dependiendo del sistema operativo (los nombres de servicio en varias distribuciones de Linux pueden diferir, por lo que qué tipo de servicio debe ejecutar títere, es necesario especificar individualmente para cada uno de ellos).

La variante predeterminada se usa si el valor de la variable no corresponde a ninguna de las opciones anteriores. Además de los tipos de recursos, el paquete y el servicio de recursos anteriormente discutidos, el títere apoya a un gran número de otros, incluidos los creados por los desarrolladores de tipo de recurso de terceros. Su descripción detallada, incluidos ejemplos, atributos y características compatibles, puede encontrar en la documentación oficial - http://docs.puppetlabs.com/references/stable/type.html. A continuación se muestra una lista y una breve descripción de los más utilizados:

Tipos de recursos populares populares

  • cron - Gestión de empleos de Cron
  • eXEC - Lanzamiento de scripts y equipos.
  • archivo - Gestión de archivos
  • fileBucket - archivos de copia de seguridad
  • grupo - Gestión del Grupo
  • host - Administración de registros en el archivo / etc / hosts
  • interfaz - Configuración de las interfaces de red
  • sistemas de archivo de montaje en montaje
  • notificar: enviando un mensaje al archivo de registro de títeres
  • paquete - Gestión de paquetes
  • servicio - Servicios de Administración
  • sshkey - SSH Keys Management
  • tidy - Eliminar archivos dependiendo de las condiciones
  • usuario - Administración de usuarios
  • zonas - Gestión de Zonas Solaris

El segundo después de los recursos es la importancia del lenguaje títere, estos son nodos (nodos). Con su ayuda, el administrador puede describir cuáles u otros recursos y clases deben aplicarse a qué máquinas. En otras palabras, esta es la forma de especificar una configuración individual para cada una de las máquinas que participan en la red de títeres. El ejemplo más simple del nodo se da al comienzo del artículo en la sección "Instalación":

# Vi /etc/puppet/manifests/site.pp.
Nodo predeterminado (
Incluir PASSWD.
}

Este es el nodo predeterminado predeterminado, que incluye el recurso / clase passwd. Por defecto significa "todos los otros nodos", por lo tanto, el recurso / clase passwd, definido en algún lugar anterior, se configurará en cada uno de ellos. Incluir palabras clave aquí se usa para su conveniencia, de hecho, todas las clases y recursos se pueden describir directamente en la descripción del sitio, pero no se recomienda hacerlo. Además de predeterminado, puede especificar el nombre de red de la máquina en el nombre de host (entonces todos los recursos descritos en el nodo se configurarán solo en esta máquina), o un nombre arbitrario (entonces este nodo puede ser heredado por otro nodo) . Para entender cómo funciona todo en conjunto con clases y recursos, considere un ejemplo de un manifiesto de títeres listo que se usa para configurar dos máquinas de red (servidor web y servidor NTP):

# Vi /etc/puppet/manifests/site.pp.
# Instalación y inicio del servidor SSH
Clase SSHD (
Paquete (OpenSSH-Server: Asegurarse \u003d\u003e Instalado)
Servicio (SSHD:
Nombre \u003d\u003e $ Operatingsystem? (
Fedora \u003d\u003e "SSHD",
Debian \u003d\u003e "ssh",
Predeterminado \u003d\u003e "SSHD",
},
Habilitar \u003d\u003e True,
Asegurarse \u003d\u003e Correr,
}
}
# Instalación y inicio Apache
Clase httpd (
Paquete (httpd: essure \u003d\u003e instalado)
Servicio (httpd:
Habilitar \u003d\u003e True,
Asegurarse \u003d\u003e Correr,
}
}
# Instalación y inicio del servidor NTP
Clase NTPD (
Paquete (NTP-Server: Asegurarse \u003d\u003e Instalado)
Servicio (
NTP-Server:
Habilitar \u003d\u003e True,
Asegurarse \u003d\u003e Correr,
}
}
# Nudo base, utilizado solo como el padre de todos los demás
Base de nodos (
Incluir sshd.
}
# Nodo en el que se ubicará el servidor web
Nodo web.server.com hereda la base (
Inversión httpd.
}
# Nodo del servidor NTP
Nodo ntp.server.com hereda la base (
Incluir NTPD.
}

Esta simple configuración hace mucha configuración: conduce a la instalación y el lanzamiento de Apache en la máquina con la dirección web.server.com y la instalación y el lanzamiento del servidor NTP en automóvil. ntp.server.com.. Además, ambas máquinas instalan un servidor SSH. Dicha configuración apenas está dispuesta al menos a un administrador; Tendrá que finalizarse seriamente para enseñar los servidores de configuración correctamente, recibir configuraciones nuevas y otros archivos del encabezado de títeres.

Sin embargo, claramente muestra el poder del títere. Con la ayuda de una configuración simple, hicimos para que las máquinas en sí mismas instalen e inicien el software necesario y lo respaldan en las condiciones de trabajo (si el servidor cae, los títeres se revalificarán para llevar el sistema al estado deseado).

Servidor de archivos.

Muchas tareas administración remota No se puede resolver sin copiar archivos adicionales en máquinas. Puede ser configuraciones pre-preparadas, páginas web para Apache, paquetes que faltan en el repositorio oficial, y mucho más. Para facilitar el proceso de transferencia de estos archivos a los nodos remotos, Puppet incluye un servidor de archivos.

Las configuraciones del servidor de archivos se almacenan en el archivo /etc/puppet/fileserver.conf. Para obligar a los títeres para dar a los clientes el contenido de un directorio específico, debe poner varias líneas en él:

# Vi /etc/puppet/fileserver.conf.
PATH \u003d / VAR / Puppet / Archivos
Permitir * .server.com.

Estas dos líneas indican que el directorio / var / títere / archivos debe ser accesible para todos los hosts del dominio Server.com. Además, podemos especificar el nombre de dominio completo de la máquina permitida o su dirección IP, así como cortar la Directiva denegada. Después de eso, cualquier archivo de este directorio se puede mover al cliente utilizando el recurso de archivo. Por ejemplo:

# Vi /etc/puppet/manifests/site.pp.
Archivo ("/etc/httpd/conf/httpd.conf":
Fuente \u003d\u003e "títere: //httpd/httpd.conf",
MODE \u003d\u003e 644,
}

El archivo httpd.conf ubicado en el servidor en el directorio / var / títere / archivos / httpd se copiará en la máquina de destino en la ruta especificada en el nombre del recurso.

conclusiones

En este artículo, miramos una parte muy pequeña de las características de los títeres. De hecho, este es un sistema integral, completamente descrito solo en las páginas del libro. Al mismo tiempo, el títere es muy simple en la configuración y acompañamiento, especialmente porque puede encontrar muchos ejemplos de su configuración.

Información

  • Puppet utiliza el protocolo HTTP, por lo que para aumentar el rendimiento puede ejecutar un servidor web.
  • Puppet se puede utilizar para la autoconfiguración y mantener una máquina local.
  • Combinando títere, instalación de red Las imágenes de instalación de OS (instalación de PXE-install) y autoindedor, puede crear una red de máquinas completamente autocardurable, para desplegar cuales es suficiente para ejecutar un comando.
  • Puppet usa muchas empresas grandes en su trabajo, como Google, Project Fedora, Universidad de Stanford, Red Hat, Siemens IT Solution y SugarCRM.

Enlaces.

  • http://docs.puppetlabs.com - Documentación de títeres
  • http://docs.puppetlabs.com/guides/language_tutorial.html - descripción completa del idioma títere
  • http://docs.puppetlabs.com/references/stable/type.html - Tipos de recursos

Cuando el número de servidores que administra menos de diez rara vez se pregunta sobre su gestión centralizada, es posible que esto no sea necesario. Cuando los servidores docenas, el control centralizado de software y configuraciones es extremadamente útil. Cuando los servidores son cientos y miles, es vital. Hay muchos de estos programas, por ejemplo: chef, cfengine, títere ... es el último y se discutirá en esta entrada.

La títere se considera una de las mejores soluciones de esta manera. Utiliza compañías como Google, Citrix y Red Hat. Esta es una aplicación de cliente-servidor escrita en el lenguaje de programación de Ruby, que se extiende a dos versiones:

  • Puppet Open Source - Totalmente versión gratuita
  • Puppet Enterprise es una configuración gratuita a 10 servidores, necesita comprar licencias.

Considere la instalación del servidor y el agente de código abierto de títeres, que está presente en los paquetes de la mayoría de las distribuciones modernas. Además, iremos a través de Ubuntu 12.04 Pangolin precisos.

Se llama parte del servidor de títeres titiritero, comience a instalarlo:

: ~ # Apt-get install Puppetmaster

Y ahora el cliente:

: ~ # Apt-obtener instalar títere

En el archivo de configuración del cliente /etc/puppet/puppet.conf. Debe informar sobre el servidor agregando la siguiente sección:

Server \u003d Puppet.Local Report \u003d True Pluginsync \u003d False

En la etapa inicial, Pluginsync, es mejor desactivar.

Vamos a iniciar el cliente títere para crear una solicitud de certificado:

: ~ # Puppetd -verbose - Información de la prueba: Creación de una nueva tecla SSL para Linux.Local Información: Creación de una nueva solicitud de certificado SSL para Linux.Local Información: Solicitud de certificado Huella digital (MD5): E5: E5: Certificado EA: AC : 5b: 22: 9a: BA: 42: B8: A1: 63: 9E: 1F: 1F: 23: 51 Saliendo; Ningún certificado encontrado y wayforcert está deshabilitado

En el servidor es necesario verificar que la solicitud de certificado se obtenga y, de ser así, escribimos el certificado:

: ~ # Puppetca - Lista "Linux.Local" (E5: EA: AC: 5B: 22: 9A: BA: 42: B8: A1: 63: 9E: 1F: 1F: 23: 51): ~ # Puppetca - -Sign Linux.Local Aviso: Solicitud de certificado firmado para Linux.Local Aviso: Remover Archivo Puppet :: SSL :: CertificateRequest Linux.Local en "/var/lib/puppet/ssl/ca/requests/linux.local.pem"

Repita el paso anterior en el cliente:

: ~ # Puppetd --verbose - Información: Certificado de almacenamiento en caché para Linux.Local Información: Recuperación de la información del complemento: Caching Certificate_Revocation_list para CA Información: Catálogo de caché para Linux.Local Información: Aplicando la versión de configuración "1356278451" Información: Creación de archivos de estado / VAR / LIB / PURPETE / ESTADO / ESTADO.YAMP AVISO: Catálogo terminado Ejecutar en 0.02 segundos

Genial, todo funciona. Ve a la creación del primer manifiesto. Manifiesto, se describen en un lenguaje declarativo especial. Inmediatamente nos encargaremos de los buenos, usaremos la estructura y las clases modulares. Por ejemplo, escribimos un módulo que mantendrá el archivo actualizado. / etc / hosts En todos nuestros servidores.

Compruebe dónde está buscando marionetas:

: ~ # Puppet Aplicar --configprint Modulepath / etc / Puppet / Módulos: / usr / share / títere / módulos

Crear directorios para su módulo.

: ~ # # CD / etc / títere / módulos: ~ # MKDIR hosts; Hosts de CD; Manifiesta mkdir; Se manifiesta CD.

El primer manifiesto, él es el archivo principal del módulo, debe llamarse init.pp.

Hosts de clase (# Puppet.Local Host ("Puppet.Local": Asegurarse \u003d\u003e "Presente", Target \u003d\u003e "/ etc / hosts", IP \u003d\u003e "192.168.0.1", host_aliases \u003d\u003e "títere",) Linux . HOSTLOCAL HOST ("LINUX.LOCAL": Asegúrese \u003d\u003e "Presente", Target \u003d\u003e "/ etc / hosts", IP \u003d\u003e "192.168.0.2", Host_aliases \u003d\u003e "Linux",)))

De forma predeterminada, Puppet está buscando un archivo. /etc/puppet/manifests/site.pp. Para descargar la configuración, déjela al siguiente formulario:

Nodo predeterminado (incluye hosts)

Comprobando el manifiesto en el servidor:

: ~ # # Puppet apply --verbose /etc/puppet/manifests/site.pp info: Aplicación de la versión de configuración "1356281036" AVISO: / Etapa // Host / Asegurarse: creado Información: FileBucket Agregar (MD5) Aviso: / Etapa // Host / Asegurarse: Aviso creado: Catálogo terminado Ejecutar en 0.03 segundos

En el cliente:

: ~ # LL / etc / hosts rw-r - r-- 1 raíz raíz 290 dic 16 19:10 / etc / hosts: ~ # Puppetd - Ferbose - Test Info: Catálogo de caché para Linux.Local Información: Aplicación de configuración Versión "1356283380" Info: FileBucket Agregar aviso: / Etapa / hosts / host / Asegúrese de: Aviso creado: Aviso creado: Catálogo terminado Ejecutar en 0.04 segundos: ~ # LL / etc / hosts -RW-R - R-- 1 raíz raíz 551 23 de diciembre 20:43 / etc / hosts

Después de que nos aseguramos de que todo funcione, permita que el servicio comience el servicio, en / etc / default / títere Cambio:

# Iniciar títere en la bota? Inicio \u003d Sí.

Ejecutar un servicio

: ~ # Servicio de inicio de títere

Tuppet será entrevistado por un servidor de Puppetmaster cada 30 minutos para cambiar la configuración y, si es necesario, realizará la configuración del sistema adecuada.

Sergey Yaremchuk

Configuración centralizada de los sistemas UNIX usando títere.

Administrar una gran cantidad de sistemas UNIX no se pueden llamar cómodos. Para cambiar un parámetro, el administrador tiene que acceder a cada máquina, los scripts solo pueden ayudar parcialmente, y no en todas las situaciones.

Se debe reconocer que los administradores de la red de Windows todavía están en una posición más ventajosa. Es suficiente cambiar la configuración de las políticas de grupo, y después de un tiempo todas las computadoras de la red, incluso con un sistema operativo recién instalado, se "reconocerán" sobre la innovación si son, por supuesto, la preocupación. Mirando a su alrededor por un largo período de desarrollo de UNIX, se puede observar que nada como eso no encajaba. Hay soluciones como Kickstart, que ayudan con la instalación principal del sistema operativo, pero el acabado adicional requerirá un esfuerzo considerable. Soluciones comerciales, como Bladelogic y OPSWare, el problema de la automatización de la configuración se resuelve solo en parte, su principal ventaja es la presencia de una interfaz gráfica, y solo las grandes organizaciones pueden adquirirlas. Por supuesto, hay proyectos que ofrecen soluciones gratuitas, pero para todo el tiempo de su existencia, no podían crear una comunidad grande. Por ejemplo, CFENGINE no es muy popular con la popularidad de los púlpiters, aunque, además de Linux, se puede usar en * BSD, Windows y Mac OS X. Quizás esté relacionado con la complejidad relativa en la creación de configuraciones. Las tareas positivas deben tener en cuenta las características de cada sistema específico y controlar manualmente la secuencia de acciones al ejecutar comandos. Es decir, el administrador debe recordar que para algunos sistemas es necesario escribir Adduser para otros: userAdd, tenga en cuenta la ubicación de los archivos en diferentes sistemas, etc. Este es un orden de magnitud complica el proceso de escritura de comandos, es muy difícil crear la configuración correcta del IR, y las configuraciones creadas se leen en algún momento casi poco realistas. A pesar de la licencia de GPL de Cfengine, de hecho, un proyecto de una persona que controla todos los cambios y no está muy interesada en construir una sociedad abierta. Como resultado, CFENGINE es bastante satisfactorio al desarrollador, y para los administradores restantes es más bien un exceso de dolor de cabeza. Para mejorar el CFENGINE, varias adiciones fueron creadas por desarrolladores de terceros, que a menudo empeoraban la situación. El autor de varios módulos de estos módulos a CFENGINE LUKE KANIES (Luke Kanies) Vitoga decidió desarrollar una herramienta similar, pero desprovista de muchas fallas de CFENGINE.

Características de la marioneta

Títere, como CFEngine, es un sistema de cliente-servidor que usa un declarativo, es decir, obligatorio ejecutar un idioma para describir las tareas y la biblioteca para sólidos. Los clientes periódicamente (de forma predeterminada cada 30 minutos) están conectados al servidor central y obtienen la última configuración. Si la configuración no coincide con el estado del sistema, se ejecutarán, si es necesario, el servidor se refiere a las operaciones de las operaciones. El servidor de mensajes puede guardar el software o el archivo, cree un programa de RRD, envíe al correo electrónico especificado. Los niveles adicionales de abstracción transaccional y de recursos proporcionan la máxima compatibilidad con la configuración y las aplicaciones soviéticas, lo que le permite centrarse en los objetos del sistema, sin preocuparse por las diferencias en la implementación y la descripción de los comandos detallados de los formatos de archivos. El administrador funciona solo con el tipo de objeto, el resto del títere se toma en sí mismo. Por lo tanto, el tipo de paquetes conoce aproximadamente 17 sistemas de lotes, que se reconocerán automáticamente sobre la base de la información sobre la versión de la distribución o el sistema, aunque, si es necesario, se puede agregar un administrador por lotes por la fuerza.

A diferencia de los scripts, que a menudo son imposibles de usar en otros sistemas, las configuraciones de títeres escritas por administradores de terceros trabajarán principalmente en cualquier otra red. El libro de cocina de títeres ya tiene tres docenas de recetas preparadas. Actualmente, títere apoya oficialmente los siguientes sistemas y servicios operativos: Debian, Redhat / Fedora, Solaris, SUSE, CENTOS, MAC OS X, OpenBSD, Gentoo y MySQL, LDAP.

Títere. Idioma

Para continuar, primero debe tratarse con los elementos principales y las capacidades de idioma. El lenguaje es uno de los puntos fuertes del títere. Con él, describe los recursos que el administrador planea administrar y acciones. A diferencia de la mayoría de estas soluciones, el idioma títere le permite simplificar la apelación a todos los recursos similares en cualquier sistema en un entorno heterogéneo. Una descripción de recursos, por regla general, consiste en un nombre, tipo y atributos. Por ejemplo, especifique el archivo / etc / passwd e instale sus atributos:

archivo ("/ etc / passwd":

Propietario \u003d\u003e raíz,

Grupo \u003d\u003e raíz,

MODE \u003d\u003e 644,

Ahora, los clientes, se conectan al servidor, copian el archivo / etc / passwd e instale los atributos especificados. En una regla, puede definir varios recursos a la vez, separándolos con un punto con una coma. ¿Y qué si el archivo de configuración utilizado en el servidor difiere del cliente o no se usa en absoluto? Por ejemplo, esta situación puede ocurrir cuando las conexiones VPN son ajustes. En este caso, debe especificar el archivo de directiva de origen. Aquí hay dos opciones, puede, como de costumbre especificar la ruta al archivo CCDRUG, además de usar los dos protocolos URI que se admiten: Archivo y títere. En el primer caso, se usa un enlace a un servidor NFS externo, se inicia un servicio similar a NFS en la segunda versión de títere, que exporta recursos. En este último caso, de forma predeterminada, la ruta se indica en relación con el directorio de la raíz de títeres / etc / títeres. Es decir, el títere de enlace: //server.domain.com/config/sshd_config se corresponderá al archivo / etc / tuppet / config / sshd_config. Puede anular este catálogo a la directiva FileBucket, aunque es más correcta usar la sección del mismo nombre en el archivo /etc/puppet/fileServer.conf. En este caso, puede restringir el acceso al servicio de solo direcciones sofisticadas. Por ejemplo, describimos la sección de configuración:

PATH / VAR / Puppet / Config

Permitir * .domain.com.

Permitir 127.0.0.1

Permitir 192.168.0. *

Permitir 192.168.1.0/224

Negar * .wireless.domain.com.

Y luego consulte esta sección al describir el recurso:

fuente \u003d\u003e "títere: //server.domain.com/config/sshd_config"

Antes de que el colon sea el nombre del recurso. En los casos más simples, simplemente puede especificar la ruta completa al archivo. En configuraciones más complejas, es mejor usar alias o variables. El alias se establece utilizando la Directiva de alias:

archivo ("/ etc / passwd":

Alias \u200b\u200b\u003d\u003e passwd

Otra opción para crear un seudónimo es adecuado en el caso cuando tenga que lidiar con diferentes sistemas operativos. Por ejemplo, cree un recurso que describa el archivo SSHD_CONFIG:

archivo (sshdconfig:

Nombre \u003d\u003e $ Operatingsystem? (

Solaris \u003d\u003e "/ usr / local / etc / ssh / sshd_config",

Predeterminado \u003d\u003e "/ etc / ssh / sshd_config"

En este ejemplo, enfrentamos la posibilidad de elección. Se especifica un archivo para Solaris por separado, se seleccionará el archivo / etc / ssh / sshd_config para todos los demás. Ahora puede ponerse en contacto con este recurso como SSHDCONFIG, dependiendo del sistema operativo, se seleccionará la ruta deseada. Por ejemplo, indicamos que si el demonio SSHD se inicia y recibe un nuevo archivo, debe reiniciar el servicio:

servicio (SSHD:

Asegúrate \u003d\u003e Verdadero,

Suscribirse \u003d\u003e archivo

Las variables se usan a menudo cuando se trabaja con los datos de usuario. Por ejemplo, describa la ubicación de los directorios del directorio de inicio:

$ Caseroot \u003d "/ home"

Ahora puede comunicarse con los archivos de un usuario específico como:

$ (Caseroot) / $ nombre

El nombre de la cuenta del usuario será sustituido en el parámetro de nombre de $. En algunos casos, es conveniente determinar el valor predeterminado para algún tipo. Por ejemplo, para el tipo EXEC, los directorios en los que debería ver que el archivo ejecutable se indica muy a menudo:

EXEC (ruta \u003d\u003e "/ usr / bin: / bin: / usr / sbin: / sbin")

En el caso de que necesite especificar varios archivos y directorios anidados, puede usar el parámetro Recurse:

archivo ("/etc/apache2/conf.d":

Fuente \u003d\u003e "títere: // Puppet: //server.domain.com/config/apache/conf.d",

Recurse \u003d\u003e "verdadero"

Varios recursos se pueden combinar en clases o definiciones. Las clases son la descripción completa del sistema o servicio y se utilizan para estar separados:

clase Linux (

Archivo (

"/ etc / passwd": ovner \u003d\u003e root, grupo \u003d\u003e raíz, modo \u003d\u003e 644;

"/ etc / shadow": ovner \u003d\u003e root, grupo \u003d\u003e raíz, modo \u003d\u003e 440

Al igual que en los idiomas orientados a objetos, las clases pueden ser anuladas. Por ejemplo, en el propietario del grupo FreeBSD de estos archivos es la rueda. Por lo tanto, no reescribir el recurso completamente, cree una nueva clase FreeBSD, que heredará a la clase Linux:

clase FreeBSD hereda Linux (

Archivo ["/ etc / passwd"] (grupo \u003d\u003e rueda);

Archivo ["/ etc / shadow"] (grupo \u003d\u003e rueda)

Para mayor comodidad, todas las clases se pueden realizar en un archivo separado para conectar la Directiva de inclusión. Las definiciones pueden tomar numerosos parámetros como argumentos, pero no admiten la herencia y se utilizan si necesita describir múltiples objetos utilizados. Por ejemplo, definimos el directorio de inicio de los usuarios y los comandos que necesita para crear una nueva cuenta:

define user_Homedir ($ Group, $ Fullname, $ Ingroups) (

Usuario ("$ nombre":

Asegurar \u003d\u003e presente

Comentario \u003d\u003e "$ fullname",

Gid \u003d\u003e "$ grupo",

Grupos \u003d\u003e $ ingrupos,

Membresía \u003d\u003e Mínimo,

Shell \u003d\u003e "/ bin / bash",

Inicio \u003d\u003e "/ / Inicio / Nombre",

Requerir \u003d\u003e Grupo [$ grupo],

EXEC ("$ NOMBRE HOMEDIR":

Comando \u003d\u003e "/ bin / cp -r / etc / skel / home / $ nombre; / bin / chown -r $ Nombre: $ Grupo / Inicio / Nombre"

Crea \u003d\u003e "/ casa / nombre",

Requerir \u003d\u003e usuario [$ nombre],

Ahora, para crear una nueva cuenta, es suficiente para contactar a User_Homedir:

user_homedir ("Sergej":

Grupo \u003d\u003e "Sergej",

Fullname \u003d\u003e "Sergej Jaremchuk",

Ingroups \u003d\u003e ["Medios", "Admin]

Describe por separado los nodos (nodo) que apoyan la herencia, así como las clases. Cuando el cliente está conectado al servidor de títeres, se seleccionará la sección del nodo correspondiente y se emite la configuración específica solo para esta computadora. Para describir todos los demás sistemas, puede usar el valor predeterminado del nodo. La descripción de todos los tipos se proporciona en el documento "Tipo de referencia" con el que debe leer en cualquier caso, al menos para comprender todas las características del idioma títere. Diferentes tipos permiten estos comandos, incluso cuando realizan ciertas condiciones (por ejemplo, cambiando el archivo de configuración), trabaje con Cron, credenciales y grupos de usuarios, computadoras, recursos montados, servicios de inicio y detención, instalación, actualización y eliminación de paquetes, trabaje con ssh Llaves, zonas de Solaris y así sucesivamente. Esto es lo simple que se puede hacer para actualizar la lista de paquetes en las distribuciones utilizando Apt, diariamente entre 2 y 4 horas:

horario (diario:

Periodo \u003d\u003e diario

Rango \u003d\u003e

eXEC ("/ usr / bin / apt-get update":

Horario \u003d\u003e diario

La actualización para ese período por cada sistema se realizará solo una vez, después de lo cual la tarea se considere ejecutada y se eliminará de la computadora cliente. El lenguaje de títeres apoya otras estructuras familiares: condiciones, funciones, matrices, comentarios y similares.

Instalando títere.

La títere requerirá Ruby (a partir de la versión 1.8.1 y superior) con la compatibilidad con OpenSSL y las bibliotecas XMLRPC, así como una biblioteca más rápida. En el repositorio Ubuntu 7.04, que se usó durante una instalación de prueba, el paquete de Puppy ya está habilitado:

$ sudo apt-cache buscar títere

~ $ ruby \u200b\u200b-rxmlrpc / cliente -e "pone: Sí"

sí.

Si no se reciben errores, significa que todo lo que necesita ya está incluido. Archivos que describen la configuración deseada del sistema, la terminología de títeres se llama manifiestos (manifiestos). Al comenzar, el demonio intenta leer el archivo /etc/puppet/manifests/site.pp, con su ausencia le da un mensaje de advertencia. Al probar, puede especificar un demonio para trabajar fuera de línea, en el que se requiere el manifiesto:

$ sudo / usr / bin / puppetmasterd --nonoces

Si es necesario, otros archivos se pueden conectar a Site.pp si puede conectarse. Para la ejecución de la prueba a este archivo, puede aplicar la instrucción más simple.

clase sudo (

Archivo ("/ etc / sudoers":

Propietario \u003d\u003e raíz,

Grupo \u003d\u003e raíz,

MODE \u003d\u003e 440,

nodo predeterminado (

Incluir sudo.

Todos los archivos de configuración, tanto los servidores como los clientes están ubicados en / etc / títere. El archivo FileServer.conf, que ya hemos hablado no es necesario y se usa solo cuando el títere funcionará también como un servidor de archivos. Ubuntu En este archivo, se exporta el subdirectorio / etc / títere / archivos. En el subdirectorio SSL, los certificados y las claves se utilizarán para encriptar las conexiones de los clientes. Las teclas se crean automáticamente cuando comienza a Puppetmasterd, puede crearlos manualmente con un comando:

$ sudo / usr / bin / puppetmasterd --mkusers

Los archivos Puppetd.conf y Puppetmasterd.conf son similares. Incluyen algunos parámetros de los demonios en el sistema cliente y el servidor. El archivo del cliente difiere solo por la presencia del parámetro del servidor que especifica la computadora en la que se está ejecutando Puppetmasterd:

servidor \u003d grinder.com.

logdir \u003d / var / log / títere

vardir \u003d / var / lib / títere

rundir \u003d / var / run

# Enviar servidor de informes

informe \u003d verdadero.

Para no imprimir todo manualmente, puede crear una plantilla con Puppetd:

$ Puppetd --Genconfig\u003e /etc/puppet/puppetd.conf

De manera similar, puede crear tanto sitio.pp en el servidor:

$ Puppetd --Ganifest\u003e /etc/puppet/manifests/site.pp

Otro archivo Tagmail.conf le permite especificar las direcciones postales a las que se enviarán los informes. En el caso más sencillo, puede usar una línea:

todas: [Correo electrónico protegido]

Los archivos de configuración no son suficientes para que el cliente pueda conectarse al servidor. Para hacer esto, todavía necesita firmar certificados.

Primero, que el servidor aprende sobre una computadora nueva, ingresamos el comando en el sistema cliente:

$ sudo puppetd --server grinder.com --waitforcert 60 -test

El firewall debe permitir conexiones al puerto 8140.

En el servidor, recibimos una lista de certificados que necesitan firmas:

$ sudo puppetca -list

nomad.grinder.com.

Y suscribirse un certificado de cliente:

$ sudo puppetca -sign nomad.grinder.com

Ahora el cliente puede conectarse libremente al servidor y recibir la configuración.

Desafortunadamente, todas las características del títere dentro del artículo son imposibles. Pero, como puede ver, esta es una herramienta funcional y flexible que le permite resolver la mayoría de las tareas en la administración simultánea de un gran número de sistemas. Y lo más importante, el proyecto logró recolectar hasta ahora una comunidad pequeña pero en constante crecimiento. Por lo tanto, esperamos que una buena idea no le dé a morir o salir.

¡Buena suerte!

  1. El sitio del proyecto BladeLogic - http://www.BladeLogic.com.
  2. Sitio de proyectos de Opsware - http://www.opsware.com.
  3. Sitio de proyecto CFENGINE - http://www.cfengine.org.
  4. Sitio del proyecto de títeres http://reductivelabs.com/projects/puppet.
  5. Puppet Cookbook - http://www.reductivelabs.com/trac/puppet/tagspuppet%2crecipe.
  6. Biblioteca más rápida -


¿Te gustó el artículo? Compártelo