Estamos trabajando en una forma de realizar actualizaciones automáticas para nuestros servidores basados en RHEL / RHEL.
Idea inicial: usando Puppet, deshabilitamos los repositorios predeterminados y señalamos los nuestros. Luego, usamos ensure => latest
los paquetes que queremos actualizar automáticamente.
Problema: Estamos viendo que algunos servicios se reinician después de una actualización (duh).
Pregunta: ¿Alguien tiene algún consejo sobre cómo automatizar mejor las actualizaciones de Linux y las estrategias para mitigar el reinicio automático de los servicios? Preferiríamos una solución que incluye Puppet pero, si necesitamos usar otro servicio, eso no es un factor decisivo.
Editar
Posible solución: envié una solución que implementa muchas de las sugerencias de @ voretaq7 y @ewwhite. Parece que esta es la ruta que voy por el momento. Si tiene otras sugerencias, comente o envíe una respuesta.
fuente
¿Hay necesariamente un problema al reiniciar un servicio después de una actualización del paquete? Pruebe a pequeña escala antes de implementar para ver si hay algún problema. Recientemente tuve un problema feo con el paquete rpmforge de DenyHosts . En realidad, cambió la ubicación de su configuración y directorios de trabajo entre revisiones de una actualización de yum. Ese es un comportamiento totalmente indeseable. Por lo general, dentro de la misma revisión de RHEL, no hay demasiados problemas, pero nunca puedes estar seguro sin probar y observar de cerca los efectos.
Otra opción es actualizar selectivamente los servicios. ¿Siempre necesita los últimos paquetes, por ejemplo? Esto vuelve a comprender sus razones para ejecutar actualizaciones. ¿Cuál es el objetivo real?
La ventaja de ejecutar su propio repositorio es que puede organizar lanzamientos o lanzamientos y administrar el cronograma. ¿Qué sucede si tiene un proveedor de periféricos de hardware o software que requiere RHEL 5.6 y se rompería por debajo de 5.7? Ese es uno de los beneficios de administrar sus propios paquetes.
fuente
@Beaming Mel-Bin
La simplificación eliminará la necesidad de usar ssh para herramientas de bucle, para iniciar / detener la marioneta.
En primer lugar, deberá cambiar sus manifiestos para incluir una variable llamada "noop" cuyo valor se obtiene de la ENC.
Entonces tendrías algo como esto en una clase:
Dónde
noop_status
está configurado en su ENC. Cuando establece el valor denoop_status
atrue
, el manifiesto se ejecutará solo en modo noop.Si tiene 100s o 1000s de hosts, puede usar una ENC como Dashboard o Foreman que le permite cambiar parámetros en masa para muchos hosts, al heredarlos en el nivel "Hostgroup" o "Domain". Luego puede establecer el valor en "falso" para un pequeño número de hosts de prueba, anulando el valor del Grupo de host.
Con esto, cualquier cambio se aplica solo a los hosts seleccionados.
Cambiar un parámetro en una ubicación central puede afectar a cualquier número de hosts, sin la necesidad de encender / apagar la marioneta con ssh para herramientas de bucle. Puede dividir sus hosts en múltiples grupos para seguridad / administración.
También tenga en cuenta que en lugar de codificar los números de versión del paquete en manifiestos, puede ponerlos en la ENC. Y al igual que arriba, puede aplicar cambios selectivamente y administrar implementaciones.
Si desea más granularidad (y complejidad), incluso puede tener parámetros por clase, como,
noop_status_apacheClass
etc.Esto puede ser más difícil de manejar si
include
clasifica en otras clases.fuente
Posible solución basada en la respuesta de @ voretaq7:
Números de versión de código duro de paquetes en los
puppet
manifiestos y mantener los paquetes en nuestro propio repositorio.Cuando requerimos que una nueva versión de un paquete haga algo que ofrece (por ejemplo, mejoras de seguridad, características requeridas por nuestros clientes, etc.), descargamos el paquete al repositorio.
Pruebe el paquete actualizado en un servidor de prueba.
Una vez que se pruebe la actualización, use algo como
func
opssh
para cerrar elpuppet
agente en los nodos afectados.Actualice los
puppet
manifiestos para asegurarse de que la nueva versión del paquete esté instalada en los nodos afectados.Finalmente, ejecute
puppet agent --onetime && reboot
en el servidor usandofunc
opssh
Comente y avíseme si detecta alguna deficiencia en esta solución o cualquier cosa que pueda simplificarse.
fuente