Instalar OpenShift Origin en Fedora 19 (Mega Tutorial) – Parte 7

OpenShift

OpenShift Origin

En este paso del tutorial vamos a configurar la limitación de recursos de los nodos y configuraremos GIT para trabajar sobre ssh.

Vamos allá.

Node1

Antes de nada, aclaremos algunos conceptos. Los clientes se conectarán al broker, desde ahí configurarán un espacio de nombres (resolución de DNS), crearán una aplicación (sobre un nodo) y determinarán el tipo de gear a utilizar. Ahora, el gear lo seleccionamos desde el broker, pero el entorno de ejecución se crea en el nodo, por lo que el nodo establece los límites de CPU, de RAM y de almacenamiento, y lo hace gracias al nombre de un gear, que por defecto se establecen como “small, medium y large”. Eso hace que si tenemos configurados varios nodos (supongamos node1 y node2), node1 defina el gear small con 256MB de RAM y 1GB de HDD, mientras que node2 podría definir el gear small con 512MB de RAM y 10GB de HDD. No existe ningún control por parte del broker para esta situación, ya que sólo ve la etiqueta “small”; así que nuestro trabajo deberá ser establecer unas normas lógicas para crear un entorno homogéneo.

Módulos PAM

OpenShift Origin hace uso de unos módulos PAM propios, pero como prevalecen los del sistema, debemos configurar los módulos del sistema para que se usen los de OpenShift. Ya que hay muchos ficheros que tocar, y demasiadas configuraciones que aplicar, para no enrollarme demasiado haré uso de Augeas, un proyecto que pertenece a Red Hat y que es una herramienta de edición de ficheros de configuración. Analiza los archivos de configuración en sus formatos nativos y los transforma en un árbol. Los cambios de configuración se realizan mediante la manipulación de este árbol y los guarda de nuevo en los archivos de configuración de origen.

yum install -y augeas

Pongo la configuración, pero no tengo suficiente tutorial para explicar todo lo que hace, así que quien quiera, con un buen café y mucha, pero que mucha calma, se lo puede estudiar tranquilamente 😉

