Anda di halaman 1dari 41

UNIVERSIDAD MAYOR DE SAN SIMON

FACULTAD DE CIENCIAS Y TECNOLOGIA


DIRECCIÓN DE POSGRADO

“HERRAMIENTAS DE AUTOMATIZACIÓN E
INFRAESTRUCTURA COMO SERVICIO”

TRABAJO FINAL PRESENTADO PARA OBTENER EL CERTIFICADO


DE DIPLOMADO EXPERTO EN DESARROLLO DE APLICACIONES
EMPRESARIALES 1RA VERSIÓN
.

POSTULANTE : Yussen Julio Solis Garro


TUTOR : MSc. Richard Félix López Fulguera

Cochabamba – Bolivia
2018
Gracias a mi familia haber sido mi sostén en

todo este proceso, gracias a su paciencia y

apoyo he podido alcanzar un logro muy

importante y culminar con una etapa

fundamental en mi vida profesional.

ii
Tabla de Contenido

TABLA DE CUADROS, GRAFICOS Y FIGURAS vi

Resumen 1

Introducción 2

1 Generalidades 3

1.1 Antecedentes Generales 3

1.2 Antecedentes Específicos 4

2 Metodología 5

3 Computación en la Nube 6

3.1 Características de computación en la nube 6

3.2 Modelos de servicio en la computación en la nube 7

3.2.1 Infraestructura como servicio (IaaS) 8

3.2.2 Software como servicio (SaaS) 9

3.2.3 Plataforma como servicio (PaaS) 9

4 Infraestructura como código 10

4.1 Características de infraestructura como código 10

5 Gestión de configuraciones 11

5.1 Características de la Gestión de Configuraciones 11

iii
6 Herramientas de gestión de configuraciones 12

6.1 Chef 13

6.1.1 Definición y características 13

6.1.2 Arquitectura de Chef 14

6.2 Puppet 17

6.2.1 Definición y características 17

6.2.2 Arquitectura de Puppet 19

6.3 Ansible 24

6.3.1 Definición y características 24

6.3.2 Arquitectura de Ansible 25

7 Herramientas de aprovisionamiento de infraestructura 29

7.1 Terraform 29

7.1.1 Definición y características 29

8 Análisis de similitudes y diferencias entre las herramientas 31

9 Análisis y Lógica para el uso de herramientas de automatización en el modelo de servicio

“Infraestructura como servicio” 32

10 Conclusiones 34

11 Bibliografía 34

iv
v
TABLA DE CUADROS, GRAFICOS Y FIGURAS

Figura 1 Componentes de Chef Framework ( Sharma & Soni, 2015) ......................................... 14

Figura 2 Interacciones del cliente chef con el servidor chef ( Sharma & Soni, 2015) .................. 17

Figura 3 Arquitectura de Puppet.................................................................................................... 19

Figura 4 Ejemplo e tipo archivo en Puppet ................................................................................... 21

Figura 5 Ejemplo de paquete en Puppet ........................................................................................ 21

Figura 6 Ejemplo de servicio en Puppet ........................................................................................ 22

Figura 7 Ejemplo Manifest en Puppet ........................................................................................... 22

Figura 8 Ejemplo de uso de variables en Puppet ........................................................................... 23

Figura 9 Arquitectura de Ansible ( Raithatha & Mohaan, 2014) .................................................. 25

Figura 10 Ejemplo de estructura de un inventario (Keating, 2017) .............................................. 26

Figura 11 diagrama entidad relación de un playbook en asible ( Moser & Hochstein, 2017) 7) .. 27

Figura 12 Estructura de un Playbook ansible ( Raithatha & Mohaan, 2014) ................................ 28

Figura 13 ejemplo creación de servidor en AWS con Terraform.................................................. 30

Figura 14 Modelo de infraestructura como código en la nube (Shirinkin, 2017) ......................... 33

vi
Resumen

En el área de infraestructura de tecnologías las herramientas de automatización permiten realizar

operaciones las rutinarias de manera automática, para este cometido hace uso de la gestión de

configuraciones e infraestructura como código.

En la computación en la nube uno de los modelos de servicio más utilizado por las empresas y

organizaciones es la infraestructura como servicio por sus características y la flexibilidad de

administración y configuración que ofrece respecto a los otros modelos de servicio.

Uno de los mayores retos al momento de automatizar el despliegue de recursos de infraestructura

en proveedores de infraestructura como servicio es contar con herramientas que realicen el de

despliegue de automático de infraestructura y herramientas que realicen la gestión automática

configuraciones.

Chef, Puppet y Ansible son herramientas de automatización de configuraciones que se integran a

los servicios ofrecido por proveedores de infraestructura como servicio, mientras que Terraform se

presenta como una alternativa como herramienta de aprovisionamiento de infraestructura.

1
Introducción

Según el instituto nacional de tecnologías NIST1 “La computación en la nube es un modelo que

permite el acceso conveniente a través de la red a un grupo compartido de recursos informáticos

configurables (redes, servidores, almacenamiento, aplicaciones y servicios) que se pueden

aprovisionar y liberar rápidamente con un mínimo esfuerzo de gestión o interacción del proveedor

del servicio.”. Esta forma de compartir recursos a través de internet ha abierto nuevas posibilidades

a empresas quienes debían invertir grandes cantidades económicas y de esfuerzo el mantenimiento

de sus infraestructuras informáticas o centros de datos, sin embargo, con este nuevo modelo de

negocio escalable que se enfoca ofrecer recursos de infraestructura de tecnologías compartidos a

la empresas, instituciones o personas y que estas paguen solo por los servicios o recursos que

utilizan, hace que muchas de las empresas dejen de hacer inversiones de mantenimiento de sus

