VM – S3lab http://s3lab.deusto.es S3lab Security Blog Wed, 06 May 2020 12:51:35 +0000 es hourly 1 https://wordpress.org/?v=5.1.5 Experimentos portables (II) – «Recetas» para VMs http://s3lab.deusto.es/experimentos-portables-2/ Thu, 01 Dec 2016 20:27:18 +0000 http://s3lab.deusto.es/?p=8676 En el post anterior conocimos Vagrant, una herramienta que nos puede ayudar a gestionar la creación de máquinas virtuales. En este post nos centraremos en otra herramienta llamaba Ansible. Se basa en el concepto de roles: sobre cada máquina virtual

The post Experimentos portables (II) – «Recetas» para VMs appeared first on S3lab.

]]>
gorrococinaEn el post anterior conocimos Vagrant, una herramienta que nos puede ayudar a gestionar la creación de máquinas virtuales. En este post nos centraremos en otra herramienta llamaba Ansible. Se basa en el concepto de roles: sobre cada máquina virtual se instalarán una serie de roles específicos. Por ejemplo, vamos a crear 3 roles, uno que instalará Docker, y otros dos adicionales que descargarán y ejecutarán una aplicación sobre contenedores de Docker.

Comencemos por el rol de Docker. Un rol se compone de una serie de tareas a ejecutar, en nuestro caso, descargar Docker del repositorio e instalarlo. Dichas tareas se especifican en un fichero .yaml.

- name: anyadir repositorio docker
yum_repository:
name: docker
description: Docker Repository
baseurl: https://yum.dockerproject.org/repo/main/centos/7/
gpgcheck: yes
gpgkey: https://yum.dockerproject.org/gpg
enabled: yes

- name: instalar docker-engine
yum: name=docker-engine state=present

De forma similar, crearemos el rol «data_serving_client», la parte cliente de nuestra aplicación Data Serving (un benchmark de cloud). Para ello, definiremos dos tareas, una que descarga la imagen del repositorio y otra que arrancará el contenedor.


#file: main.yaml - data_serving_client role
- name: get image
shell: docker pull cloudsuite/data-serving:client

- name: start data server
shell: docker run --name cassandra-client --net serving_network cloudsuite/data-serving:client [...]

El componente servidor de nuestra aplicación se creará bajo el rol «data_serving_server». No incluimos el contenido del main.yml, ya que es muy similar al anterior. Una vez definidos los roles, ahora indicaremos las máquinas virtuales. O mejor dicho, una «receta», que será un compendio de roles. En Ansible, cada receta se denomina «playbook». Todo ello se define en el fichero ansible.yaml. Aquí se pueden ver las dos «recetas», la «cliente-sansible», que ejecutará los roles «docker» y «data_serving_client», y la «receta» «servidor-ansible» que reutilizará el rol «docker» y además el de «data_serving_server»:

# file: ansible.yml
- hosts: cliente-ansible
become: yes
become_method: sudo
gather_facts: no
roles:
- docker
- data_serving_client

- hosts: servidor-ansible
become: yes
become_method: sudo
gather_facts: no
roles:
- docker
- data_serving_server

Podemos combinar fácilmente Vagrant y Ansible de la siguiente forma mediante el fichero VagrantFile: para cada Máquina virtual indicaremos la ruta al fichero ansible.yaml y al fichero inventory.


Vagrant.configure(2) do |config|
# Máquina virtual cliente
config.vm.define 'cliente' do |client|
cliente.vm.box = 'centos/7'
cliente.vm.hostname = 'nombre.midominio.es'
cliente.vm.network 'mi_red', ip: "192.168.50.3"
cliente.vm.provider 'virtualbox' do |vb|
vb.memory = '1024'
vb.cpus = 1
end
cliente.vm.provision "ansible" do |ansible|
ansible.inventory_path = 'ansible/environment/inventory'
ansible.verbose = 'vvv'
ansible.playbook = 'ansible/anomaly.yml'
end
end

# Máquina virtual servidora
config.vm.define 'servidor' do |server|
[..]
end
end

Como podemos ver, en Vagrant hemos definido 2 máquinas virtuales de nombres «cliente» y «servidor». Con Ansible tenemos dos «recetas»: cliente-ansible y servidor-ansible. Nos quedaba por ver el fichero de inventario de Ansible, en el cual definimos la relación entre máquina virtual de Vagrant y la «receta» de Ansible:


[client-ansible]
cliente

[servidor-ansible]
servidor

Combinando Ansible y Vagrant tendremos un entorno de experimentación fácilmente reproducible. Docker además nos permite reutilizar imágenes de aplicaciones existentes en el repositorio. Como nota final, Vagrant nos da la opción de crear un «snapshot» de cada máquina virtual, que guardará su estado actual para futuras ejecuciones.

The post Experimentos portables (II) – «Recetas» para VMs appeared first on S3lab.

]]>
Experimentos portables (I) – VMs con Vagrant http://s3lab.deusto.es/experimentos-portables-1/ Sun, 23 Oct 2016 17:34:27 +0000 http://s3lab.deusto.es/?p=8565 En el día a día del programador o investigador se hace necesario poder crear entornos de desarrollo o experimentación. Es altamente deseable que este entorno sea portable y fácilmente reproducible. El uso de maquinas virtuales y/o contenedores pueden ofrecernos esto

The post Experimentos portables (I) – VMs con Vagrant appeared first on S3lab.

]]>
vagrantEn el día a día del programador o investigador se hace necesario poder crear entornos de desarrollo o experimentación. Es altamente deseable que este entorno sea portable y fácilmente reproducible. El uso de maquinas virtuales y/o contenedores pueden ofrecernos esto último. Existen diversas herramientas que pueden hacernos esta tarea más liviana. En esta serie de post vamos a comenzar por conocer Vagrant.

Vagrant es una herramienta sencilla que nos permite gestionar el ciclo de vida de las maquinas virtuales. Toda la configuración la incluiremos en un fichero llamado Vagrantfile, mayormente declarativo. En el describiremos los recursos asignados a cada máquina, imagen (sistema operativo), y scripts necesarios para crear el entorno.

Vagrant es compatible con varios «proveedores», tales como VirtualBox, VMware o KVM. Adicionalmente, se ofrece un plugin para libvirt, una API que soporta diferentes plataformas de vitalización. Existen diversos repositorios para Vagrant que contienen boxes o imágenes (sistemas operativos) ya listas para descargar y ejecutar.

Una vez creado el fichero VagrantFile, podremos lanzar la maquina virtual desde línea de comandos, conectarnos a ella mediante SSH o destruirla. En muchas ocasiones nos será útil poder crear una red que conecte las maquinas. Todo ello es posible con unas pocas líneas de configuración, muy intuitivas. Aquí creamos una maquinas con CentOS, 1 core y 1GB de RAM, y que tendrá instalado Docker:

config.vm.define "server" do |server|
server.vm.box = "centos/7"
server.vm.hostname = "nombre.midominio.es"
server.vm.network "mi_red", ip: "192.168.50.3"
server.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
vb.cpus = 1
end
server.vm.provision "shell" do |s|
s.path = "instalar_docker.sh"
end

The post Experimentos portables (I) – VMs con Vagrant appeared first on S3lab.

]]>