¿Cómo pueden los pequeños aprender y usar efectivamente Puppet? [cerrado]

109

Hace seis meses, en nuestro proyecto sin fines de lucro, decidimos comenzar a migrar nuestra administración del sistema a un entorno controlado por Puppet porque esperamos que nuestro número de servidores crezca sustancialmente entre ahora y dentro de un año.

Desde que se tomó la decisión, nuestros técnicos de TI se han vuelto demasiado molestos con demasiada frecuencia. Sus mayores objeciones son:

  • "No somos programadores, somos administradores de sistemas";
  • Los módulos están disponibles en línea, pero muchos difieren entre sí; las ruedas se reinventan con demasiada frecuencia, ¿cómo decide cuál se ajusta a la factura?
  • El código en nuestro repositorio no es lo suficientemente transparente, para encontrar cómo funciona algo tienen que repetirse a través de manifiestos y módulos que incluso podrían haberse escrito hace un tiempo;
  • Un nuevo demonio requiere escribir un nuevo módulo, las convenciones deben ser similares a otros módulos, un proceso difícil;
  • "Ejecútelo y veamos cómo funciona"
  • Toneladas de 'extensiones' apenas conocidas en los módulos de la comunidad: 'trocla', 'augeas', 'hiera' ... ¿cómo pueden seguir nuestros administradores de sistemas?

Puedo ver por qué una gran organización enviaría sus administradores de sistemas a los cursos de Puppet para convertirse en maestros de Puppet. Pero, ¿cómo podrían los jugadores más pequeños aprender Puppet a nivel profesional si no van a los cursos y, básicamente, lo aprenden a través de su navegador y editor?

drumfire
fuente

Respuestas:

101

Comencé a usar Puppet antes de implementar una nueva infraestructura y simplemente compré un libro ( bien considerado ) sobre el tema. No creo que la mayoría de las personas realmente obtengan entrenamiento profesional de marionetas. Trabajé en ejemplos hasta que pude moldear el proceso a mi entorno. Esto fue en diciembre de 2011, por lo que en unas pocas semanas pude comprender los conceptos básicos y establecer un marco de producción. No era nuevo en la gestión de la configuración, tenía experiencia en CFEngine , pero muchas de las preocupaciones de sus administradores de sistemas resuenan. Cometí errores y tuve que refactorizar varias veces, pero conseguí que las cosas funcionaran satisfactoriamente.

Algunas notas sobre sus puntos ...

  • El rol de administración de sistemas tradicionales está cambiando. Adaptarse o quedarse atrás. He sido un ingeniero de sistemas exitoso, pero también tengo que actualizar (aprendiendo Python, por ejemplo). El enfoque en servidores individuales disminuye a medida que la abstracción de hardware a través de la virtualización y los servicios en la nube públicos y privados ganan fuerza. Esto significa la automatización de las tareas del sistema y el uso de la gestión de la configuración para arrebatar el control de un mayor número de servidores. Agregue conceptos DevOps a la mezcla y verá que las expectativas y requisitos del cliente / usuario final están cambiando.

  • Los módulos de títeres disponibles en línea difieren en estilo y estructura y sí, vi mucha superposición, redundancia y esfuerzos duplicados. Un desarrollador con el que trabajé dijo: "¡podrías haber desarrollado tus propias herramientas en el tiempo que pasaste buscando en línea algo que funciona!" Eso me detuvo al darme cuenta de que Puppet parece atraer más a los tipos de desarrolladores que a los administradores que buscan las mejores prácticas o el enfoque correcto .

  • Documente mucho para tener una idea de cómo están conectadas las cosas. Dadas las definiciones inestables y la falta de una forma estándar de hacer las cosas, la estructura de administración de la configuración es realmente única para su entorno. Esa transparencia tendrá que desarrollarse dentro.

  • Yo diría que es razonablemente fácil duplicar un módulo para acomodar un nuevo demonio o agregar un servicio a un manifiesto existente, dependiendo de cómo haya organizado sus servidores y roles.

  • Pasé mucho tiempo probando en un solo objetivo antes de enviar cambios a grupos más grandes de servidores. Ejecutar puppetd a mano en un servidor representativo me permitió depurar cambios y evaluar su impacto. Tal vez eso sea un poco conservador, pero fue necesario.

  • No estoy seguro de cuánto dependería de los módulos de la comunidad. Tuve que comenzar a usar Augeas para algún trabajo , y lamenté el hecho de que era una funcionalidad que daba por sentado en CFEngine.