instalaciones para migrar sus infraestructuras a la nube y así centrarse en la administración de

recursos ya sea en infraestructuras de servicio público, privado y en la mayoría de los casos

híbridos.

Una de las mayores dificultades que ha enfrentado el área de Tecnologías de Infraestructura

conocida por su sigla en inglés de IT es poder contar con herramientas que ayuden a reproducir,

aprovisionar recursos de infraestructura de manera automatizada sean dentro de ámbitos

de desarrollo o de despliegue de productos, por lo general se presentan problemas de configuración

tanto de software o hardware en relación a los ambientes donde se desarrollaron los productos y la

computación en la nube no es ajena a este tipo de problemas.

1
Siglas en inglés para “National Institutes of Standards and Technology”.

2
Dentro de la cultura de DevOps2, se establece como parte fundamental el desarrollo y las entregas

continua de producto o servicios por lo que proveer de infraestructuras tecnológicas no es una

excepción. En la nube, la virtualización, la gestión de configuraciones y la Infraestructura como

código proporcionan principios, prácticas y diseños de uso de tecnologías de manera eficiente, sin

embargo, contar con herramientas de automatización y conocimientos de uso de estas herramientas

que hagan uso de estas metodologías para así poder brindar recursos de infraestructura de manera

continua y oportuna, son de vital importancia y pueden determinar el éxito o no de implementar la

infraestructura como servicio en la nube .

En la presente monografía se pretende hacer un análisis de las características de algunas

herramientas automatización de infraestructura como código (Chef, Puppet, Ansible y Terraform).

Con esto se pretende ayudar a las personas que están iniciando con en el uso de herramientas de

automatización de infraestructura orientados a la nube a tener una idea más clara de que

herramientas pueden ser utilizadas para este propósito.

1 Generalidades

1.1 Antecedentes Generales

La computación en la nube y la virtualización trajeron consigo nuevas oportunidades para el área

de infraestructura de tecnologías dentro las organizaciones, permitiéndoles simplificar sus

operaciones de aprovisionamiento, despliegue, mantenimiento y configuración de servicios, los

problemas que se presentaban podían ser fácilmente detectados y resueltos a tiempo permitiendo a

los equipos de IT emplear menor tiempo y esfuerzo en este tipo de trabajos.

2
Acrónimo en inglés de development (desarrollo) y operations (operaciones).

3
Sin embargo este tipo de operaciones también trajo consigo la necesidad de nuevos conocimientos

y la necesidad de poder administrar y mantener el nuevo modelo de infraestructura en la nube por

parte de los encargados de IT3. Si bien las existen herramientas facilitan mucho el trabajo, poder

contar con los conocimientos necesarios de uso estas herramientas y su aplicación a modelos de

servicio en la nube de forma automatizada representa un reto y en muchos casos puede llegar a

retrasar los despliegues e implementación de las operaciones del área de IT.

1.2 Antecedentes Específicos

Si bien la computación en la nube se proyecta como una alternativa viable para solucionar muchos

de los problemas por los que atraviesan las organizaciones en especial en el aspecto económico,

para implementar este nuevo modelo de negocio es necesario contar con conocimientos y

fundamentos de computación en la nube, su arquitectura y que modelos de servicio pueden ser

implementados.

Un método que ha sido utilizado por los encargados de infraestructura de tecnologías para tratar de

automatizar procesos repetitivos de configuraciones y despliegue de recursos cuando se necesita

brindar ambientes idénticos a un equipo de desarrollo o poder reproducir un escenario específico

de forma automatizada, se basa en crear archivos de código donde se colocan los comandos

necesarios para instalar todas las dependencias dando paso al concepto de infraestructura como

código la cual por sus características permite estructura la infraestructura en formatos legibles y

entendibles.

3
Acrónimo en inglés para Information Technology (Tecnologías de Información).

4
Otro aspecto importante a considerar cuando se trata administrar los recursos de infraestructura a

través de infraestructura como código es la gestión de configuraciones, de manera que se pueda

asegurar la calidad y se pueda hace un control de los cambios que puedan existir en los archivos de

configuración de infraestructura, este tipo de gestión es usada actualmente por muchas de las

herramientas de automatización de código por lo que resulta importante entender este enfoque.

Actualmente en el mercado de la computación en la nube existen varias herramientas que nos

ayudan a mantener y automatizar las operaciones de infraestructura ya sea en redes públicas como

AWS de Amazon o Asure de Microsoft, quienes brindan sus propias herramientas y la

posibilidades de implementar infraestructura código, así como también herramientas de código

abierto las cuales pueden ser usadas tato en redes públicas, privadas o híbridas, algunas de las

herramientas de código abierto son Ansible, Puppet, Chef, Terraform las cuales poseen diversas

características que equivalen o difieren unas de otras, es necesario tener un conocimiento acerca

de las características de cada herramienta, sus diferencias y su aplicación en el modelo de

infraestructura como servicio.

2 Metodología

Para el presente trabajo se utilizarán los siguientes métodos de investigación:

 Método Bibliográfico, debido a que se realizara la lectura y compilación de libros

relacionados al tema de estudio.

 Método Analítico, debido a que se procederá a revisar y analizar ordenadamente

documentos relacionados al tema de estudio.

5
3 Computación en la Nube

Según el instituto nacional de tecnologías NIST “La computación en la nube es un modelo que

permite el acceso conveniente a través de la red a un grupo compartido de recursos informáticos

configurables (redes, servidores, almacenamiento, aplicaciones y servicios) que se pueden

aprovisionar y liberar rápidamente con un mínimo esfuerzo de gestión o interacción del proveedor

del servicio.” ( Wang, Chen, Benatallah, & Rajan, 2011).

