Despliegue automatizado sobre lxc

Álvaro Rodríguez Márquez

Introducción al proyecto 

Mi proyecto es un conjunto de recetas con las cuales desplegaremos un escenario de pruebas . 

Objetivos del proyecto

Conseguir un sistema:

  • Sin requisitos de hardware
  • Fácil de montar 
  • Desechable 

¿Sobre que sistema?

Recomiendo que el despliegue sea sobre Ubuntu 16.04

Homer

Barney

Lisa

Anfitrión 

Esquema:

Paquetes necesarios

  • LXC
  • Ansible
  • python-lxc
  • yum
  • git

LXC

Linux Containers es una tecnología de virtualización  a nivel del sistema operativo. 

Ejemplos

Creación de una máquina : 

Podemos entrar en la máquina : 

Y al acabar la borramos con : 

lxc-create -t debian -n ejemplo-proyecto 
lxc-console -n ejemplo-proyecto
lxc-destroy -n ejemplo-proyecto

Ansible

Ansible es una herramienta de orquestación.

Utiliza el protocolo ssh. 

Origen del nombre 

El Ansible es un dispositivo de comunicación mas rápido que la luz.

Ejemplos

Prueba con ping:

Instalación de paquete:

ansible local -m ping -u usuario -k
ansible local -m apt  -a "name=htop update_cache=yes state=present" -u root -k

Playbooks

Los playbooks son archivos con instrucciones .

Con ellos podemos instalar y configurar servicios.

Playbooks 

---
 - hosts: lxc
   become: yes
   become_user: root

   tasks:
    - name: prueba de ping + ssh
      ping:

Playbook para probar la conexión:

Ansible y Lxc

Ejemplo

Playbook para crear una máquina:

---
 - hosts: local
   become: yes
   become_user: root
   tasks:
    - name: Creación del contenedor Lisa
      lxc_container:
        name: lisa
        container_log: true
        template: centos
        state: started

Ejemplo

Preparación de la máquina:

---
 - hosts: local
   become: yes
   become_user: root
   tasks:
    - name: instalación ssh lisa
      lxc_container:
        name: lisa
        container_command: |
          yum update | yum install openssh-server sshpass sudo  -y
    - name: creación de usuario
      lxc_container:
        name: lisa
        container_command: useradd usuario -s /bin/bash -m 

    - name: configuración del usuario
      lxc_container:
        name: lisa
        container_command: |
          echo -e "usuario\nusuario" | passwd usuario
    - name: configuración de sudo
      lxc_container:
        name: lisa
        container_command: |
          echo "usuario ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Ejemplo

Instalación de un servicio:

---
 - name: instalación de httpd (apache)
   yum: name=httpd state=present

 - name: instalación de php
   yum: name=php state=present

 - name: Copiar la página de presentación
   copy: src=index.html dest=/var/www/html/index.html
---
 - hosts: lisa
   become: yes
   become_user: root
   roles:
    - httpd

Playbook que llama al rol

Tarea main.yml

Prueba en directo

deck

By alvaro-rodriguez