En general, siento que no hay un estándar bien definido cuando se trata de Puppet. Tuve problemas para descubrir cómo organizar la estructura de directorios en mi Puppetmaster, comprender cómo administrar la firma de certificados, obtener el DNS inverso adecuado en todas partes, hacer que Puppet se escale de manera adecuada para el entorno y comprender cuándo aprovechar los módulos de la comunidad en lugar de construir el mío. Es un cambio de pensamiento y veo cómo eso haría que un sysadmin entrara en pánico. Sin embargo, esta también fue una solución creada desde cero, así que tuve el lujo de evaluar las herramientas. La decisión de seguir este camino se basó en el intercambio mental y el impulso detrás de Puppet. Valió la pena el esfuerzo de aprender algo nuevo.

Recuerde, este sitio también es un buen recurso.

ewwhite
fuente
20
Pasé de ninguna experiencia en Puppet a tener mi entorno completo administrado en dos semanas. Soy responsable de ~ 40 máquinas virtuales, aunque todas ejecutan Ubuntu. Eso simplificó bastante las cosas. Soy desarrollador de profesión. "Adaptarse o quedarse atrás": ahora soy devops + sysadmin + architect. Excelente respuesta!
François Beausoleil
Les recomendaría que comenzaran a implementar servicios pequeños, primero de forma independiente y luego comenzar a jugar con más servidores. No tengo que trabajar con Puppet, pero tengo un pequeño VPS y recientemente hice mis propios módulos de Puppet. Si quieren mantenerse al día con el resto de administradores de sistemas en el siglo actual, es mejor que sean de mente abierta. Lo hago porque me gusta, y supongo que no a todos les gusta aprender cosas nuevas, pero una cosa es segura, hoy en día los administradores de sistemas están más cerca de los desarrolladores que nunca.
Sergio Galvan
2
Trabajo en una pequeña empresa y también corro puppetd -tpara probar en un par de cajas antes de pasar a todos los servidores. Nunca falla que una pareja tenga algo único que haga que mis actualizaciones fallen. Puppet es mucho más fácil cuando tienes un entorno controlado y consistente para el comienzo.
jordanm
1
@ewwhite, me abrí camino a través del tutorial de Puppet en sus documentos, pero me preguntaba qué libro usaste al aprender. Tengo la sensación de que en el tutorial proporcionado en los documentos faltaba algo que impide que todo haga clic conmigo, ya que estoy trabajando con Puppet en los hosts de prueba para saber lo que estoy haciendo. EDITAR: o cualquier recurso adicional que pueda recomendar. Gracias.
Mike Keller
1
@MikeKeller Me gustó en mi publicación ... Pero está disponible aquí .
ewwhite
29

En un trabajo anterior, me asignaron la tarea de hacer una implementación piloto de Puppet. Ahora, tengo experiencia en programación, aunque no Ruby, así que no tengo tantos problemas como otros.

Sin embargo, es interesante notar que los programadores sin experiencia con paradigmas no tradicionales también tienen problemas con Puppet, porque Puppet es declarativo , no imperativo. En este sentido, Puppet funciona casi como cualquier archivo de configuración: usted dice cómo deberían ser las cosas y Puppet se encarga del resto.

Después del piloto, tuve la oportunidad de entrenar a una docena de otros administradores con Puppet, además de dar presentaciones al respecto en dos eventos. Mi opinión de esa experiencia es que algunos administradores lo tomaron, y otros no. Todos estos eran administradores tradicionales, sin habilidades de programación y con diferentes niveles de experiencia.

Una cosa particular que noté es que Puppet requiere práctica constante . Las personas que fueron entrenadas, escribieron módulos y luego pasaron un mes o dos haciendo algo más volvieron a Puppet con poca habilidad útil. Las personas que seguían haciendo cosas pequeñas todas las semanas nunca perdieron la habilidad.

