.net - sugerencias - futbol sapiens
Recomendaciones del chef y tÃteres (5)
Me gustaría preguntar cuándo y en qué circunstancias usaría marioneta y cuándo usaría chef. También encontré rump que es un tipo de cosa de solo títere en el que se itera un solo servidor a su configuración y luego se envía a una serie de servidores, lo que le permite ver los cambios directamente.
Mi pregunta: ¿cuál de las anteriores debo usar y de qué manera? ¿Alguien podría ayudarme?
Mi objetivo es en el contexto de la integración continua, el despliegue continuo en un entorno mono / .Net con rake y git. Me gustaría empaquetar, versionar y desplegar aplicaciones web fácilmente y me gustaría usar recepciones para un equilibrador de carga para múltiples servidores web. Poder eliminarlos rápidamente y no tener ningún tiempo de inactividad entre las actualizaciones.
Al final terminé con Puppet + vagrant que me permite ejecutar / volver a ejecutar / probar los manifiestos de títeres:
Primero instale VirtualBox, luego:
gem install puppet
gem install vagrant
entonces:
vagrant box add base http://files.vagrantup.com/lucid32.box
vagrant init
luego edita ./vagrantfile para decir:
Vagrant::Config.run do |config|
config.vm.box = "base"
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "manifests"
puppet.module_path = "modules"
end
# rest here
end
a continuación, agregue una definición de nodo a manifests/default.pp
, como:
group { "puppet":
ensure => "present",
}
file { ''/etc/motd'':
content => "Welcome to your Vagrant-built virtual machine!/n"
}
entonces corre:
vagrant up
Ahora tienes una máquina virtual gestionada por marionetas con la que puedes jugar, y cualquier manifiesto que cambies entra en el control de código fuente. Y puedes iterar rápidamente sin tener que recurrir a la grupa.
Habiendo usado ambos, diría que depende de lo que busques. En mi opinión:
Chef es más desarrollador- orientado. Si eres un gurú de Ruby, te encantará.
Títere es más sysadmin orientado. Tiene un DSL no rubí, por lo que es más difícil propagar errores a sus máquinas (imho).
Puppet crea un código más legible y estable, pero también es lento para implementar nuevas funciones. Eso es probablemente lo que querrá en una gran estructura empresarial que cree firmemente en su trabajo de DevOps.
Con Chef puede lograr tareas complejas con menos código, esfuerzo de tiempo. Puedes usar toda la magia rubí sin tener que crear una construcción de Títere. Esto es bueno, por ejemplo, cuando su compañía realmente no cree en el valor de DevOps y está luchando constantemente contra el tiempo para demostrar que su gerente está equivocado :-) Personalmente, creo que Puppet es un poco más lento de ejecutar cuando desarrolla nuevas funciones, lo que puede ser un poco de dolor
Mi sugerencia es: si eres un administrador de sistemas con algunas habilidades de desarrollo, elige Puppet. Si eres bueno con Ruby (o Python), ve a Chef.
También probé grupa y estoy jugando con ella. Ayuda, es genial, pero todavía no veo un valor enorme, excepto la escritura perezosa de rump go en lugar de puppet apply -vd --modulepath =. módulo / manifiestos / init.pp. :)
Otra gran diferencia entre Puppet y Chef que no se ha mencionado es que Puppet hará toda la compilación del manifiesto en el Servidor, mientras que Chef (y cfengine) hará parte o todo el trabajo en el cliente.
Lo que esto significa es * Menos espacio de CPU en su cliente al ejecutar Puppet, y * Los módulos de complemento escritos en Puppet se ejecutan solo en el servidor.
La segunda parte es importante, porque facilita mucho más la integración de Puppet con su otra arquitectura. Por ejemplo, si desea obtener datos a través de una API desde otra aplicación, en Puppet solo necesita instalar los módulos API necesarios en el Puppetmaster, y solo debe otorgar a ese servidor acceso a la API. Cualquier credencial necesaria también permanece en el puppetmaster, mucho más segura.
Estamos integrados Puppet y SecretServer (para rotar automáticamente las contraseñas de root usando Puppet y almacenarlas en SecretServer). Esto no hubiera sido posible ni seguro bajo Chef, como entiendo el modelo.
Si estás familiarizado con Ruby, te sugiero que pruebes Chef que Puppet. Usando chef & ruby, puedes ejecutar una tarea muy complicada. Sin embargo, títere es un dominio más limpio definido que el chef. Bien o no, todo depende de su trabajo real.
Usaría Puppet, pero estoy un poco sesgado al escribir un libro sobre eso y trabajar allí. :) Además de Rump, también puedes usar Puppet en su modo de aplicación, que es lo mismo que chef-solo. Aunque Rump encierra algo de bondad en el proceso que vale la pena probar.
Le daría una oportunidad a Puppet usando a Rump como un envolvente, ambos pueden usar la DSL de Puppet o la DSL de Ruby (el Chef solo tiene una DSL de Ruby). Es muy fácil crear "entornos" utilizando Puppet e integrar un flujo de trabajo git / CI con sus implementaciones. También es fácil de integrar con tareas de Rake o similares.