3.1 Características de computación en la nube

 Servicio bajo demanda. Esta característica hace referencia a que el usuario accede a los

servicios según sus necesidades permitiendo que pueda cancelar o dar de baja el servicio

cuando sea requerido.

 Acceso a través de la red. Debido a el modelo de la computación en la nube, el cual se

base en ofrecer “como servicio” algún Recurso es necesario que el acceso a estos servicios

sean a través de una red, está por lo general es el internet bajo ciertos protocolos

establecidos por el proveedor del servicio, esta característica asegura que el acceso al

servicio siempre esté disponible y los recursos puedan ser accedidos desde cualquier lugar

 Conjunto de recursos o servicios. La esencia de la computación en la nube recae en la

capacidad de poder ofrecer como servicios un conjunto recursos de IT, estos recursos

pueden ser asignados o reasignados, medidos en términos de costo, administrados y

utilizados de manera eficiente. Habitualmente en los modelos de infraestructura tradicional

la utilización de los recursos de IT se establecen entre en 20% y 30%, en el modelo de

despliegues en la nube donde los recursos son compartidos por varios clientes el rango de

utilización se establece entre un 80% y 90% donde los proveedores del servicio tienen un

conjunto de recursos disponibles distribuidos a través de varios servidores en distintas redes


6
geo localizadas y en la que los costos se ajustan según las necesidades y recursos utilizados

permitiendo y priorizando la elasticidad a los clientes según sus necesidades vayan

aumentando.

 Elasticidad. La elasticidad es la capacidad de ajustarse al continuo cambio en las

necesidades de los clientes, bajo el modelo de pagar por lo que se consume es necesario

contar con un modelo que se ajuste rápidamente y de forma dinámica al crecimiento de las

organizaciones por lo que los productos y servicios que son desplegados, adquiridos y

cobrados deberán ser provistos de manera elástica.

 Medición y pago por servicio. En el modelo de computación en la nube a diferencia de

los modelos tradicionales, el uso de los recursos son administrables y medibles de forma

exacta lo que genera transparencia en los cobros entre los proveedores y los clientes

permitiendo a estos tener reportes de consumo lo que les ayuda cuantificar, calificar y

justificar el uso de recursos de IT además les permite estimar y prever su crecimiento.

3.2 Modelos de servicio en la computación en la nube

los modelos de la computación en la nube dependen mucho de cómo los servicios son ofertados,

desplegados y consumidos estos modelos generalmente se ajustan a las necesidades de los clientes

donde los productos y servicios son agrupados en arquitecturas de bloque dentro de los cuales se

diseña, construye y administra las aplicaciones e infraestructura.

Existen tres modelos que son principalmente usados: Infraestructura como servicio (IaaS) 4,

4
Sigla en inglés “Infrastructure as a service” para infraestructura como servicio.

7
Plataforma como servicio (PaaS5), Software como servicio (SaaS6) los cuales si bien cumplen con

la definición de computación en la nube, difieren en cómo sus características técnicas, económicas

y de niveles de riesgo son afrontados, estas diferencias también se hacen presentes dependiendo si

las redes son públicas, privadas o híbridas. El uso de uno u otro modelo dependerá por lo general

del factor económico y el nivel de riesgo que estén dispuestos a correr las organizaciones que usen

estos servicios debido a que una red pública o compartida por lo general será más insegura que una

red privada o dedica.

3.2.1 Infraestructura como servicio (IaaS)

la infraestructura como servicio es la capacidad de proveer capacidad de procesamiento, memoria,

almacenamiento y red entre otros servicios donde los clientes no tiene control sobre los aspectos

físicos de la infraestructura pero puede administrar los recursos a través de software, en este tipo

de recursos es posible instalar sistemas operativos y aplicaciones entre otros.

A diferencia de los modelos tradicionales, la infraestructura como se servicio se centra en proveer

a los clientes solo los recursos necesarios para correr sus aplicaciones o servicios evitando gastos

en infraestructura que no vayan a ser aprovechados de manera óptima, el acceso a estos recursos

por lo general es a través de una red donde se accede a una instancia de virtualizada de

infraestructura.

Si bien con este modelo las tareas de mantenimiento de equipamiento físico son liberadas los

administradores aún tienen que realizar las tareas de configuración e instalación de recursos.

5
Sigla en inglés “Plataform as a service” para plataforma como servicio.
6
Sigla en inglés “Software as a service” para software como servicio.

8
Algunos de los proveedores más importantes de este tipo de servicio son Amazon con AWS,

Microsoft con Microsoft Asure y Rackspace.

3.2.2 Software como servicio (SaaS)

software como servicio se basa en proveer a los clientes una solución funcional completa de una

aplicación donde ellos no se tengan que preocupar de la infraestructura y mantenimiento de la

aplicación sino del uso y las configuraciones de esta, favorece en el acceso y uso desde cualquier

dispositivo y en la adquisición de las licencias de uso algunos producto comunes a este tipo de

servicio son software de ofimática, gestores de relacionamiento con clientes (CRM) y Sistemas de

planificación de recursos (ERP).

3.2.3 Plataforma como servicio (PaaS)

Plataforma como servicio se enfoca a proveer entornos de despliegue de aplicación para

desarrolladores donde estos puedan probar y ejecutar estas aplicaciones sin la necesidad de

preocuparse por el manejo y administración de la infraestructura o la instalación de lenguajes de

programación y librerías necesarias para correr sus productos de software.

Si bien anteriormente existían servicios como los de Google Engine, Microsoft Asure los cuales

ofrecían este servicio estos estaban limitados a lenguajes de programación como ser Python 7y

.Net respectivamente, actualmente el mercado es más flexible y los desarrolladores pueden