Con base en estas dos observaciones, le recomiendo que se asegure de que todos sigan agregando alguna clase, definición o módulo de Puppet cada semana (preferiblemente al menos dos o tres veces). Aquellos que aún no pueden acostumbrarse a él realmente pueden carecer de la habilidad para hacerlo.

Por otra parte, si Puppet se les impuso desde más arriba, simplemente estarían reaccionando a lo que perciben como una administración intrusa en la forma en que hacen su trabajo, lo que sería bastante cierto, de hecho. Podría darse el caso de que permitirles elegir qué sistema de administración de configuración usar mejoraría las cosas. Aquí hay algunas alternativas:

  • ANSIBLE : Esto es nuevo, pero se basa en comandos de shell y ssh, lo que podría atraerlo a los administradores de sistemas tradicionales.
  • Chef : Quizás su problema sea el estilo declarativo, en cuyo caso Chef sería mejor si tuvieran experiencia con Ruby.
  • SaltStack : basado en Python y de código abierto
  • CFEngine : antiguo, rápido, tradicional, podría convencerlos por esos motivos.
Daniel C. Sobral
fuente
12
¡Lo bueno de ANSIBLE es que funciona a través de distancias galácticas sin absolutamente ningún retraso en la transmisión de datos!
Kalamane
1
Gracias por la mención ANSIBLE. No lo sabía hasta ahora.
ewwhite
@ewwhite De nada. Yo mismo lo descubrí recientemente, pero mucho de eso me llamó la atención. Si no tuviéramos tanto en Puppet, definitivamente lo probaría.
Daniel C. Sobral
11

He estado usando Puppet un poco más de dos años en pequeñas tiendas donde era el único administrador de sistemas. El mayor obstáculo que he tenido es aprender a desarrollar software correctamente. No había pasado una semana en la que no arruinara algo que les dije a los desarrolladores que no hicieran una docena de veces. Registré demasiado código, no separé los registros, no etiqueté, no ramifiqué, no ejecuté el verificador de sintaxis, no usé un estándar, etc. Si recién está comenzando recomendaría algunos de los siguientes.

  1. Date cuenta de que estás desarrollando un software que no sabes cómo hacer o que estás haciendo mal. Esto se espera porque es nuevo.
  2. La infraestructura como código es la realidad y una vez que superas el obstáculo, es bastante poderosa. Invitaría a algunos desarrolladores, les mostraré su proceso de desarrollo actual (o la falta del mismo), no se ofenda cuando levanten las cejas y tome en serio sus sugerencias. Recomiendo usar cualquier sistema y proceso que usen sus desarrolladores a menos que sea completamente inapropiado.
  3. Los módulos de terceros de Puppet apestan el 90% del tiempo. Los leería. Les robaría ideas. No los incluiría en mi sistema sin modificaciones importantes. Sin embargo, sacaría el títere stdlib que agrega una buena funcionalidad.
  4. augeas y hiera. Aprende esos dos. El primero permite la edición compleja de archivos existentes en su lugar. El segundo es un almacén de datos externo.
  5. Código separado de los datos. Este es uno de los conceptos más difíciles de aprender. Los valores de codificación fija como Monitorear hosts en el código de su módulo son incorrectos. Ponerlos en un almacén de datos (db, yaml (Hiera usa esto por defecto), csv, lo que sea) que sus módulos pueden consumir es bueno. Un ejemplo es una aplicación web que usa Mysql. Lo que esto permite es la capacidad de insertar código y datos por separado. Esto simplifica su proceso de desarrollo.
  6. validación del analizador de marionetas y pelusa de marionetas como parte de su proceso de registro previo o posterior al código. También las pruebas rspec pueden ser una buena idea una vez que esté al día.
  7. escriba una guía de estilo / código estándar y úselo. "dónde está el código que instala Apache" es un problema común. Si sus módulos son en su mayoría iguales, debería ser fácil.

