Академический Документы
Профессиональный Документы
Культура Документы
Cochabamba – Bolivia
2018
Tabla of Contenido
TABLA DE CUADROS, GRAFICOS Y FIGURAS 4
Resumen 5
Introducción 6
1 Generalidades 7
2 Metodología 10
2
3
5 Conclusiones y Recomendaciones 40
6 Bibliografía 41
4
Descripción Pág.
Figura 5 – Microservicios 21
Resumen
En la presente monografía se explica los fundamentos técnicos de DevOps en cada uno de sus
procesos dentro el flujo, para poder tener claro todos los conceptos necesarios que deben ser
considerados en la cultura de DevOps y brindar el detalle de todas las herramientas necesarias que
son aplicadas a lo largo de todo el flujo. Se debe considerar que se ha tratado de mantener muchos
de los términos usados en el idioma ingles con el fin de estar mas familiarizados con la
Introducción
Hoy en día, no puede entenderse el desarrollo de aplicaciones de cualquier tipo sin un enfoque
alineado, donde las pruebas de concepto este controladas hasta el lanzamiento, pasando por el
testing y los entornos de prueba, todos los pasos involucrados requieren de la máxima agilidad
posible, y eso pasa por integrar los procesos y los equipos de programación con los de sistemas.
Es que ahí nace una práctica de ingeniería de software que tiene como objetivo unificar el
desarrollo de software (Dev) y la operación del software (Ops), esta práctica es conocida como
DevOps.
Es importante tener claro cada uno de estos procesos, esto ayudará a establecer un paradigma el
cual será capaz de favorecer en gran manera en cada una de las etapas iterativas del desarrollo de
software.
7
1 Generalidades
¿Qué es DevOps?
Hay cientos de definiciones de DevOps. Sin embargo, la idea base detrás de todas ellas es la
misma: la de una organización alineada e integrada que facilita la aceleración del ciclo de vida de
las aplicaciones. Por eso DevOps no es algo que se pueda comprar y ponerlo en marcha, implica
DevOps surgió a partir del movimiento de desarrollo de software ágil, el cual busca desarrollar
software en ciclos pequeños y frecuentes para entregar funcionalidad a los clientes de manera
rápida, ya que los requerimientos son bastante cambiantes dado ciertos objetivos comerciales que
puede tener una compañía. Por esa razón se puede decir que DevOps y Agile suelen ir de la mano.
2007: el desarrollo de software ágil estaba ganando popularidad, pero también sufría una división
2007: Patrick Debois, un ingeniero con experiencia en desarrollo y operaciones, estaba haciendo
pruebas en un proyecto y se sintió frustrado por la gran división entre desarrolladores y operadores.
2008: Patrick Debois y Andrew Shafer se encontraron en la conferencia Agile 2008 que se llevo a
cabo en Toronto, Canadá. Iniciaron ciertas conversaciones con el fin de buscar a más interesados
2009: John Allspaw y Paul Hammond dieron una charla en Velocity Conference titulado: “10+
Despliegues por día: cooperación entre Dev y Ops en Flickr”. Patrick estaba mirando en vivo. La
2009: Patrick organizó los primeros DevOpsDays en Ghent, Bélgica; una conferencia para
Hoy en día, el movimiento de DevOps no ha dejado de crecer desde 2009, por lo que ya no es un
Cultura DevOps
Los roles tradicionales de los desarrolladores y los ingenieros operativos pueden incluso
operadores trabajan juntos para crear, usar herramientas y procesos que soportan tanto velocidad
como estabilidad.
En la era tradicional, los desarrolladores escribían el código y este era enviado al equipo de control
de calidad, el código viajaba hacia adelante y hacia atrás, entre desarrolladores y control de calidad.
9
sin fin de problemas con el código y operaciones devolvía el código para que desarrollo solucione
los problemas. Es así que el dominio de cada equipo era una caja negra para los otros equipos,
donde ningún equipo asumía cierta responsabilidad y es aquí donde surgían varias preguntas del
porque salió mal la puesta a producción, las cuales al ser analizadas para poder encontrar una
Es aquí que la era tradicional termina y nace una nueva era, donde, los desarrolladores escriben el
poco de ingenio se logra automatizar para que este código sea compilado, integrado y probado en
todo momento. Así el equipo de control de calidad puede tenerlo en sus manos casi de inmediato
y una vez este listo, inicie una implementación automatizada para producción.
Como todo esta automatizado, es mucho más fácil la implementación manteniendo las cosas
estables. Las implementaciones ocurren con mucha más frecuencia, haciendo que las
notifica al equipo inmediatamente, el equipo realiza una reversión implementando la versión más
Porque necesitamos tener equipos más felices, equipos que tengan más tiempo innovando y menos
tiempo apagando incendios. Equipos que no tengan que luchar entre ellos, sino más bien
colaborarse.
Y, por último, mantener al cliente feliz, brindándoles la funcionalidad que desean de forma rápida
2 Metodología
a través de una amplia búsqueda de: información, conocimientos y técnicas sobre una
cuestión determinada.
conclusiones.
como referencia, de tal manera que observarán hechos, platearán problemas; funcionando
así, como un nuevo punto de partida, realizado con la mayor objetividad posible, para
futuras investigaciones.
entregas continuas.
descomponiéndolo en sus partes o elementos para observar las causas, la naturaleza y los
conocer la naturaleza del fenómeno y objeto que se estudia para comprender su esencia.
Este método nos permite conocer más del objeto de estudio, con lo cual se puede: explicar,
2 http://gmorzingc.blogspot.com/2011/10/metodo-analitico-de-la-investigacion.html
12
nomenclatura de las palabras en ingles. Esto permitirá familiarizarnos con todos los términos
probarse, etc. La automatización implica seguir esos pasos y realizarlos de forma coherente
13
utilizando un script o una herramienta, las cuales pueden diferir dependiendo el lenguaje y los
3
frameworks que se usen.
Por lo general, el build automation es muy parecido a la ejecución de ciertos pasos en línea de
comandos que permiten compilar el código usando ciertos archivos de configuración. El build
Tanto como sea posible, el build automation debe ser independiente de la configuración de la
máquina en la que este construida, es decir el código deberá poder estar disponible en la máquina
• Rapidez: la automatización maneja tareas que de otro modo tendrían que hacerse
manualmente.
• Repetible: la compilación se puede realizar varias veces con el mismo resultado. Cualquier
manera consistente.
3 Framework,
es una estructura conceptual y tecnológica de soporte definido, normalmente con
artefactos o módulos de software concretos, que puede servir de base para la organización y
desarrollo de software.
14
También conocido con la sigla CI, es la práctica de fusionar frecuentemente cambios en el código
el día, generalmente con la ejecución de pruebas automatizadas para detectar cualquier problema
pruebas automatizadas.
Esto ocurre varias veces al día y si hay algún problema con la compilación, el servidor notificará
de forma inmediata y automática a los desarrolladores, esto significa que, si alguien comete un
• Hace posibles las pruebas continuas. Dado que el código siempre se puede ejecutar, los
verificadores de control de calidad pueden tener en sus manos todo a lo largo del desarrollo,
no solo al final.
simple y modular.
4
Es un lanzamiento de nuevas funcionalidades o modificaciones de codigo de acuerdo al
versionado de software.
5 Confirmar un cambio al repositorio de versiones.
16
Deployment)
Algunas empresas que realizan implementación continua, las realizan a producción varias veces
al día, por tal motivo no existe un estándar para la frecuencia con la que debe implementarse, pero
Cada versión del código pasa por una serie de etapas tales como compilación automática, pruebas
la implementación es automática.
implementación se usa con frecuencia, cualquier problema con el proceso se descubre más
fácilmente.
• Menor riesgo, cuantos más cambios se implementen a la vez, mayor será el riesgo. Las
• Reversiones confiables, en una automatización robusta las reversiones son confiables, esto
garantiza estabilidad para los clientes, y los desarrolladores pueden trabajar en la solución
código para crear y cambiar servidores, instancias, entornos, contenedores o alguna otra
infraestructura.
exactamente de la misma manera que las instancias existentes en fracciones muy pequeñas
de tiempo.
estos pequeños cambios se van acumulando con el tiempo y hacen que los sistemas sean diferentes
entre sí y más difíciles de administrar, por tanto, es necesario una adecuada gestión de
configuración.
Si se necesita actualizar un paquete de software en varios servidores, sin una buena gestión de
configuración se tendría que iniciar sesión en cada servidor y realizar la actualización. Sin
20
embargo, esto puede conducir a muchos problemas. Tal vez se olvidó un servidor debido a la
documentación deficiente, o tal vez algo no funciona, mientras que las versiones no coinciden
realiza la actualización.
Con una buena administración de configuración, se puede definir la nueva versión del paquete de
• Mantenibilidad, una infraestructura más fácil de mantener es mas fácil de cambiar de una
manera estable.
• Estandarizar, es más fácil mantener una configuración estándar en una multitud de hosts.
Con la orquestación, administrar una infraestructura compleja es como ser un director de una
orquesta, donde en lugar de crear una pieza de infraestructura, el director simplemente señala lo
que se debe hacer y la orquesta lo realiza. El director no necesita controlar cada detalle, son los
Como ejemplo podemos tener a un cliente que solicita mas recursos para un servicio web, debido
nuevos nodos, los ingenieros de operaciones utilizan una herramienta de orquestación para solicitar
Escalando un poco más la solución, en caso de que una herramienta de monitoreo detectara una
recursos adicionales para manejar la carga, cuando la carga disminuye nuevamente, la herramienta
vuelve a calibrar los recursos adicionales, liberándolos para que puedan ser utilizados.
• Escalabilidad, los recursos pueden aumentar o disminuir rápidamente para satisfacer las
necesidades cambiantes.
• Ahorro de tiempo, ciertas tareas y flujos de trabajo se pueden automatizar, lo que libera
proporcionan una mejor idea de la cantidad de recursos que utilizan software, servicios o
clientes.
22
la infraestructura. Las herramientas de monitoreo recopilan datos sobre cosas tales como: uso de
Los datos recopilados se presentan en diversas formas, como cuadros y gráficos, o como
Para entender mejor el contexto de monitoreo, podemos poner como ejemplo el siguiente
escenario: el rendimiento en el sitio web esta empezando a degradarse, mediante una herramienta
herramienta notifica al administrador para que pueda intervenir antes de que ocurra un 6timeout.
Como análisis post error, se puede ver que algo pudo haber salido mal en el último despliegue a
• Recuperación rápida, cuanto antes se detecte el problema, la solución también será rápida.
• Mejor análisis de la causa raíz, cuantos más datos se tenga, más fácil será determinar la
• Visibilidad en todos los equipos, buenas herramientas de monitoreo brindan datos útiles
producción.
• Respuesta automatizada, los datos de supervisión se pueden usar junto con la orquestación
fallas.
La arquitectura de micro servicios divide una aplicación en una colección de servicios pequeños,
donde cada micro servicio implementa sólo una parte pequeña de funcionalidad general de una
aplicación. Estos micro servicios están ligeramente acoplados, es decir diferentes micro servicios
interactúan entre si utilizando API estables y bien definidas, donde son independientes uno del
otro.
• Flexibilidad tecnológica, no necesita utilizar los mismo lenguaje y tecnologías para cada
la carga de recursos.
24
Figura 5 – Microservicios
Fuente: https://hackernoon.com/microservices-are-hard-an-invaluable-guide-to-microservices-
2d06bd7bcf5d
DevOps es más que una cultura que enfatiza en la colaboración y la comunicación entre los equipos
Por tanto, esta colaboración se basa principalmente en herramientas que aseguren al mismo tiempo
Para tener un poco mas claro el rol de las herramientas en DevOps, debemos remarcar los
siguientes puntos:
• Las herramientas permiten ejercer velocidad en los procesos de DevOps, sin descuidar la
estabilidad.
25
• Parte de lo que se hace como DevOps es identificar las herramientas que se necesita y
aprender a usarlas.
Para poder conocer un poco más sobre las herramientas utilizadas en el flujo de DevOps, podemos
referirnos a la “tabla periódica de herramientas de DevOps” publicado por 7XebiaLabs, el cual nos
brinda un completo panorama de las herramientas open source, free, paid, enterprise, etc.
7
XebiaLabs, es una compañia de software independiente especializada en DevOps y entrga
contínua para grandes organizaciones empresariales.
26
Cabe recalcar que en las próximas secciones se describirán algunas de las más populares
continuous integration)
Build automation, es el proceso automatizado del empaquetado de código para que este listo para
• Jenkins, la cual tiene ciertas características al ser de código fuente abierto y está basada en
java servlets.
febrero de 2005.
proyecto por parte de Oracle. Uno de los puntos claves fue la propiedad de la marca
27
diciembre de 2010. Como resultado, el 11 de enero de 2011, se hizo una votación entre los
El 7 de julio de 2016 se hizo pública la primera versión 2.x con soporte LTS.
• TravisCI, es de código fuente abierto, se integra muy bien con github y además que ejecuta
• Bamboo, es un producto enterprise desarrollado por Atlassian, por tanto, la integración con
consistente. Es una muy buena forma de implementar infraestructura como código (infraestructura
as code).
yaml, no es necesario un servidor de control, es decir que puede utilizarse desde una PC si
28
fuera el caso, tampoco requiere de agentes ya que puede usar tecnologías existentes como
Python y ssh.
• Puppet, el usuario describe los recursos del sistema y sus estados utilizando el lenguaje
una utilidad llamada Facter, y compila los manifiestos en un catálogo específico del sistema
que contiene los recursos y la dependencia de dichos recursos. Estos catálogos son
• Chef, usa una configuración procedural y además que requiere de agentes y servidor. La
configuración del servidor esta escrita en un lenguaje propio llamado DSL (domain specific
language).
• Salt, usa una configuración declarativa y que también esta orientado al uso de agentes
(conocidos como minions) y el servidor (conocido como master). Para la configuración usa
archivos yaml.
• Microsoft Hyper-V
• Citrix XenServer
29
paquete mucho mas liviano y aislado que contiene todo los necesario para ejecutar un software.
Por tanto, la ventaja de usar contenedores es mas alta que usar máquinas virtuales.
nuevo actualmente es muy usado por DevOps, debido a que tiene grandes beneficios para la
portabilidad.
y la estabilidad de las partes individuales de una aplicación, como por ejemplos, los
• SenSu, antes conocido como Nagios, usa una arquitectura servidor/agente donde los
agentes envían los datos al servidor para que este los pueda procesar y hacerlos visible de
muchas maneras.
• NewRelic, es una solución de software como servicio, además que ofrece una numerable
• AppDynamics, básicamente recolecta todos los datos de las aplicaciones para luego
análisis, los cuales permiten tener un mayor control grafico del monitoreo además de ciertas alertas
y notificaciones que son útiles en el sentido preventivo. Una muy buena herramienta con este valor
agregado es Elastic Stack, el cual ayuda a diagnosticar y detectar problemas de manera fácil.
Como se explicó anteriormente, la orquestación permite automatizar los procesos y flujos de forma
que se puede proporcionar ciertos recursos necesarios, es decir, escalar los recursos cuando se
necesiten y bajar los recursos cuando estos ya no se requieran. Esto debe hacer de forma
de docker.
• Kubernetes, es de código abierto y usa un servidor para gestionar las aplicaciones a través
de multiples hosts.
• Terraform, combina la orquestación con la infraestructura como código, trabaja bien con
La nube, son servidores remotos en internet que ofrecen servicios en lugar de tener soluciones
alojadas localmente. La cultura y practica de DevOps es muy usado en el mundo de la nube (cloud),
Cuando comparamos un servidor local y un servidor en la nube, está claro que con el servidor local
tenemos que estas pendientes de la administración por nuestra cuenta a nivel infraestructura, en
cambio con un servidor en la nube sólo debemos enfocarnos a nivel de sistema operativo, además
de la instalación y configuración.
• PaaS, la plataforma como servicio permite abstraer todo lo que está debajo de las capas de
la aplicación y datos.
En la figura 7 obtenida podemos ver a detalle de como son gestionados los servicios en la nube de
La plataforma de Google cloud dispone de algunas funcionalidades que brindan soporte para
• Google App Engine, es la plataforma como servicio de google que permite alojar
variaciones en su carga de uso, sin tener que preocuparse por administrar infraestructura
• Google Compute Engine, es la infraestructura como servicio de google que permite usar
Nos permite almacenar una cantidad ilimitada de ficheros de gran tamaño, para servirlos
• Google Big Query, es un sistema gestionado para analizar Big Data en tiempo real. Permite
ejecutar consultas SQL ad hoc sobre grandes cantidades de datos en cuestión de segundos.
Los datos se almacenan seguros, protegidos por ACL. Es una solución idónea para sistemas
de análisis de datos.
Este almacén no relacional, con soporte de transacciones y consultas, puede ser accedido
tanto desde dentro de la plataforma como desde aplicaciones externas. Es un buen sistema
para aplicaciones con modelos de datos no relacionales, que requieren alta escalabilidad y
• Google Cloud SQL, es un sistema gestionado MySQL en la nube. Permite el uso de bases
de datos relacionales para alta disponibilidad, sin tener que preocuparnos de gran parte de
la administración de las mismas. Puede ser accedido desde dentro o fuera de la plataforma.
Útil para modelos relacionales complejos, con una carga de trabajo media.
34
• Google Prediction API, permite ejecutar algoritmos de machine learning para analizar
• Google Translation API, permite detectar en que idioma esta escrito un texto o traducirlo
Azure fue anunciado en 2008 y se publicó en 2010 bajo el nombre de Windows Azure, para ser
posteriormente renombrado como Microsoft Azure en 2014. El concepto de Azure surgió como
una plataforma de cloud computing diseñada para crear, desarrollar y administrar aplicaciones,
software y servicios a través de una red global de centros de datos administrados por Microsoft.
La visión de la nube de Microsoft Azure parece estar orientada al mundo empresarial, tanto
aquellas corporaciones de mayor tamaño como a las pequeñas y medianas empresas. Por ello, la
35
mayoría de servicios son escalables y son capaces de responder a necesidades generales del mismo
modo que a necesidades particulares. Azure tiene un amplio abanico de herramientas y servicios
que puede ofrecer a los usuarios y que pueden resumirse en las siguientes categorías:
seguridad, etc.
complementarios.
Amazon Web Services, también conocida como AWS, es un conjunto de herramientas y servicios
de cloud computing de Amazon. Este servicio se lanzó oficialmente en 2006 y para junio de 2007
AWS ya contaba con una base de usuarios de aproximadamente 180 mil personas. Entre las
empresas que la utilizan se encuentran algunas como Reddit, Foursquare, Pinterest, Netflix, la
NASA o la CIA, y algunas españolas como Mapfre, el FC Barcelona o Interflora. Esto se debe
principalmente a la madurez del servicio frente a otros similares y las posibilidades que ofrece el
amplio abanico de herramientas disponibles. En la 8Guía de Cloud Computing podrá encontrar una
8 https://www.ticportal.es/guias/guia-cloud-computing
37
comparativa de todas las herramientas de Amazon Web Services con las de otras plataformas
similares.
La tendencia general para las plataformas en la nube es la de ofrecer la mayor cantidad posible de
herramientas y servicios, para que así se pueda crear todo un entorno de computación en una misma
nube. Al igual que otras plataformas como Microsoft Azure, Amazon dispone de una gran cantidad
AWS están preparados tanto para autónomos, como pequeñas y medianas empresas o grandes
corporaciones, ya que existen posibilidades para escalar las instancias o el almacenamiento según
escalado de las mismas. Amazon EC2 es el rey indiscutible dentro de los servicios de
• Bases de datos, distintos tipos de bases de datos pueden permanecer en la nube mediante
el servicio Amazon RDS, que incluye distintos tipos a elegir como MySQL, PostgreSQL,
ofrece, al que pueden unirse otros servicios como Amazon WorkDocs y Amazon
WorkSpaces.
38
archivos con acceso regular, poco frecuente o incluso como archivo. Amazon S3 es el
servicio principal.
• Internet de las cosas, para establecer conexiones y análisis de todos los dispositivos
5 Conclusiones y Recomendaciones
6 Bibliografía
- Gene Kim, Jez Humble, Patrick Debois and John Willis (2016). The DevOps HandBook.
- TechWorld (2018). Transforming Your Organization Through Agile, Scrum And DevOps Principles.