ensamblar las plataformas con los lenguajes de programación de su preferencia, bases de datos y

librerías necesarias para correr sus aplicaciones.

7
Python, lenguaje de programación.

9
Las interfaces de programación de aplicaciones (API8s) son muy aprovechadas por los proveedores

de plataformas como servicio las cuales ofrecen a sus clientes API’s específicas y comunes para la

integración, debido a que las aplicaciones de terceros como propietarias las suelen utilizar API’s

para el acceso o la integración de sistemas los desarrolladores en este modelo de servicio solo se

enfocan en competencias e integración de sus sistemas.

4 Infraestructura como código

La infraestructura como código es un enfoque para la automatización de la infraestructura basada

en prácticas del desarrollo de software. Hace hincapié en rutinas consistentes y repetibles para

aprovisionamiento y cambio en sistemas y sus configuraciones. Los cambios se realizan en las

definiciones y luego se implementan en los sistemas a través de procesos desatendidos que incluyen

validación exhaustiva. (Morris, 2015).

4.1 Características de infraestructura como código

Entre las características más importantes de la infraestructura como código tenemos:

 Los procesos de automatización, aprovisionamiento y despliegue de infraestructura

pueden ser realizados de manera automática.

 Los archivos de configuración de infraestructura pueden ser representados en archivos

fáciles de leer y entender.

 Los archivos de configuración de la infraestructura pueden ser guardados en programas de

control de versiones lo cual permite tener un registro histórico de la infraestructura.

8
Acrónimo en inglés para interface de programación de aplicaciones (application programming interface).

10
 Se posibilita la validación de cambios en la infraestructura a través de revisiones de

control de cambios y test automatizados.

 se permite la creación de configuraciones de infraestructura reusables, documentadas y

testeadas las cuales ayudan a la escalabilidad de la infraestructura.

Existen herramientas las cuales permiten administrar la infraestructura como código entre

estas están Ansible, Chef y Puppet, la clave de poder manejar y administrar la infraestructura

en archivos de configuración radica en poder definir las configuraciones base para nuestra

infraestructura como permisos, firewall, configuraciones de acceso web o conexiones a bases

de datos y luego poder implementarlas ya sea en ambientes de desarrollo, testeo o despliegue

de productos, estas definiciones dependiendo de la herramienta que se use serán escritas en

lenguaje declarativo el cual es claro de entender para luego la herramienta ejecutar los

procedimientos necesarios para realizar las acciones descritas.

5 Gestión de configuraciones

La gestión de configuraciones surge por la necesidad de contar con herramientas que ayudan a la

gestión de cambios de configuración cuando se administran muchos servidores y la necesidad de

realizar estos cambios de manera automatizada y sistemática para garantizar que los cambios se

realicen de manera correcta y confiable. (Vargo & Taylor, 2015).

5.1 Características de la Gestión de Configuraciones

Algunas de las características más importantes de la gestión de configuraciones son:

 Consistencia. Consiste en tener la infraestructura automatizada mediante herramientas las

tareas repetitivas y rutinarias de administración y configuración permitiendo al personal

enfocarse en otros aspectos.


11
 Eficiente gestión del cambio. Permite y promueve los cambios a las configuraciones de

infraestructura y su gestión eficiente evitando el miedo al cambio que aparece cuando se

configuran los recursos de manera manual, este hecho garantiza que nuevas características

necesarias sean implementadas con mayor facilidad.

Otro aspecto importante radica que al tener servidores que se pueden reproducir fácilmente

los cambios en estos se pueden realizar de forma regular.

 Simplicidad en la reconstrucción de la infraestructura. La utilización de herramientas

de gestión de configuraciones ayudan a restablecer servicios de forma rápida debido a que

utilizan métodos automatizados pudiendo reconstruir un sistema en cuestión de minutos.

 Visibilidad. Mediante las herramientas de gestión de configuraciones se pueden registrar

de manera automática los cambios de infraestructura en los sistemas de seguimiento

permitido tener una mejor visibilidad del trabajo.

6 Herramientas de gestión de configuraciones

Las herramientas de gestión de configuraciones se enfocan la instalación de software y

configuraciones en los nodos a los cuales administran, muchas de las herramientas se basan en el

modelo servidor/cliente aunque existen algunas como Ansible la cual no utiliza clientes para

gestionar los nodos.

12
6.1 Chef

6.1.1 Definición y características

Chef es una herramienta de gestión de configuraciones escrito en Ruby9 y Erlang10 el cual

soporta una variedad de sistemas operativos, generalmente se ejecuta en Linux aunque

soporta a Windows 7 o superior Windows server, se basa en el modelo cliente/servidor

donde los clientes o nodos que administra deberán contar con una instancia de chef cliente.

Chef incluso soporta la administración de sistemas, redes y aplicaciones de entregas

continuas. ( Sharma & Soni, 2015).

Los componentes más importantes de chef y sobre los que se basa su funcionamiento son:

 El servidor chef. Es donde se guarda la configuración de los nodos.

 La estación de trabajo. Funciona como un repositorio local para el Chef Server.

 Cuchillo. El cual está instalado en la estación de trabajo sirve para cargar los libros de

recetas al servidor chef.

 Libro de recetas. Son una colección de recetas.

 Recetas. Son archivos donde se guardan tareas que ejecutaran los nodos de manera

automática.

 Los nodos. Se comunican con el servidor chef de donde obtienen las configuraciones

y tareas que ejecutaran.

9
Ruby. Lenguaje de programación.
10
Erlang, Lenguaje de programación.

13
6.1.2 Arquitectura de Chef

El entorno de trajo de Chef o Chef Framework es una combinación del servicio chef, los nodos y