En resumen, he encontrado todos estos problemas y también la mayoría de mis amigos administradores de sistemas. Tomará algún tiempo ser bueno en el uso de un sistema de administración de configuración. Una vez que lo hagas, te preguntarás cómo has vivido sin uno. "¿Iniciar sesión en un servidor y hacer cambios manualmente? Ick".

kashani
fuente
Gracias por sus sugerencias, especialmente augeas y hiera son dos componentes que hemos comenzado a implementar y esto nos hizo mucho más conscientes, incluso confiados en las capacidades de Puppet. Así que gracias :-)
drumfire
7

Hace seis meses, en nuestro proyecto sin fines de lucro, decidimos comenzar a migrar nuestra administración del sistema a un entorno controlado por Puppet porque esperamos que nuestro número de servidores crezca sustancialmente entre ahora y dentro de un año.

Parece una buena idea comenzar temprano: Puppet es más que una simple gestión de configuración, es una forma de documentación.

Desde que se tomó la decisión, nuestros técnicos de TI se han vuelto demasiado molestos con demasiada frecuencia.

Necesitan un ajuste de actitud.

"We're not programmers, we're sysadmins";

De nuevo, actitud. Usted puede hacer un archivo conf para un servidor, ¿verdad? Puede facilitar las tareas de creación de plantillas / 'programador' a medida que evolucionan sus necesidades y complejidad .

Los módulos están disponibles en línea, pero muchos difieren entre sí; las ruedas se reinventan con demasiada frecuencia, ¿cómo decide cuál se ajusta a la factura?

Difícil de responder: siempre prefiero los módulos de puppetlabs a la mayoría, y aun así, no uso tantos. Sentencia de seguro. En mi opinión, algunos módulos son "demasiado con volantes".

El código en nuestro repositorio no es lo suficientemente transparente, para encontrar cómo funciona algo tienen que repetirse a través de manifiestos y módulos que incluso podrían haberse escrito hace un tiempo;

Esto no parece un problema de títeres, sino más bien un problema de organización o documentación.

Un nuevo demonio requiere escribir un nuevo módulo, las convenciones deben ser similares a otros módulos, un proceso difícil;

Ese demonio podría ser una clase si es lo suficientemente simple de administrar. No estoy seguro de lo que quieres decir con convenciones, la marioneta impone convenciones sobre ti bastante bien, ¿no? ¿O estamos hablando de líneas de formato de código?

"Let's just run it and see how it works"

No es una mala idea si lo tomas con calma y seguridad. Todavía comenzaría con una VM para entender la esencia de las cosas.

Toneladas de 'extensiones' apenas conocidas en los módulos de la comunidad: 'trocla', 'augeas', 'hiera' ... ¿cómo pueden seguir nuestros administradores de sistemas?

postfix, exim, sendmail, mysql, postgresql, iftop, iptraf, perl, perl modules ... ¿Elige lo que quieres y úsalo? Supongo que esto suena más como una actitud de actitud otra vez ...

Puedo ver por qué una gran organización enviaría sus administradores de sistemas a los cursos de Puppet para convertirse en maestros de Puppet. Pero, ¿cómo podrían los jugadores más pequeños aprender Puppet a nivel profesional si no van a los cursos y, básicamente, lo aprenden a través de su navegador y editor?

No he asistido a ningún curso, aunque soy un programador más que un administrador de sistemas, descubrí que no necesitaba mucha habilidad de programación para lograr algo.

La documentación de Puppet, cuando se sigue, es bastante completa. Solo preste atención a los tipos incorporados y pase un tiempo mirando cómo se combinan otros módulos. No diría que es -súper- fácil, pero tampoco es -duro-. Preparar su infraestructura para títeres requiere un poco de tiempo, pero se garantiza que el tiempo invertido se empleará bien cuando se expanda.

