Tenemos muchos servidores y todavía queremos actualizarlos todos. La forma real es que cualquiera de los administradores de sistemas va de servidor a servidor y crea un aptitude update && aptitude upgrade
- todavía no es genial.
Ahora estoy buscando una solución que sea aún mejor y muy inteligente. ¿Puede la marioneta hacer este trabajo? ¿Cómo lo haces?
debian
puppet
update
remote-access
Dennis Wisnia
fuente
fuente
Respuestas:
Puede usar el
exec
tipo como:Para ser honesto, no lo intenté yo mismo, pero creo que solo necesita crear un nuevo módulo que incluya una definición ejecutiva de este tipo.
El
apt-get upgrade
comando es interactivo. Para que funcione silenciosamente, puede agregar la opción-q=2
como se muestra arriba.fuente
touch
ese archivo en el titiritero.si todos sus hosts son debian, puede probar el paquete de actualizaciones desatendidas.
http://packages.debian.org/sid/unattended-upgrades
Aquí hemos estado usando Puppet para administrar nuestras máquinas virtuales Debian, con Puppet podemos habilitar y administrar configuraciones de actualización no atendidas en todos los servidores.
Recientemente, nuestro equipo está probando la herramienta mcollective para ejecutar comandos en todos los servidores, pero para usar las habilidades de mcollective ruby son necesarias.
[s] Guto
fuente
Recomendaría ir a Puppet, facter y mCollective.
mCollective es un marco muy agradable en el que puede ejecutar comandos en una serie de hosts (en paralelo) usando facter como filtro.
Agregue a eso un proxy / caché local y estará bien configurado para la administración de servidores.
fuente
Use una herramienta diseñada para ejecutar un solo comando en varios servidores. Y con eso no me refiero a tener un kazillion de terminales abiertos con Terminator o ClusterSSH, sino tener un solo terminal para un servidor de administración que ejecute una herramienta adecuada para el trabajo.
Recomendaría func, Salt o mCollective en este contexto. Si ya tiene Puppet, elija mCollective (se integra muy bien en Puppet). Si no lo hace, y tiene un viejo Python en sus máquinas, puede disfrutar de func. Si tienes Python nuevo, prueba Salt. Todas estas herramientas ejecutan el comando especificado en la línea de comando de forma asíncrona, lo cual es mucho más divertido que un bucle ssh secuencial o incluso hacer los mismos comandos de aptitud en innumerables ventanas Terminator a innumerables servidores.
Definitivamente amarás Salt .
fuente
Así que supongo que hay muchas cosas que contribuyen a una buena solución:
Ancho de banda : Básicamente, me vienen a la mente dos alternativas para ahorrar ancho de banda:
Administración : configuraría un shell paralelo como PDSH , PSSH , GNU Parallel y emitiría el comando en todos los clientes, si probé el comando anteriormente en una máquina de ejemplo. Entonces no es muy probable que pueda fallar en todos los demás. Alternativamente, puede considerar un trabajo cron en todos los clientes, pero luego puede fallar automáticamente, por lo que preferiría la primera solución.
Si le preocupa la simultaneidad de las actualizaciones, puede programar sus comandos con
at
Registro : Al igual que con los shells paralelos, tiene la posibilidad de redirigir la salida. Combinaría stderr y stdout y lo escribiría en un archivo de registro.
fuente
Mi propio contenedor ssh paralelo: classh es una alternativa a las diversas herramientas ssh paralelas y de clúster que existen.
Puede que te guste más o que lo odies. Solo hay tres razones por las que lo menciono aquí:
subprocess.communicate()
método Python --- por lo que solo puede capturar aproximadamente 64K de stdout y, por separado, hasta 64K de stderr, por ejemplo; también cualquier proceso remoto que intente leer desde su stdin simplemente se detendrá hasta que se elimine el subproceso ssh local, automáticamente por el manejo del tiempo de espera de classh )Es extremadamente simple escribir un script personalizado, en Python, para usar classh.py como módulo. Entonces es muy fácil escribir algo como:
Eso es todo al respecto. Por ejemplo, en el ciclo completado anidado, puede recopilar una lista de todos aquellos que devolvieron un estado de salida particular o para buscar mensajes de error específicos y configurar trabajos de seguimiento para manejarlos. (Los trabajos se ejecutarán simultáneamente, con un valor predeterminado de 100 trabajos en cualquier momento, hasta que se complete cada uno; por lo tanto, un comando simple en unos pocos cientos de hosts generalmente se completa en unos segundos y un script de shell muy complejo en una sola cadena de comando larga ... Digamos que cincuenta líneas más o menos ... pueden completar más de unos pocos miles de hosts en aproximadamente 10 minutos ... aproximadamente 10K hosts por hora en mi entorno, con muchos de ellos ubicados intercontinentalmente.
Entonces, esto podría ser algo que puede usar como una medida ad hoc hasta que haya implementado la configuración de su títere y se haya probado bien ... y también es bastante útil para realizar pequeñas encuestas ad hoc de sus hosts para ver cuáles se están desviando de sus estándares en Varias pequeñas formas.
fuente
La respuesta usando exec es bastante útil.
Sin embargo, de acuerdo con el manual apt-get, no es una buena idea usar -q = 2 de esta manera (aunque lo he usado durante años sin problemas)
Yo mismo he usado un script durante años, ejecutando apt-get de la siguiente manera:
Cosas como títeres y otras herramientas que la gente mencionó seguramente pueden funcionar, pero parece que es excesivo para lo que básicamente es simplemente imitar algunos comandos escritos por un humano. Creo en el uso de la herramienta más simple para un trabajo específico, en este caso, un script bash es tan simple como es posible sin perder funcionalidad.
fuente
Durante años he estado felizmente actualizando e instalando paquetes usando apt-dater . Es una herramienta ligera y efectiva para la gestión remota de paquetes. Utiliza
screen
,sudo
yssh
.Para la administración de paquetes, apt-dater puede ser una solución más fácil que las herramientas de administración de configuración.
apt-dater es útil para la gestión centralizada de paquetes en diferentes versiones de GNU / Linux, como Debian y CentOS.
fuente
Puedes usar tela . Fabric es una biblioteca de Python (2.5-2.7) y una herramienta de línea de comandos para racionalizar el uso de SSH para la implementación de aplicaciones o tareas de administración de sistemas.
fuente
use webmin ,,, y use su función de clúster webmin, en la que puede agregar todos los sistemas a una consola webmin y emitirles cualquier comando o controlarlos todos desde un solo lugar.
O
Usar clúster ssh
O
PSSH
fuente
Otra solución si todos sus hosts están ejecutando Debian (o derivados) es usar el paquete cron-apt . Pero, como se sugiere en la documentación, se debe tener un poco de cuidado.
Actualmente estoy usando cron-apt en una docena de servidores para realizar todas las actualizaciones de seguridad de forma automática y desatendida. Para evitar actualizaciones no deseadas, solo uso cron-apt en servidores que ejecutan la distribución estable de Debian y me aseguro de configurar mis fuentes apt, así que use el nombre de distribución, wheezy , y no su alias (estable).
La configuración específica de cron-apt que uso se resume en un archivo de acción:
/etc/cron-apt/action.d/5-install
Cualquier otra actualización, se realiza manualmente, usando la pantalla o lo que sea más apropiado, ya que puede requerir intervención manual durante la actualización.
fuente