la estación de trabajo, chef ejecuta trabajos sobre estas instancias las cuales trabajan

simultáneamente para realizar las tareas de automatización de infraestructura, cada instancia a su

vez posee diversos componentes los cuales son llamados herramientas chef como se puede observar

en la figura 1.

Figura 1 Componentes de Chef Framework ( Sharma & Soni, 2015)

6.1.3 Servidor Chef. El servidor chef funciona como un repositorio centralizado que contiene

las políticas de configuración para los nodos, los libros de cocina de chef y es utilizado

por otros recursos para la automatización y despliegue de configuraciones. Existen tres

tipos de chef server.

 Chef server anfitrión. el cual es ofrecido por empresa Opscode como software como

servicio.

14
 Chef server privado. El cual es usado por empresas en sus redes privadas

 Chef server de código abierto. El cual es una versión gratuita de chef

6.1.4 Libro de Cocina. Es el corazón del servidor chef, son directorios donde se almacenas las

recetas, archivos y librerías. Define todos los pasos que serán usados para el despliegue de

recursos o aplicaciones. También contiene todas las configuraciones que serán usadas

para cada nodo.

Los libros de cocina tienen las siguientes funcionalidades:

6.1.4.1 Recetas. Son la base lógica de configuración de chef, tiene un objetivo especio y están

Ruby11 , hacen referencias a archivos, paquetes o plantillas, son almacenados en los

libros de cocina.

6.1.4.2 Atributos. Representan características de un nodo y están almacenados en los libros de

cocina.

6.1.4.3 Versiones. Son archivos que describen la versión de la configuración los estados de

conexión con los ambientes.

6.1.5 Estación de trabajo. La estación de trabajo es desde la cual se provee el código chef al

servidor chef y los nodos, es donde se codifica, compila y prueba las configuraciones.

La estación de trabajo posee dos herramientas las cuales son

6.1.5.1 El cuchillo. Es una interfaz de comunicación entre la estación de trabajo y el servidor

con el cuchillo se pueden administrar:

 La estación de trabajo.

 Nodos.

11
Ruby. Lenguaje de programación.

15
 Roles.

 Libros de cocina y recetas.

 Ambientes.

6.1.5.2 El repositorio chef. Es el lugar donde se almacena el código chef y por lo general esta

sincronizado con algún sistema de control de versiones.

6.1.6 Nodos. Un nodo puede ser una maquina física, una maquina virtualizada o un instancia en

la nube la cual es administrada y configurada por el cliente de chef, los nodos son

registrados y sincronizados con el servidor para obtener las tareas y configuraciones las

cuales serán ejecutadas por el cliente de chef.

Existen dos herramientas que forma parte de un nodo:

6.1.6.1 Cliente chef. Es un programa que se encuentra en todos los nodos de la infraestructura

con chef, es el que se encarga de ejecutar las configuraciones recatadas del servidor chef

para un nodo en específico, previamente a ejecutar cualquier configuración el cliente

chef deberá ser autentificado en el servidor chef.

16
En la figura 2 se muestra las interacciones que tiene el cliente chef con el servidor chef.

Figura 2 Interacciones del cliente chef con el servidor chef ( Sharma & Soni, 2015)

6.1.6.2 Hoai. Es una herramienta que brinda información de la maquina o instancia donde está

el cliente chef esta información puede ser:

 Detalles del sistema operativo

 Información del dominio

 Detalles de la red

 Procesador y memoria

 Información del kernel

6.2 Puppet

6.2.1 Definición y características

Puppet es una herramienta gestión de configuraciones multiplataforma de código abierto

desarrollado por Puppetlabs, es utilizado por desarrolladores y administradores de servidores para

administrar configuraciones de datos, procesos, usuarios, servicios entre servidores, se basa en el

17
modelo Maestro/Agente donde cada recurso o nodo a ser administrado deberá contar con una

instancia del agente Puppet instalada.

Puppet utiliza lenguaje declarativo a para la realizar las configuraciones en los servidores , esto

quiere decir que es necesario que sea declarado el estado final deseado del sistema y no así los

pasos a seguir para llegar a ese estado como se puede observar en el ejemplo.

package{“apache2”:
ensure => installed,
}

Puppet puede ser implementado en tanto en una computadora personal que tenga un sistema Linux

como también en puede ser utilizado para administrar e implementar infraestructura en plataformas

como Amazon Web Services AWS, OpenStack DevStack, VMware o Vagrant.

Debido a su estructura Maestro/Agente, cada agente periódicamente solicitará a el nodo maestro

su configuración, el nodo maestro enviara el archivo de configuración o Manifest para el nodo

específico, una vez el Agente obtenga el archivo de configuraciones ejecuta y aplica esta

configuración.

18
6.2.2 Arquitectura de Puppet

Como se muestra en la figura 3. Puppet tiene una arquitectura maestro/agente y hace uso de

software adicional para la orquestación de recursos de infraestructura.

Puppet
Puppet Agent
MCollective
master Puppet
Agent

Figura 3 Arquitectura de Puppet (Uphillis, Franceschi, Soriano Pastor, Frank, & Alfke, 2017).

La estructura básica de Puppet sigue la siguiente estructura:

 Agentes Puppet.

Los agentes son paquetes de software que deberán ser instalados en cada nodo servidor a ser

administrado, los agentes son responsables de mantener, configurar e instalar software en cada

nodo de nuestra la infraestructura y pueden ser configurados para ejecutarse cada cierto tiempo

definido en su configuración o pueden ser ejecutados por otras herramientas como MCollective.

19
 Puppet Maestro o Puppet Master.

El Puppet master centraliza la configuración y catálogos de la infraestructura de forma escalable,

es responsable de brindar configuraciones y definiciones a lo largo de todos los nodos así como el

