$30 off During Our Annual Pro Sale. View Details »

Openshift: Lleva tu Desarrollo a Otro Nivel

Openshift: Lleva tu Desarrollo a Otro Nivel

Presentación utilizada en FUDCon Managua. Da un pantallazo de cómo trabajar con OpenShift para lograr un ambiente DevOps más eficientes.

Abdel G. Martínez L.

October 24, 2014
Tweet

More Decks by Abdel G. Martínez L.

Other Decks in Technology

Transcript

  1. Sobre mí... Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 2/40 • 5 años participando en el Proyecto Fedora. • Roles: Empaquetador y Embajador. • FAS: potty • Twitter: @abdelgmartinezl • Blog: http://abdelmartinez.com • E-mail: [email protected]
  2. Agenda 1. Introducción 2. Las Tres Versiones 3. Decidir entre

    Versiones 4. Conceptos Importantes 5. Tecnologías Importantes 6. Pasos Preliminares 7. Configurando la Línea de Comandos 8. Creando la Primera Aplicación 9. Autoescalando 10.Moverse a un Nodo Pago 11.Clonando Código Localmente 12.Modificando el Código 13.Auto Hook Scripts 14.Despliegue en Caliente 11. Cartridge Adicionales 12. Encontrando Cartridges 13. Acceso SSH 14. Variables de Entorno 15. Usando Marcadores 16. Declaración de Dependencias 17. Conectándose a la Base de Datos 18. Consultando la Cuota 19. Despliegues Manuales 20. Historia de Despliegues 21. Application Snapshots 22. Manejando Múltiples Llaves SSH 23. Trabajo Colaborativo 24. Otras Características Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 3/40
  3. Introducción • Software as a Service (SaaS): Diseñado para usuarios

    finales, entregado sobre la web. • Platforma as a Service (PaaS): Conjunto de herramientas y servicios diseñados para hacer código y desplegar esas aplicaciones esas aplicaciones rápido y eficiente. • Infrastructure as a Service (IaaS): Hardware y software que empodera todo (servidores, almacenamiento, redes y sistemas operativos). Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 4/40
  4. Decidir entre Versiones • Depende del escenario. • Para una

    corporación se debe utilizar Openshift Enterprise. • Si quiere tener menor cantidad de tareas de administración se debe utilizar Openshift Online. • Si quiere estar 'cutting-edge' se puede usar Openshift Origin con Fedora o CentOS. Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 6/40
  5. Conceptos Importantes • Application: Es la típica aplicación web que

    se ejecuta en Openshift. Provee seguridad permitiendo tráfico entrante en HTTP (80), HTTPS (443) y SSH (22). Con WebSocket, se soportan HTTP (8000) y HTTPS (8443). • Gear: Es un servidor contenedor que tiene un conjunto de recursos que permite a los usuarios ejecutar sus aplicaciones en la nube. Existen tres tipos, que cuentan con 1GB de disco: pequeña (512 MB de RAM), mediana (1 GB de RAM) y grande (2 GB de RAM). Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 7/40
  6. Conceptos Importantes • Cartridge: Para hacer que un gear haga

    algo, se necesita agregar un cartridge. Son plug-ins que guardan el marco o componentes que pueden ser utilizados para crear y ejecutar una aplicación. Uno o muchos cartridges pueden ejecutarse en cada gear, y el mismo cartridge puede ejecutarse en uno o más gear. • Standalone: Son los lenguajes y application servers que sirven al contenido web, como Jboss, Tomcat, Python o Node.js. • Embedded: Provee funcionalidad para mejorar la aplicación, como una base de datos o cron, pero no sirven independientemente para crear una aplicación. Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 8/40
  7. Conceptos Importantes • Scalable Application: Permite a la aplicación reaccionar

    a los cambios en tráfico y automáticamente separa los recursos necesarios para manejar la creciente demanda. La infraestructura de OpenShift monitoriza el tráfico web entrante y trae nuevos gears (o los retira). • Herramientas Cliente, Consola Web, Plug-in Eclipse: Se puede interactuar con la plataforma vía el cliente RHC que se instala localmente. El único momento que se utilizan estas herramientas es cuando se administra la infraestructura o componentes de la aplicación. Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 9/40
  8. Tecnologías Importantes • SSH: Es una herramienta que te permite

    conectarte a los Openshift gears y tener acceso a nivel de línea de comandos. • Git: Es un programa que provee un control de versiones distribuido. Cada repositorio es considerado maestro. Los tres comandos básicos que se manejan aquí son: • git add • git commit • git push Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 10/40
  9. Tecnologías Importantes • SSH: Es una herramienta que te permite

    conectarte a los Openshift gears y tener acceso a nivel de línea de comandos. • Git: Es un programa que provee un control de versiones distribuido. Cada repositorio es considerado maestro. Los tres comandos básicos que se manejan aquí son: • git add • git commit • git push Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 11/40
  10. Pasos Preliminares Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 12/40 • Registrar una cuenta en Openshift: https://openshift.redhat.com/ap p/account/new • Instalar el cliente de línea de comandos RHC: su ­ yum install rubygem­rhc
  11. Configurando la Línea de Comandos Openshift: Lleva tu Desarrollo a

    Otro Nivel Abdel G. Martínez L. 13/40 • Para configurar el cliente, se debe ejecutar: rhc setup • Para actualizar el cliente, se debe ejecutar: su ­ gem update rhc • Se asegura que el usuario y contraseña sean válidos. • Crea un token en la máquina local que ahorra tiempo de autenticación por 30 días. • Pregunta para crear un namespace, la parte única de la URL de las aplicaciones. • Verifica que exista un fichero público de par de llaves SSH.
  12. Creando la Primera Aplicación Openshift: Lleva tu Desarrollo a Otro

    Nivel Abdel G. Martínez L. 14/40 • Para ver la lista completa de cartridges disponibles: rhc cartridge list • Para crear una aplicación, debe ejecutar: rhc app create fudcon_latam python­2.7 • Luego de la configuración, es necesario crear una aplicación. • Se pueden crear los cartridge personalizados. • El comando clona el repositorio git en la dirección donde ejecutó el comando. • Cuando termina, te crea un Apache HTTP Server y un repositorio Git.
  13. Autoescalando Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G.

    Martínez L. 15/40 • Único PaaS que provee autoescalado en la capa de aplicaciones. • Cuando una aplicación es escalable, un balanceador de cargas llamados HAProxy se añade al mismo gear de la aplicación. • Todo el tráfico de la aplicación se enruta allí. • Si el número de sesiones activas son 16, siendo HTTP o WebSocket, Openshift crea otro application gear. • Todo esto ocurre sin intervención humana. Claro está que se establece un máximo de gears de application server para que la cuenta no se dispare. • Razones para autoescalar: • El application server, la base de datos y cualquier otro servidor no competirá por recursos. • Brinda mayor flexibilidad cuando se aumenta la carga de la aplicación. • Permite escalarlo manualmente, de ser necesario. • Para alternar entre una aplicación escalable y una no escalable, debe utilizar Application Snapshot.
  14. Moverse a un Nodo Pago Openshift: Lleva tu Desarrollo a

    Otro Nivel Abdel G. Martínez L. 16/40 • La aplicación nunca estará en espera. • Se pueden comprar más gears, es decir, más aplicaciones. • Se pueden comprar gears más grandes. • Se pueden adquirir application servers premium (JBoss EAP). • Se tiene acceso a más espacio en disco duro. • Se puede usar certificados SSL con los dominios personalizados. • Mayor soporte técnico.
  15. Clonando Código Localmente Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 17/40 • Cuando creas una aplicación con el comando RHC, se crea un nuevo repositorio Git que será clonado localmente. • Para clonar luego el repositorio, ejecutar: rhc git­clone • Para ver el URL del repositorio Git, ejecutar: rhc app show ­a <nombre> • Nota: Para que esto funcione es necesario tener una llave SSH.
  16. Modificando el Código Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 18/40 • Se puede modificar utilizando un editor de línea de comandos, un editor gráfico, o un IDE. • Nuestro ejemplo usará Flask. • Lo primero es añadir la dependencia en setup.py. • En este fichero incluimos el nombre y otros detalles. En este caso debe reemplazarse el valor de la línea install_requires. setup(name='Salute App', version='1.0', description='Salutes you', author='Abdel', author_email='[email protected] rg', url='http://www.python.org/sigs/dis tutils­sig/', install_requires=['Flask==0.10.1'], )
  17. Modificando el Código Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 19/40 • Otro fichero a modificar en wsgi/application. • Contiene el fichero HTML con el mensaje de bienvenida. • No se necesita el código de plantilla, por lo que se elimina. • Agregar esta línea from routes import app as application. #!/usr/bin/python import os virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/' virtualenv = os.path.join(virtenv, 'bin/activate_this.py') try: execfile(virtualenv, dict(__file__=virtualenv)) except IOError: pass # # IMPORTANT: Put any additional includes below this line. If placed above this # line, it's possible required libraries won't be in your searchable path. # from routes import app as application
  18. Auto Hook Scripts Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 20/40 • Los Openshift cartridges son diseñados para contemplar las tareas requeridos para construir y desplegar la aplicación. • Action hook script son incluidos como parte del repositorio Git, en el directorio .openshift/action_hooks. • Cada cartridge soporta diferentes hooks, dependiendo del ciclo de vida: pre_build, build, deploy, post_build, start, stop, restart, reload. • El script puede ser escrito en Shell, Python, PHP o Ruby. • Se manejan como cualquier fichero dentro del repositorio.
  19. Despliegue en Caliente Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 21/40 • Cuando se empuja el código, el cartridge en Python se detiene mientras la aplicación se construye y despliega, luego se reinicia. • Está disponible para JBoss, Tomcat, PHP, Zend, Python, Ruby. • Para habilitarlo debe agregarse: touch .openshift/markers/hot_deploy git add .openshift/markers/hot_deploy git commit ­m "Changing application to hot deploy" • wsgi/saluter.py from random import choice def salute(): return "Hola " + generate_salute() + "!" def named_salute(name): return name + ", hola " + generate_salute() + "!" def generate_salute(): first_adjs = ["amable", "capaz", "observador", "feliz", "triste"] second_adjs = ["inteligente", "amigable", "justo", "desatendido", "consentido"] nouns = ["senor", "senorita", "nino", "nina", "adolescente"] return choice(first_adjs) + " " + choice(second_adjs) + " " + choice(nouns)
  20. Despliegue en Caliente Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 22/40 • Cuando se empuja el código, el cartridge en Python se detiene mientras la aplicación se construye y despliega, luego se reinicia. • Está disponible para JBoss, Tomcat, PHP, Zend, Python, Ruby. • Para habilitarlo debe agregarse: touch .openshift/markers/hot_deploy git add .openshift/markers/hot_deploy git commit ­m "Changing application to hot deploy" • Luego ejecutar git push. • wsgi/routes.py import os from flask import Flask import saluter app = Flask(__name__) # Keeps Flask from swallowing error messages app.config['PROPAGATE_EXCEPTIONS'] = True @app.route("/") def salute(): return saluter.salute() @app.route("/<name>") def salute_name(name): return saluter.named_salute(name) if __name__ == "__main__": app.run()
  21. Cartridge Adicionales Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 23/40 • Para tareas programadas, usar rhc cartridge add cron. • Para listar todos los cartridges, usar rhc app show. • Debemos agregar el script: chmod +x .openshift/cron/minutely/hi git add .openshift/cron/minutely/hi git commit ­m “Agregando script” git push • Para ver las últimas líneas de las bitácoras, usar rhc tail. #!/bin/bash # .openshift/cron/minutely/hi MIN=$(date '+%M') LOG=${OPENSHIFT_PYTHON_LOG_DIR}/hi.log MSG1="Hola mundo" MSG2="Adios mundo" if [ $MIN == 15 ]; then echo ­e `date` $MSG1 >> $LOG fi if [ $MIN == 45 ]; then echo ­e `date` $MSG2 >> $LOG fi exit
  22. Cartridge Adicionales Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 24/40 • Para soportar la integración continua se utiliza una instancia de Jenkins. • Antes de configurarlo se debe crear un servidor de Jenkins como una aplicación: cd .. rhc app create jenkins jenkins­1 • Luego se incluye el cliente de Jenkins en la aplicación: cd fudcon_latam rhc cartridge add jenkins­client­1 • Para monitorizar la aplicación se debe acceder a la URL con el sufijo /metrics.
  23. Encontrando Cartridges Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 25/40 • Para ver los cartridges oficiales soportados, ejecutar: rhc cartridge list • Si quiere agregar un cartridge válido pero no oficial, ejecutar: rhc cartridge add https://raw2.github.com/mfojtik/openshift­origin­ cartridge­monit/master/metadata/manifest.yml • Si quiere eliminar un cartridge se hace con el nombre referencia: rhc cartridge remove mfojtik­monit­5.6
  24. Acceso SSH Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 26/40 • El contenedor de la aplicación, gear, se accede mediante ssh. • Para ver el URL de SSH, ejecutar: rhc app show ­a fudcon_latam • Para conectarse SSH, ejecutar: rhc ssh • Importaremos un SQL en nuestra base de datos: psql ­f import.sql. DROP TABLE IF EXISTS short_adjective; DROP TABLE IF EXISTS long_adjective; DROP TABLE IF EXISTS noun; BEGIN; CREATE TABLE short_adjective (id serial PRIMARY KEY, string varchar); CREATE TABLE long_adjective (id serial PRIMARY KEY, string varchar); CREATE TABLE noun (id serial PRIMARY KEY, string varchar); INSERT INTO short_adjective (string) VALUES ('artless'); INSERT INTO short_adjective (string) VALUES ('bawdy'); INSERT INTO short_adjective (string) VALUES ('beslubbering'); INSERT INTO long_adjective (string) VALUES ('base­court'); INSERT INTO long_adjective (string) VALUES ('bat­fowling'); INSERT INTO long_adjective (string) VALUES ('beef­witted'); INSERT INTO noun (string) VALUES ('apple­john'); INSERT INTO noun (string) VALUES ('baggage'); INSERT INTO noun (string) VALUES ('barnacle');
  25. Variables de Entorno Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 27/40 • Para agregar una variable de entorno personalizada, ejecutar: rhc env set API_USERNAME=admin API_PASSWORD=secret ­a fudcon_latam • Para listar las variables de entorno personalizadas, ejecutar: rhc env list ­a fudcon_latam • Para eliminar una variable de entorno personalizda, ejecutar: rhc unset API_PASSWORD ­a fudcon_latam • Para mostrar el valor de una variable de entorno personalizada: rhc env show API_USERNAME ­a fudcon_latam • Para sobreescribir las variables de entorno pre-configuradas, ejecutar: rhc env set OPENSHIFT_SECRET_TOKEN=new_token
  26. Usando Marcadores Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 28/40 • Se explicó en la sección Despliegues en Caliente. • Éste es un ejemplo: touch .openshift/markers/force_clean_build git add .openshift/markers/force_clean_build git commit ­m “Agregando marcador” git push
  27. Declaración de Dependencias Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 29/40 • Se explicó en la sección Modificando el Código. • Cada lenguaje de programación utiliza su mecanismo de dependencia de construcción: Java (Maven), Python (Pip), Ruby (Gem), Node.js (NPM), PHP (Pear), Perl (CPAN). • Las dependencias se incluyen en diferentes ficheros, dependiendo del lenguaje de programación: Java (pom.xml), Python (setup.py), Ruby (gemfile.lock), Node.js (package.json), PHP y Perl (deplist.txt).
  28. Conectándose a la Base de Datos Openshift: Lleva tu Desarrollo

    a Otro Nivel Abdel G. Martínez L. 30/40 • Agregar al fichero saluter.py: import psycopg2 ... def get_cursor(): #open a connection conn = psycopg2.connect(database=os.environ['OPENSHIFT_APP_NAME'], user=os.environ['OPENSHIFT_POSTGRESQL_DB_USERNAME'], password=os.environ['OPENSHIFT_POSTGRESQL_DB_PASSWORD'], host=os.environ['OPENSHIFT_POSTGRESQL_DB_HOST'], port=os.environ['OPENSHIFT_POSTGRESQL_DB_PORT'] ) #get a cursor from the connection cursor = conn.cursor() return cursor
  29. Conectándose a la Base de Datos Openshift: Lleva tu Desarrollo

    a Otro Nivel Abdel G. Martínez L. 31/40 • Agregar al fichero saluter.py: def close_cursor(cursor): conn = cursor.connection cursor.close() conn.close() def get_word(cursor, table): sql = "select string from " + table + " offset random()* (select count(*) from " + table + ") limit 1;" cursor.execute(sql) result = cursor.fetchone() return result[0]
  30. Conectándose a la Base de Datos Openshift: Lleva tu Desarrollo

    a Otro Nivel Abdel G. Martínez L. 32/40 • Agregar al fichero saluter.py: def generate_insult(): local_cursor = get_cursor() final_insult = get_word(local_cursor, "short_adjective") + " " + get_word(local_cursor, "long_adjective") + " " + get_word(local_cursor, "noun") close_cursor(local_cursor) return final_insult
  31. Consultando la Cuota Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 33/40 • Las ubicaciones donde se consume almacenamiento son: /data, tmp, repositorio Git, bitácoras, datafile de base de datos. • El comando para ver cuánto espacio se ha consumido es: rhc app show fudcon_latam –gears cuota
  32. Despliegues Manuales Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 34/40 • Para deshabilitar los despliegues automáticos, el comando es: rhc app­configure ­­no­auto­deploy • Para habilitar los despliegues automáticos, el comando es: rhc app­configure ­­auto­deploy
  33. Historia de Despliegues Openshift: Lleva tu Desarrollo a Otro Nivel

    Abdel G. Martínez L. 35/40 • Para mantener una cantidad de despliegues, el comando es: rhc app­configure ­­keep­deployments 3 • Para listar los despliegues guardados, el comando es: rhc deployment list • Para activar un despliegue particular, el comando es: rhc deployment active <id>
  34. Application Snapshots Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 36/40 • Exporta el estado de la aplicación, incluyendo el código del repositorio, dumps SQL de las bases de datos, $OPENSHIFT_DATA_DIR y cualquier otro cartridge. • Para guardar el snapshot, ejecutar el comando: rhc snapshot save • Para restaurar el snapshot, ejecutar el comando: rhc snapshot restore
  35. Manejando Múltiples Llaves SSH Openshift: Lleva tu Desarrollo a Otro

    Nivel Abdel G. Martínez L. 37/40 • Para agregar una llave SSH: rhc sshkey add miamigo /home/miamigo/id_rsa.pub • Para remove unar llave SSH: rhc sshkey remove miamigo
  36. Trabajo Colaborativo Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 38/40 • Agregando la llave SSH es una manera de permitir el trabajo colaborativo. Sin embargo, está limitado. • Para ver a qué dominios tengo acceso, ejecutar rhc domain list • Las membresías se manejan por roles: view, edit y admin. • Para agregar un miembro, ejecutar: • rhc member add [email protected] ­n leafhat ­­role view • Para eliminar un miembro, ejecutar: rhc member remove [email protected] ­n leafhat
  37. Otras Características Openshift: Lleva tu Desarrollo a Otro Nivel Abdel

    G. Martínez L. 39/40 • WebSockets • SSH Port Forwarding • URL personalizado • Addressable Ports • Otros Almacenamientos • Flujos de Trabajo