hielo delgado
fuente
Para su información, esto proviene de alguien que -sólo- terminó de preparar su infraestructura para funcionar. Así que tengo una nueva experiencia y no puedo decir que haya perdido el tiempo.
thinice
Como titular reciente, me reconozco por completo en tu comentario.
Martijn Heemels
1
En mi caso, fue necesario un cambio de actitud. A Ops le encanta la automatización y, a menudo, las secuencias de comandos, por lo que se trata principalmente de usar diferentes herramientas. Es una sensación genial ver que su manifiesto de Puppet configura una máquina completa o un nuevo servicio desde cero. El hecho de que un error pueda afectar a varias máquinas a la vez requiere acostumbrarse a pruebas más rigurosas, lo que puede ser molesto pero obviamente es algo bueno. Experimente con Vagrant, rspec-puppet, puppet-lint, Geppetto, ramas Git y otras herramientas gratuitas y pronto descubrirá su flujo de trabajo favorito.
Martijn Heemels
1
Trabajar con Puppet también me ayudó a aprender Ruby, que ha venido a reemplazar a Bash como mi lenguaje predeterminado de herramientas del sistema.
Martijn Heemels
5

BESO (Mantenlo simple y estúpido): no utilices las nuevas tecnologías solo porque están allí, sino porque tienes un requisito para ellas, usa el mínimo necesario que requiere tu implementación, actualiza según sea necesario, no intentes mantenerte al día con el sangrado borde. Si comienza con una configuración básica y se basa en eso, es más fácil recogerlo a medida que avanza, y no deberían necesitar un curso (¿están incluso disponibles?).

La otra área que puede ver son sus administradores de sistemas. Si no pueden programar tan bien, ¿están lo suficientemente avanzados para una implementación grande, donde la mayor parte del trabajo necesita ser programada, independientemente de las herramientas que use?

JamesRyan
fuente
44
... porque esperamos que nuestro número de servidores crezca sustancialmente entre ahora y dentro de un año. ¿Requisito?
Jeff Ferland
1
Realmente depende de cuán segura sea esa expectativa y si lo que usted pone en práctica seguirá siendo adecuado para cuando surja la necesidad.
JamesRyan
+1 para "usar el mínimo necesario que requiere su implementación": muchos de los problemas de puppet con los que me he encontrado se deben al intento de hacer que Puppet controle todo en el sistema.
Sirex
5

También trabajo para una organización sin fines de lucro y fui responsable de llevar inicialmente las cajas de Linux a casa y poco después Puppet para administrarlas. Hemos hecho un par de cosas específicas que realmente han ayudado a poner las cosas en marcha.

En primer lugar, he tratado de mantenerme alejado de los módulos de terceros. Las herramientas incorporadas manejan el 90% de nuestra gestión. La mayor utilidad de terceros que uso es el módulo de firewall. Cualquier hecho personalizado, etc., se desarrolla con todo el equipo involucrado. Desarrollamos un módulo de plantilla y mantenemos la gestión de archivos, paquetes, servicios, etc., todo estandarizado fuera de esta plantilla.

En segundo lugar, después de estandarizar el uso de los módulos incorporados, comenzamos a usar Git y el Crucible de Atlassian, por cierto, sin fines de lucro, para realizar revisiones de todos los cambios de configuración. Esto proporciona la transparencia deseada.

En tercer lugar, automaticé la configuración de Puppet para que los nuevos hosts se puedan agregar automáticamente con un conjunto predeterminado de opciones. Hay varias formas de abordar esto. Como ya tenía un entorno Kickstart completo, opté por agregar un script allí.

Tim Brigham
fuente
4

"No somos programadores, somos administradores de sistemas"

Mi cómo los tiempos han cambiado, para peor: se esperaba que una barba gris como yo fuera un mejor programador que los programadores profesionales, o de lo contrario nunca hubiera podido pasar por un administrador del sistema .

Ahora, tenemos "administradores de sistemas", que son básicamente usuarios de escritorio de Windows que en algún momento se convirtieron a Linux y no pueden programar, y no encuentran nada de malo en eso.

El elefante en la habitación es la razón por la cual la gerencia tolera una actitud tan destructiva. ¿Destructivo para quién o qué? Al negocio y a la infraestructura.