software y paquetes que deberán ser instalado.

Actualmente el Puppet master ha sido reemplazado por el Puppet server el cual está escrito en

Ruby y usa Java Virtual Machine con Clojure/JRuby para su ejecución, este cambio de tecnología

permite a Puppet ser más escalable haciendo un mejor uso de recurso.

 MCollective.

Es un middleware de orquestación que permite a Puppet realizar configuraciones y administrar los

nodos en bloques, también permite obtener informes de cada uno de los nodos y sus estados de

servicios o software específico.

 Lenguaje Puppet.

El lenguaje Puppet define los recursos como tipos estos tipos definen a través de variables las

acciones o comportamiento, los principales son:

 Tipo archivo. Define un archivo a ser creado o ejecutado su nombre y la ruta para ser

accedido como se muestra en la figura 4 donde se define la ruta donde se encontrara el

archivo y a través de variables aseguramos que el archivo este presente, su contenido,

el dueño del archivo y el modo.

20
En el ejemplo se muestra la definición básica de un archivo

file{“/etc/data”:
ensure => present,
content => “este es el
contenido del archivo”,
owner => ‘root‘,
Mode=> ‘755‘,
}

Figura 4 Ejemplo e tipo archivo en Puppet (Rhett, 2016)

 Tipo paquete. Los archivos tipo paquete dependen del sistema de paquetes del sistema

operativo donde se ejecutan, según sea el sistema operativos estos comandos usados

serán “apt” para distribuciones Debian, “yum” para distribuciones RedHat u otros

comando compatibles.

En el ejemplo se especifica que el servidor web debe estar instalado.

package{“apache2”:
ensure => present,
}

Figura 5 Ejemplo de paquete en Puppet (Rhett, 2016)

 Tipo servicio. Los archivos servicios dependen del sistema de paquetes del sistema

operativo donde se ejecutan como se puede observar en la figura 6 se especifica que el

servicio web debe estar presente y se usa el comando “apache2” debido a que se

ejecutará en un sistema basado en Debian y mediante la variable ensure se asegura que

el servicio esté corriendo.


21
service{“apache2”:
ensure => running,
}

Figura 6 Ejemplo de servicio en Puppet (Rhett, 2016)

 Puppet Manifest.

Es una archivo que describe cómo los recursos deberán ser configurados e implementados en

los nodos y está escrito en el lenguaje de configuración de Puppet y hacen referencia a los

módulos, los cuales a su vez son pedazos de código reutilizable que pueden ser desarrollados o

descargados.

En la figura 7 se muestra un Manifest donde se configura una servidor web para un sistema

basado en Debian, inicialmente se asegura que apache este instalado, luego se configura el

VirtualHost de apache para finalmente asegurarse que el servicio de apache esté corriendo.

package{“apache2”:
ensure => installed,
}

file{“/etc/apache2/sites-enabled/000-default.conf”:
ensure => file,
content => “<VirtualHosto *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
Customlog ${APACHE_LOG_DIR}/access.log
combined
</VirtualHost>”,
owner => ‘root‘,
Mode=>
Figura 7 Ejemplo Manifest ‘755‘, (Uphillis, Franceschi, Soriano Pastor, Frank, & Alfke, 2017)
en Puppet
}

service{“apache2”:
ensure => running,22
}
Dentro de los manifest también podemos hacer uso de variable y operadores condicionales para

ejecutar uno u otro módulo dependiendo del sistema operativo que se esté ejecutando en el nodo o

según la necesidad de configuración, la figura 8 muestra un ejemplo de cómo se pueden usar

variables para instalar un paquete según el tipo de sistema operativo que se tenga.