cat <<EOF | augtool
set /files/etc/pam.d/sshd/#comment[.='pam_selinux.so close should be the first session rule'] 'pam_openshift.so close should be the first session rule'
ins 01 before /files/etc/pam.d/sshd/*[argument='close']
set /files/etc/pam.d/sshd/01/type session
set /files/etc/pam.d/sshd/01/control required
set /files/etc/pam.d/sshd/01/module pam_openshift.so
set /files/etc/pam.d/sshd/01/argument close
set /files/etc/pam.d/sshd/01/#comment 'Managed by openshift_origin'

set /files/etc/pam.d/sshd/#comment[.='pam_selinux.so open should only be followed by sessions to be executed in the user context'] 'pam_openshift.so open should only be followed by sessions to be executed in the user context'
ins 02 before /files/etc/pam.d/sshd/*[argument='open']
set /files/etc/pam.d/sshd/02/type session
set /files/etc/pam.d/sshd/02/control required
set /files/etc/pam.d/sshd/02/module pam_openshift.so
set /files/etc/pam.d/sshd/02/argument[1] open
set /files/etc/pam.d/sshd/02/argument[2] env_params
set /files/etc/pam.d/sshd/02/#comment 'Managed by openshift_origin'

rm /files/etc/pam.d/sshd/*[module='pam_selinux.so']

set /files/etc/pam.d/sshd/03/type session
set /files/etc/pam.d/sshd/03/control required
set /files/etc/pam.d/sshd/03/module pam_namespace.so
set /files/etc/pam.d/sshd/03/argument[1] no_unmount_on_close
set /files/etc/pam.d/sshd/03/#comment 'Managed by openshift_origin'

set /files/etc/pam.d/sshd/04/type session
set /files/etc/pam.d/sshd/04/control optional
set /files/etc/pam.d/sshd/04/module pam_cgroup.so
set /files/etc/pam.d/sshd/04/#comment 'Managed by openshift_origin'

set /files/etc/pam.d/runuser/01/type session
set /files/etc/pam.d/runuser/01/control required
set /files/etc/pam.d/runuser/01/module pam_namespace.so
set /files/etc/pam.d/runuser/01/argument[1] no_unmount_on_close
set /files/etc/pam.d/runuser/01/#comment 'Managed by openshift_origin'

set /files/etc/pam.d/runuser-l/01/type session
set /files/etc/pam.d/runuser-l/01/control required
set /files/etc/pam.d/runuser-l/01/module pam_namespace.so
set /files/etc/pam.d/runuser-l/01/argument[1] no_unmount_on_close
set /files/etc/pam.d/runuser-l/01/#comment 'Managed by openshift_origin'

set /files/etc/pam.d/su/01/type session
set /files/etc/pam.d/su/01/control required
set /files/etc/pam.d/su/01/module pam_namespace.so
set /files/etc/pam.d/su/01/argument[1] no_unmount_on_close
set /files/etc/pam.d/su/01/#comment 'Managed by openshift_origin'

set /files/etc/pam.d/system-auth-ac/01/type session
set /files/etc/pam.d/system-auth-ac/01/control required
set /files/etc/pam.d/system-auth-ac/01/module pam_namespace.so
set /files/etc/pam.d/system-auth-ac/01/argument[1] no_unmount_on_close
set /files/etc/pam.d/system-auth-ac/01/#comment 'Managed by openshift_origin'
save
EOF

cat <<EOF > /etc/security/namespace.d/sandbox.conf
# /sandbox        \$HOME/.sandbox/      user:iscript=/usr/sbin/oo-namespace-init       root,adm,apache
EOF

cat <<EOF > /etc/security/namespace.d/tmp.conf
/tmp        \$HOME/.tmp/      user:iscript=/usr/sbin/oo-namespace-init root,adm,apache
EOF

cat <<EOF > /etc/security/namespace.d/vartmp.conf
/var/tmp    \$HOME/.tmp/   user:iscript=/usr/sbin/oo-namespace-init root,adm,apache
EOF

CGroups

CGroups permite ubicar recursos de cpu, de memoria, de red o una combinación de todos, para una tarea de usuario (proceso). Así que haremos uso de CGroups para establecer los límites en nuestro nodo.
En Fedora 19 debería estar instalado por defecto, así que vamos a arrancar los servicios necesarios. Es importante el orden de arranque, ya que existe una dependencia entre ellos.

systemctl start cgconfig.service
systemctl start cgred.service
systemctl enable cgconfig.service
systemctl enable cgred.service

Estableciendo los límites

En el fichero /etc/openshift/resource_limits.conf se establecen los límites para los gears. DE todas las directivas sólo me centraré en dos, la que establece el límite de almacenamiento en disco y la que establece el límite de RAM asignada:

quota_blocks=1048576 # 1 block = 1024byte --> 1048576 blocks= 1GB
memory_limit_in_bytes=536870912 # 512MB

Para que las cuotas de disco funcionen, debemos habilitarlo en el punto de montaje, así que modificaremos la entrada del fichero /etc/fstab

/dev/mapper/fedora_node1-root /                       ext4    defaults        1 1

Por esta otra

/dev/mapper/fedora_node1-root /                       ext4    defaults,usrquota        1 1

Remontamos la unidad y habilitamos la información de cuotas

mount -o remount /
quotacheck -cumgv /

SELinux

Nuevamente nos encontramos con la necesidad de habilitar varios booleanos de SELinux, y de restaurar varios contextos

setsebool -P httpd_unified=on httpd_can_network_connect=on httpd_can_network_relay=on httpd_read_user_content=on httpd_enable_homedirs=on httpd_run_stickshift=on allow_polyinstantiation=on httpd_run_stickshift=on httpd_execmem=on
restorecon -RFvv /var/run
restorecon -RFvv /var/lib/openshift /etc/openshift/node.conf /etc/httpd/conf.d/openshift

 

System Control

Dado que nuestro sistema va a gestionar multitud de peticiones http, debemos permitir que se disparen más procesos httpd de los normales y por ello necesitamos establecer una serie de semáforos en el kernel para evitar el colapso de los procesos, así que modificaremos el parámetro del kernel kernel.sem. También debemos incrementar el número de puertos en uso, así como también el tamaño de la tabla de seguimiento de conexiones del kernel, para ello tenemos los parámetros net.ipv4.ip_local_port_range y net.netfilter.nf_conntrack_max respectivamente. Nuevamente haré uso de augeas

cat <<EOF | augtool
set /files/etc/sysctl.conf/kernel.sem "250  32000 32  4096"
set /files/etc/sysctl.conf/net.ipv4.ip_local_port_range "15000 35530"
set /files/etc/sysctl.conf/net.netfilter.nf_conntrack_max "1048576"
save
EOF

sysctl -p /etc/sysctl.conf

También establecemos el UID y el GID de los usuarios (gears) de nuestro nodo, Debe coincidir con la directiva GEAR_MIN_UID del fichero /etc/openshift/node.conf

cat <

SSH y GIT

Debemos permitir que SSH pase a través de la variable de entorno GIT_SSH, así que vamos a modificar el fichero /etc/ssh/sshd_config. También aumentaremos el número de conexiones SSH que se pueden realizar

cat <> /etc/ssh/sshd_config
AcceptEnv GIT_SSH
EOF

cat <

Habilitar servicios y firewall

Ahora iniciamos los servicios para el control de tráfico de red, configuramos el redireccionamiento de aplicaciones a su correspondiente contenido (porque lógicamente tendremos más de una aplicación en cada nodo)

lokkit --port=35531-65535:tcp
systemctl enable httpd.service
systemctl enable openshift-port-proxy.service
systemctl enable openshift-tc.service
systemctl enable openshift-gears.service

 

Configurando el dominio para el nodo

Llegamos al final de este post, y lo que haremos será establecer los parámetros del dominio de OpenShift para nuestro nodo. Esto lo haremos en el fichero /etc/openshift/node.conf mediante las siguientes directivas:

PUBLIC_HOSTNAME="node1.dmartin.es"            # The node host's public hostname
PUBLIC_IP="10.10.10.101"                         # The node host's public IP address
BROKER_HOST="broker.dmartin.es"              # IP or DNS name of broker host for REST API
EXTERNAL_ETH_DEV='eth0'					  # Update to match name of external network device
CLOUD_DOMAIN="dmartin.es"

Por último inicializamos el facter que permitirá recolectar los metadatos de MCollective. Este es un trabajo que gestiona el cron, pero así nos aseguramos de su correcto funcionamiento

/etc/cron.minutely/openshift-facts
systemctl reboot

Sólo queda reiniciar el nodo y… esperar a la siguiente entrada en la que crearemos la primera aplicación. Aquí

Nos vemos.

3 thoughts on “Instalar OpenShift Origin en Fedora 19 (Mega Tutorial) – Parte 7

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *