Foreman-Katello, administrador de ciclos de vida de servidores II

Buenos días | tardes | noches, seguimos con la anterior entrada en la que aprendiamos a instalar y configurar Foreman – Katello incluyendo el agregar nodos.

En esta entrada aprenderemos a configurar el ciclo de vida de un cliente y cómo suscribirlo a nuestro servidor para así ver las actualizaciones disponibles.

Requisitos de los clientes

En esta entrada no usaremos el cliente Debian que definimos en la primera parte, añadiremos otro cliente con:

SO: CentOS 7.4
Red: visible al servidor (en el rango que tendramos definido)
Capacidad: 10GB
RAM: 2GB

En el caso de que no tengáis instalado en el cliente el agente de puppet, lo instalamos:

rpm -Uvh https://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm
yum check-update && yum update -y
yum install -y puppet-agent

En mi caso no me creó el alias para poder ejecutarlo, por lo que tengo que añadirlo manualmente. Edito el fichero bashrc del usuario que lanzará el comando:

vim ~/.bashrc
alias puppet='/opt/puppetlabs/puppet/bin/puppet'

Con esto, ya podemos comenzar con la configuración del ciclo de vida de los clientes.

Configuración del ciclo de vida

Para aquellos que no sepan qué es el ciclo de vida de una máquina, es todo aquello por lo que una máquina pasa desde que es creada hasta que es eliminada.

Para configurar este ciclo de vida necesitaremos crear previamente y en orden:

  • GPG Key: con la que verificaremos la autenticidad cuando Katello se sincronice con los repositorios que le definiremos.
  • Synchronization plan: plan de sincronización que, automáticamente, sincronizará nuestros productos con los repositorios definidos.
  • Products: aquellos que contienen todos los repositorios con los que los clientes se comunicarán para saber qué paquetes actualizar.
  • Content view: snapshots de los repositorios definidos.
  • Activation keys: usadas para suscribir los clientes a nuestras organizaciones.

Comencemos con la creación de la GPG Key. Necesitaremos tantas como productos diferentes tengamos. En mi caso sólo necesitaré crear 1 GPG Key ya que usaré los repositorios oficiales de CentOS.

Nos vamos a Content > Content Credentials > Create Content Credential > Creamos nuestra GPG Key de CentOS oficial:

Ahora necesitaremos crear un Synchronization Plan para , posteriormente, asignarlo a los productos. Para ello nos vamos a Content > Sync Plan > Create Sync Plan

NOTA: el intervalo de tiempo disponible a definir es hourly, daily weekly.

A continuación crearemos los productos con sus repositorios. Para ello nos vamos a Content > Products > Create Product

Una vez guardado el producto, procedemos a crear sus repositorios. Pero no antes de saber los 3 tipos de política de descarga que tiene Katello:

  • On demand: solo la metadata es almacenada, pero si el cliente realiza una petición de actualización, descarga los paquetes y los almacena en el sistema.
  • Immediate: descarga toda la metadata y los paquetes inmediatamente después de la sincronización
  • Background: una tarea se ejecutará en segundo plano para descargar todos los paquetes después de la sincronización inicial.

Ahora si, pulsamos sobre New Repository y definimos los siguientes repositorios:

Nombre: Centos7-base_x86_64
Label: Centos7-base_x86_64
Type: yum
Restrict to Architecture: x86_64
Upstream URL: http://vault.centos.org/7.4.1708/os/x86_64/
Verify SSL: marcado
Download Policy: On Demand
Mirror on sync: marcado
Public HTTP: marcado
GPG Key: Centos

Nombre: Centos7-extras_x86_64
Label: Centos7-extras_x86_64
Type: yum
Restrict to Architecture: x86_64
Upstream URL: http://vault.centos.org/7.4.1708/extras/x86_64/
Verify SSL: marcado
Download Policy: On Demand
Mirror on sync: marcado
Public HTTP: marcado
GPG Key: Centos

Nombre: Centos7-updates_x86_64
Label: Centos7-updates_x86_64
Type: yum
Restrict to Architecture: x86_64
Upstream URL: http://vault.centos.org/7.4.1708/updates/x86_64/
Verify SSL: marcado
Download Policy: On Demand
Mirror on sync: marcado
Public HTTP: marcado
GPG Key: Centos