Volver al tema Puppet [, CFEngine, Chef]: tan pronto como uno establece una solución como esa, uno pierde. Todos pierden. ¿Por qué? Porque a quien se le ocurra la idea no es capaz de diseñar la gestión de la configuración encapsulada en forma de paquetes de sistema operativo Kickstart [, JumpStart, Instalador automatizado, AutoYaST, Ignite-UX, NIM] agradables y limpios. Cuando tiene que usar una herramienta de piratería automática como Puppet (o Chef, o CFEngine), significa que carece de los medios para diseñar e implementar un proceso que, por ese mismo diseño, impondría sistemas completamente impecables y apaga completamente automatizado y completamente no interactivo.

Otro punto importante es que, si tiene que tener Puppet o alguna solución similar para corregir a alguien que piratea la configuración del sistema o de la aplicación a mano, eso también se remonta a no tener la experiencia para diseñar un proceso, y en ese proceso un marco donde se empaqueta la configuración en componentes discretos. En efecto, quien implementa Puppet y similares, no tiene concepto de propietarios de componentes, lanzamientos, gestión de configuración, Modelo de madurez de capacidades. Esto se está convirtiendo rápidamente en un problema muy serio en la industria.

Trabajar con Puppet también me ayudó a aprender Ruby, que ha venido a reemplazar a Bash como mi lenguaje predeterminado de herramientas del sistema ".

¿Por qué se necesita Ruby, cuando se puede encapsular una gestión integral de la configuración de extremo a extremo en las secciones preinstalar, postinstall, preremove y postremove de los paquetes del sistema operativo, simplemente usando los programas de shell Bourne, AWK y sed? Que alguien llegue a aprender un lenguaje esotérico de Ruby, y un dialecto del mismo en el contexto de Puppet, es completamente innecesario. El problema de la gestión de la configuración se puede solucionar fácilmente (y, a saber, se ha resuelto) con programas de shell y AWK, y un poco de sed (1) aquí y allá como pegamento.

Es una sensación genial ver que su manifiesto de Puppet configura una máquina completa o un nuevo servicio desde cero.

Es aún más genial verlo hecho por Kickstart, AutoYaST o JumpStart, sin una sola línea de código , y poder consultar el sistema operativo utilizando herramientas integradas, sin necesidad de ningún software esotérico o extra , sin cliente-servidor requiere arquitectura (SSH está más que bien, mucho más que bien), y ver que su sistema operativo es consciente de todos y cada uno de los cambios que se le han hecho.

5. Código separado de los datos. Este es uno de los conceptos más difíciles de aprender. Los valores de codificación fija como Monitorear hosts en el código de su módulo son incorrectos. Ponerlos en un almacén de datos (db, yaml (Hiera usa esto por defecto), csv, lo que sea) que sus módulos pueden consumir es bueno. Un ejemplo es una aplicación web que usa Mysql. Lo que esto permite es la capacidad de insertar código y datos por separado. Esto simplifica su proceso de desarrollo.

... O bien, podría simplemente la plantilla de sus archivos de configuración con las variables de shell, incluso acentos graves (por ejemplo ls -1 ...) y escribir un script de shell que utiliza AWK para llamar a eval (1) y ampliar todas las variables en la plantilla, lo que incrementa exactamente el mismo alcance analizador que los depósitos tienen incorporado. ¿Por qué hacerlo complejo, cuando puede ser muy, muy simple? ¿Dónde guardará los valores de configuración? Por qué, en cualquier lugar que desee, como por ejemplo archivos pkginfo (4), o una base de datos como Oracle, o prácticamente en cualquier lugar . No necesita soluciones ultracomplejas. La biblioteca que menciono anteriormente simplemente podría obtenerse de las secciones previas a la instalación o posteriores a la instalación en los paquetes del sistema operativo, eliminando así la duplicación y aprovechando una pieza central de código ...

Pero, sobre todo, creo que la cita anterior es un ejemplo de la próxima generación de administradores de sistemas que necesitan tutoría no por parte de los administradores del sistema, sino por los ingenieros del sistema . Búscate una barba gris y regístrate como aprendiz.

UX-admin
fuente
1
Parece haber olvidado su respuesta a la pregunta de los autores.
M. Glatki
Esta respuesta parece ser principalmente una discusión sobre opiniones, actitudes y herramientas, y realmente no aborda la pregunta que se hace.
JonathanDavidArndt