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.
Ohhh, creo que es este. Se mira bueno, habrá que probarlo 😀
Ya vi que lo encontraste.
La verdad es que sí, esta muy bien, pero todavía no está completo… falta muy poco 😉