Procedemos a realizar, manualmente, la primera sincronización del producto definido. Nos vamos a Content > Sync Status. Si pulsamos sobre Expand all se desplegarán todos los productos y nos mostrarán sus repositorios

Con todos los repositorios seleccionados del producto, pulsamos sobre Synchronize Now.

Una vez terminado el proceso de sincronización, crearemos el primer snapshot del producto. Nos vamos a Content > Content Views > Create New View.

NOTA: Si te preguntas por qué he decidido llamarlo con la fecha del día, recordad que un Content View no es más que una snapshot de nuestro producto por lo que es importante saber cuando fue tomada.

Posteriormente deberemos de añadir los repositorios que anteriormente hemos creado.

NOTA: también podemos añadir exclusiones de paquetería a los Content View. Dichas exclusiones pueden realizarse a través de los Filtros. Es sencillo e intuitivo por lo que no creo necesaria su explicación. Si tienes dudas de como aplicar un filtro para que afecte a ciertos paquetes, no dudes en preguntar.

Nos desplazamos a la pestaña Versions y publicamos nuestra versión 1.0.

Con nuestra primera versión ya publicada, procedemos a promocionarla pero antes deberemos de crear los entornos de ciclos de vida. Nos vamos a Content > Lifecycle Environments > Create Environment Path

Después de crear el primer Environment Path, crearemos los siguientes pulsando sobre Add New Environment.

NOTA: cuidado con este proceso ya que deberemos de crearlo desde inicio a fin, es decir, si tenemos entornos que conllevan desde Desarrollo hasta Producción, deberemos crear primero Desarrollo para acabar creando, por último, el entorno de Producción.

Según nuestras necesidades, cambiará nuestro entornos de ciclos de vida. En mi caso quedaría así:

Volvemos a nuestro Content View y esta vez si, para poder tenerlo en todos los entornos, lo promocionamos al entorno Testing pulsando sobre Promote

NOTA: como podéis ver, en caso de no saber a qué entorno deberiamos promocionar, Katello nos ayuda marcandolo con una estrella.

Este paso lo repetimos hasta tenerlo promocionado en todos los entornos disponibles.

Una vez promocionado en todos nuestros entornos de ciclo de vida, procedemos a crear las Activation Key. Nos vamos a Content > Activation Keys > Create Activation Key.

Ya creado, nos desplazamos a la pestaña Subscriptions y añadimos el producto que creamos anteriormente.

En mi caso, crearé una Activation key por cada entorno que tengo creado y le asigno el Content View promocionado en todos los entornos y el producto creado para así aplicar la lista de paquetes a los clientes que se suscriban con esa Activation Key.

NOTA: Si queremos suscribir clientes con una Activation key sin un Content view asignado, no nos dejará ya que es obligatoria su asignación.

Ya con todo el ciclo de vida creado y configurado, procedemos a suscribir clientes a nuestro servidor.

Suscribiendo clientes con Subscription-Manager

Para poder realizar cualquier administración de paquetería sobre los clientes, debemos de suscribirlos a nuestro servidor, para ello Katello nos provee de una “miniguia” si nos vamos a Hosts > Content Hosts y pulsamos sobre el cliente a suscribir.

Si seguimos los pasos indicados es probable que nos dé error por no tener ciertos repositorios o paquetes instalados, os recomiendo ejecutar estos comandos para una suscripción bien ejecutada:

yum install subscription-manager
curl --insecure --output katello-ca-consumer-latest.noarch.rpm https://katello.lab.org/pub/katello-ca-consumer-latest.noarch.rpm
yum localinstall katello-ca-consumer-latest.noarch.rpm
yum install -y http://fedorapeople.org/groups/katello/releases/yum/3.8/client/el7/x86_64/katello-client-repos-latest.rpm
yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install katello-agent

El siguiente paso a realizar es la suscripción con subscription-manager, dependiendo de a qué entorno suscribir nuestro cliente. En mi caso lo suscribiré a Development:

[root@cliente3 usuario]# subscription-manager register --org="Lab" --activationkey="Development"
El sistema ha sido registrado con ID: 99d3298a-df06-4d0a-81f8-d6573697c940
El nombre del sistema registrado es: cliente3.lab.org
No hay productos instalados.

Ahora podremos ver las características o contenido de ese cliente. Nos vamos a la pestaña Subscriptions > Subscriptions y añadimos el producto creado.

Ahora deberemos de inhabilitar los repositorios oficiales de Centos que el cliente tiene habilidos por defecto. Para verlos nos vamos a /etc/yum.repos.d/:

-rw-r--r--. 1 root root 1664 nov 15 20:48 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 ago 30 2017 CentOS-CR.repo
-rw-r--r--. 1 root root 649 ago 30 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 ago 30 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 ago 30 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 ago 30 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3830 ago 30 2017 CentOS-Vault.repo
-rw-r--r--. 1 root root 951 nov 15 20:45 epel.repo
-rw-r--r--. 1 root root 1050 oct 2 2017 epel-testing.repo
-rw-r--r--. 1 root root 491 nov 14 21:53 katello-client.repo
-rw-r--r--. 1 root root 1505 nov 14 21:53 katello.repo
-rw-r--r--. 1 root root 411 sep 19 01:57 puppet5.repo

Para deshabilitar todos los que posiblemente estén habilitados, ejecutamos (dos opciones):

for i in *; do sed -i 's/enabled = 1/enabled = 0/g' $i; done
for i in *; do sed -i 's/enabled=1/enabled=0/g' $i; done

O simplemente creamos un directorio y movemos todos los repositorios dentro:

[root@cliente3 yum.repos.d]# mkdir repositories
[root@cliente3 yum.repos.d]# mv *.repo repositories/

Ahora, con subscription-manager, finalizamos la suscripción con:

[root@cliente3 yum.repos.d]# subscription-manager attach --auto
No hay productos instalados en el sistema. No hay necesidad de vincular las suscripciones.

Nos aseguramos de que podemos ver los repositorios definidos en el producto que anteriormente creamos

[root@cliente3 yum.repos.d]# subscription-manager repos --list-enabled
+----------------------------------------------------------+
Repositorios disponibles en /etc/yum.repos.d/redhat.repo
+----------------------------------------------------------+
ID de repositorio: Lab_Centos_7_4_Centos7-extras_x86_64
Nombre de repositorio: Centos7-extras_x86_64
URL de repositorio: https://katello.lab.org/pulp/repos/Lab/Development/11-15-2018/custom/Centos_7_4/Centos7-e
xtras_x86_64
Activado: 1
ID de repositorio: Lab_Centos_7_4_Centos7-base_x86_64
Nombre de repositorio: Centos7-base_x86_64
URL de repositorio: https://katello.lab.org/pulp/repos/Lab/Development/11-15-2018/custom/Centos_7_4/Centos7-b
ase_x86_64
Activado: 1
ID de repositorio: Lab_Centos_7_4_Centos7-updates_x86_64
Nombre de repositorio: Centos7-updates_x86_64
URL de repositorio: https://katello.lab.org/pulp/repos/Lab/Development/11-15-2018/custom/Centos_7_4/Centos7-u
pdates_x86_64
Activado: 1

Nos vamos a Katello y verificamos si el cliente ha reportado la cantidad de paquetes a actualizar yendo al apartado de Content Hosts:

En caso de querer realizar las actualizaciones de la paquetería en el cliente, entramos en el cliente desde la interfaz de Content Hosts, nos desplazamos a la pestaña Packages y seleccionamos Appicable, seleccionamos aquellos paquetes que deseemos actualizar o directamente pulsamos sobre Update all packages. Comenzará a actualizar toda la paquetería.

Una vez terminado, podremos observar que el cliente ya no posee paquetes disponibles a actualizar.

Hasta aquí la segunda parte de Foreman-Katello, en la siguiente entrada os enseñaré a instalar OpenScap y Remote Execution, plugins muy interesantes para aprender a usar.

Espero que os haya gustado, hayáis aprendido nociones básicas sobre Katello y que, sobretodo, hayáis disfrutado de esta gran herramienta de administración.

Nos vemos en la siguiente entrada, un saludo!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.