case $::opetarinsystem {
‘Ubuntu’: {
package{“apache2”:
ensure => installed,
}
‘RedHat’:{
package{“httpd”:
ensure => installed,
}
}
}
Figura 8 Ejemplo de uso de variables en Puppet (Rhett, 2016)

 Módulos. Son pedazos de código, archivo y plantillas estructurados y reutilizables.

 PuppetDB. Es una base de datos que almacena información de los nodos que están

conectados al Puppet master.

 Hiera. Es un repositorio de información de los nodos el cual permite categorizarlos de

manera jerárquica.

 Facter. Es una herramienta que brinda información de los nodos como:

 Detalles del sistema operativo.

 Información del dominio.

 Detalles de la red.

 Procesador y memoria.

 Información del kernel.

23
6.3 Ansible

6.3.1 Definición y características

Ansible es un motor de orquestación de tareas para el área de infraestructura de tecnologías (IT),

a diferencia de otras herramientas similares como Puppet o Chef no necesita de ningún software

adicional o agente a ser instalado en las máquinas que administra por lo que los requerimiento y

las configuraciones realizadas son mínimas, utiliza YAML12 para ejecutar comando y se comunica

con los recursos de infraestructura a través de SSH13 además de poder ser integrada con otras

herramientas como Docker o Vagrant para proveer infraestructura automatizada. ( Raithatha &

Mohaan, 2014).

Entre sus principales características tenemos:

 Sin agente. la administración de los host es realizada a través de SSH o llamadas

a API’s.

 Minimalista. para la administración de nueva máquinas remotas no es necesario

instalar software adicional debido a que los requerimientos de Ansible son contar

con SSH y Python los cuales vienen preinstalados en las máquinas Linux.

 Descriptivo. las tareas e infraestructura están implementadas en YAML el cual es

un lenguaje caracterizado por ser descriptivo y entendible.

12
Sigla en ingles para Ain't Markup Language.
13
Acronimo en inglés para Secure Shell.

24
 Simple. Ansible es fácil de instalar, configurar y la curva de aprendizaje es baja

debido a que es una herramienta intuitiva para aprender.

 Fácil de usar. la implementación, automatización y uso de sistemas de IT es

relativamente fácil.

 Modular. Ansible al ser modular puede integrarse con otras herramientas por lo

que es compatible con programas propietarios o gratuitos de distribuciones Linux,

Windows o plataformas de computación en la nube como EC2, JIRA, Jenkins,

Bamboo, Microsoft Azure, DigitalOcean, Docker, Google.

 Conectable. si bien existe un soporte amplio para la integración de ansible con

software de terceros, existen algunas dependencias o requerimientos de en su

mayoría software propietarios que pueden ser integrados con Ansible a través de

la escritura de plugins.

6.3.2 Arquitectura de Ansible

Figura 9 Arquitectura de Ansible ( Raithatha & Mohaan, 2014)

25
 Ansible config. Es donde realizan las configuraciones del ambiente.

 Inventario (host inventory). Es el archivo de configuración de las máquinas o recursos de

infraestructura que administra ansible los cuales pueden ser agrupados como se muestra en

la figura 10, los inventarios a su vez pueden ser estáticos o dinámico y se estructuran

básicamente en:

 Host
 Grupo
 comportamiento

[web]
mastery.example.name

[dns]
backend.example.name

[database]
backend.example.name

[frontend:children]
web

[backend:children]
dns
database

Figura 10 Ejemplo de estructura de un inventario (Keating, 2017).

 Playbooks. Los playbooks 14son listas de tareas escritos en YAML que le dicen a Ansible
15
que hacer, estas tareas se ejecutan de manera secuencial al igual que los cookbooks en

14
Nombre en inglés de uno de los componentes de ansible.
15
Nombre en inglés de uno de los componentes de chef.

26
Chef o manifest 16 en Puppet, a su vez las tareas hacen referencia a un pedazo de código de

un módulo en específico y si bien los módulos pueden estar escritos en cualquier lenguaje

de programación las salidas estarán en JSON.

En la figura 11 se puede observar la lógica de ejecución de los playbooks.

Figura 11 Diagrama entidad relación de un playbook en Ansible ( Moser & Hochstein, 2017).

Un playbook como se muestra en la figura 12 se compone de:

16
Nombre en inglés de los manifiestos en Puppet.

27
---
- hosts: host1
Remote_user: admin-user
Tasks:

 Name: install httpd package


Yum: name=httpd state=latest
Sudo: yes
 Name: Starting httpd service
Service: name=httpd state=started
Sudo: yes

Figura 12 Estructura de un Playbook ansible ( Raithatha & Mohaan, 2014).

 hosts: acá se configura la máquina o grupo de máquinas en las que se ejecutarán las tareas

a su vez estas serán recatadas del host Inventory.

 remote_user: indica a ansible el usuario con el que se debería trabajar para realizar las

tareas.

 tasks: acá se describe la lista de tareas que se realizarán, las tareas a su vez tienen su propia

estructura la cual se compone de:

 name: nombre descriptivo de la tarea.

 paquete o servicio a ser ejecutado: dependiendo de la versión del sistema

operativo Linux la nomenclatura variara un poco por ejemplo, el manejo de

paquetes para httpd en sistemas basados en Redhat es httpd mientras que en los

sistemas basados en Debian apache2.

 módulos. los módulos son pedazos de código que Ansible ejecuta para realizar una

tarea.

28
7 Herramientas de aprovisionamiento de infraestructura

Las herramientas de gestión de aprisionamiento de infraestructura se enfocan en aprovisionar

recursos de infraestructura generalmente proveedores de infraestructura como servicio en la nube.

Algunas de las principales herramientas destinas a este propósito son:

• CloudFormation.

• Heat.

• Terraform.

En esta sección revisaremos las características de la herramienta Terraform.

7.1 Terraform

7.1.1 Definición y características

Terraform es una herramienta para aprovisionamiento de infraestructura fue creado por la empresa

HashiCorp, es compatible con un amplio número de empresas que ofrecen servicios de

infraestructura como servicio como ser AWS, Azure, Google Cloud, DigitalOcean así como

plataformas de virtualización como OpenStack o VMware. Terraform a diferencia de Chef,

Ansible y Puppet los cuales son herramientas de gestión de configuraciones de servidores, es una

herramienta de orquestación cuya labor principal es el aprovisionamiento del servidor haciendo

uso de las API’s que brinda los proveedores de servicio y dejando la labor de configuración a otras

herramientas.

Para realizar la configuración de infraestructura como código, Terraform utiliza HashiCorp

Configuration Language (HCL) el cual es un lenguaje declarativo que consiste en describir el

estado deseado de la infraestructura que se desea lograr, hace uso de los recursos y servicios que

29
brindan los proveedores mediante CLI por lo que es necesario configurar las credenciales de

identificación de acceso a utilizar los cuales serán proporcionados según el proveedor del servicio.

Los proveedores de servicios de computación en la nube brindan recursos para ser utilizados en

sus plataformas los cuales comúnmente en el modelo de infraestructura como servicio son

imágenes de sistemas operativos tanto gratuitos como pagados con configuraciones especiales ya

definidas, Terraform hace uso de estos recursos para instanciar la infraestructura configurando los

recursos y proveedores de servicio en un archivo “main.tf” según la siguiente estructura:

resource “Nombre del Recurso”{


[Configuraciones]
}

En la figura 13 se muestra una configuración básica de Terraform donde se instancia una imagen

de sistema operativo Ubuntu (ami-40d28157) proporcionada por AWS con CPU virtual y 1GB de

memoria RAM (Instance_type = “t2.micro”)

# Provider configuration
provider "aws" {
region = "us-east-1"
}

# Resource configuration
resource "aws_instance" "hello-instance" {
ami = "ami-40d28157"
instance_type = "t2.micro"
tags {
Name = "hello-instance"
}
}

Figura 13 ejemplo creación de servidor en AWS con Terraform (Shirinkin, 2017)

30
8 Análisis de similitudes y diferencias entre las herramientas

Chef, Puppet y Ansible son herramientas de gestión de configuraciones, basan su funcionamiento

en proveer configuraciones o instalar software generalmente a instancias de servidores ya

desplegados ya sea en entornos físicos como virtualizados, para este cometido hacen uso de

infraestructura como código lo cual hace que puedan administrar y configurar varias instancias de

manera automática.

Por su parte Terraform es una herramienta de aprovisionamiento de infraestructura, hace uso de las

API’s que ofrecen los proveedores para instanciar las máquinas virtuales que luego a través de una

herramienta de gestión de configuraciones son configuradas, también se puede integrar con

herramientas como Vagrant, Docker y Paker para desplegar imágenes ya predefinidas de

infraestructura.

Si bien Chef, Puppet y Ansible pueden ser utilizadas para el aprovisionamiento de infraestructura

en proveedores de servicio mediante el uso de las API’s, por su naturaleza aún existen limitaciones

en su uso, debido a que estas herramientas se centran en las configuraciones, si realizaran cambios

o actualizaciones en las características de las maquinas desplegadas en tiempo estos cambios puede

volverse un problema si no se hacen controles de versiones de las modificaciones realizadas.

Terraform por su parte no realiza cambios en la infraestructura desplegada sino que despliega una

nueva instancia con las nuevas configuraciones.

Chef y Puppet siguen el modelo cliente/servidor donde cada instancia a ser configurada deberá

contar con un agente propio de la herramienta que se use, este agente solicitará al servidor

periódicamente las instrucciones de configuración que deberían ser ejecutadas o los estados

31
deseados de configuración, y realizara cambios en sistema que administra según sea necesario de

manera automática.

A diferencia de Chef y Puppet, Ansible y Terraform no necesitan de un cliente o agente para

gestionar los recursos. Ansible utiliza Python y SSH para realizar las configuraciones en los nodos

que administra mientras que Terraform hace uso de las API’s de los proveedores y los recursos que

estos brindan para instanciar la infraestructura.

Finalmente Chef y Ansible hacen uso de lenguaje procedimental para representar los estados

deseados de configuración deseados, esto quiere decir que deben expresar todos los pasos a ser

ejecutados para llegar a un estado deseado, a diferencia de estas herramientas, Puppet y Terraform

utilizan lenguaje declarativo el cual consiste de declarar el estado deseado si preocuparse de los

pasos a seguir para conseguir ese estado.

9 Análisis y Lógica para el uso de herramientas de automatización en el modelo de

servicio “Infraestructura como servicio”

Existen tres componentes básicos a ser considerados cuando se quiere hacer uso de herramientas

de automatización en el modelo de infraestructura de una organización.

32
Figura 14 Modelo de infraestructura como código en la nube (Shirinkin, 2017)

Primeramente se debe contar con un proveedor de servicio el cual brindara recursos necesarios para

implementar nuestra infraestructura, básicamente es acá donde se encontraran desplegados los

servidores, balanceadores de carga y demás lógica de infraestructura virtualizada.

Se deberá contar con una herramienta de aprovisionamiento de infraestructura la cual se encargara

de gestionar los recursos de nuestra infraestructura.

Finalmente se deberá hacer uso de herramientas de gestión de configuraciones las cuales se

encargaran de instalar las dependencias o requerimientos a los recursos.

33
10 Conclusiones

En la presente monografía se pudo:

• Analizar los fundamentos de la computación en la nube, su arquitectura y modelos de

servicio que esta ofrece como alternativa a los modelos clásicos de infraestructura de

tecnológicas.

• Se pudo evidenciar que a través de la gestión de configuraciones y la infraestructura

como código es posible automatiza los procesos de despliegue de infraestructura.

• Se pudo analizar las características de herramientas de automatización de gestión de

configuraciones y aprovisionamiento de infraestructura.

• Se dio una visión de la lógica de implementación y uso de herramientas de

automatización en proveedores de infraestructura como servicio.

11 Bibliografía

Moser, R., & Hochstein, L. (2017). Ansible: Up and Running, 2nd Edition (pp. 1-42). O'Reilly

Media, Inc.

Raithatha , R., & Mohaan, M. (2014). Learning Ansible (pp. 1-61). Packt Publishing.

Sharma, R., & Soni, M. (2015). Learning Chef (pp. 1-57). Packt Publishing.

Wang, L., Chen, J., Benatallah, B., & Rajan, R. (2011). Cloud Computing (pp. 1-25, 74). CRC

Press.

Brikman, Y. (2017). Terraform: Up and Running (pp. 1-27). O'Reilly Media, Inc.,.

Keating, J. (2017). Mastering Ansible - second Edition (pp. 1-32). Packt Publishing.

Morris, K. (2015). Infrastructure as code (pp. 1-40). O'Reilly Media, Inc.

34
Rhett, J. (2016). Learning Pupet (pp. 3-6, 37-82). O'Reilly Media, Inc.

Shirinkin, K. (2017). Getting Started with Terraform (pp.7-38). Packt Publishing.

Uphillis, T., Franceschi, A., Soriano Pastor, J., Frank, F., & Alfke, M. (2017). Puppet: Mastering

Infrastructure Automation (pp. 3-28, 221-258). Packt Publishing.

Vargo, S., & Taylor, M. (2015). Learning Chef (pp. 1-6). O'Reilly Media, Inc.

35

Anda mungkin juga menyukai