Tecnología de contenedores

Favio Medrano  @favo

¿Por qué contenedores?

Hay retos como facilitadores de servicios

Multiples tipo de servicios

Sitios web

Apache (+módulos), mysql, php (versión ?), nginx

Bases datos

SQL (mariadb,mysql,postgrees), NonSQL(mongo,couchdb)

API backend

NodeJS, Python DJANGO, ruby,PHP

Entornos para deployment

Maquina Virtual

Servidor producción

Cluster

PC desarrollo

Cloud

¿Por qué contenedores?

Los contenedores nos sirven para desplegar nuestro microservicio

Multiples tipo de servicios

Sitios web

Bases datos

API backend

Entornos para deployment

Maquina Virtual

Servidor producción

Cluster

PC desarrollo

Cloud

Un sistema que nos permite encapsular cualquier microservicio como un contenedor ligero, portable y auto suficiente.

.. que puede ser manipulado con operaciones estándar y que se ejecuta consistentemente en cualquier plataforma.

Para los desarrolladores

  • Construye una vez, ejecuta donde sea.
    • Un entorno de ejecución limpio y portable para la aplicación.
    • No hay que preocuparse por perder dependencias.
  •  
    • Ejecuta cada aplicación en un contenedor aislado, así es posible utilizar diferentes versiones de librerías sin alterar los demás desarrollos.
    • Podemos automatizar el QA, integración, empaquetado.
    • Reducimos problemas de compatibilidad con distintas plataformas.
    • Muy, muy poca, penalizacion o " overhead" por hacer el despliegue de aplicaciones en contenedores.

Para "devops"      ¿devops dices?

  • Configura una vez, ejecuta donde sea.
    • Podemos hacer el ciclo de vida mas eficiente, consistente y repetible
    • Mejoramos la calidad del código producido por los desarrolladores
    • Soporte para la segregación de tareas (SOD)
    • Facilita metodologías como la continua integración o despliegue continuo
    • Dado que los contenedores son muy ligeros, implica una ganancia importante en rendimiento, costos, despliegue y portabilidad en comparación a la virtualización completa.

Antecedentes

Lo que dicen en docker.com

Docker es una plataforma abierta para la construcción, distribución y ejecución de aplicaciones distribuidas

docker engine

docker hub

Un runtime ligero, portable y herramienta para la distribución

Servicio cloud para compartir aplicaciones y automatizar flujos de trabajo.

Los contenedores están aislados, pero comparten OS y donde sea necesario, binarios y librerías

Docker vs VMs

Docker, posibilidades

  • Entornos de desarrollo                                                        
  • Platform as a service (PaaS)
  • Continuous integration (CI)
  • Entornos para aprendizaje
  • Herramientas para desarrolladores:
    • Imagenes de servicios
    • GUI
    • Hospedaje para contenedores

 

 

El workflow

Entorno desarrollo

Despliegue

UPS power supply 1

SNMP-Protocol

UPS power supply 2

SNMP-Protocol

Precision AC

SNMP-Protocol

Rack Sensors

SNMP-Protocol

backend agent

SNMP querys

Linux, snmp-drivers, python3, snmppy module, mongoclientpy

      mongodb

¿Arquitectura adecuada?, Linux, mongodb

frontend app dashboard

Linux, pahache httpd, mysql, php, mongodb-php, html5

Datacenter-dashboard

El workflow, con un ejemplo

El workflow, con un ejemplo:

Dockerfile - mongodb

01 FROM alpine:edge
02 
03 RUN apk add --no-cache mongodb && \
04     rm /usr/bin/mongoperf
05 
06 ENV STORAGE_ENGINE wiredTiger
07 ENV JOURNALING yes
08 
09 VOLUME /data/db
10 EXPOSE 27017 28017
11 
12 COPY run.sh /
13 COPY set_mongodb_password.sh /
14 
15 RUN chmod +x /run.sh && chmod +x /set_mongodb_password.sh
16 
17 ENTRYPOINT [ "/run.sh" ] 
18 CMD [ "mongod", "--auth", "--bind_ip_all"]
# To build
$> docker build . -t docker-mongodb

# To run
$> docker run -d docker-mongodb
FROM python:alpine

# code is here
WORKDIR /app

# Dependency install
# Compiler just needed to build pysnmp package, removing after pysnmp installation
RUN apk add --no-cache gcc musl-dev
# Extra python libraries
RUN pip install pysnmp pymongo

# mibs
COPY mibs/* /usr/share/snmp/mibs/

# Convert mibs into pysnmp format
RUN mibdump.py /usr/share/snmp/mibs/*

# Removing gcc and musl-dev packages, no longer needed
RUN apk del gcc musl-dev

# run docker
CMD ["python","/app/dashboard_backend.py"]

El workflow, con un ejemplo:

Dockerfile - backend agent

El workflow, con un ejemplo:

docker host - centos OS (physical server or VM)

 

 

 

sas

 

ss

 

s

archivos mongodb

archivos backend-app

 

 

 

d

 alpine-linux image base

python3 backend-app

mongodb database eng

:27017

frontend-php dashboard

:8080

apache-httpd reverse-proxy

:80

archivos log

volume/bind

container

exposed port

host public port

Otro proyecto: Plataforma smid

Postgress

redis

nginx

contenedores

Hospedar microservicios docker

Hospedar microservicios docker

Reverse proxy

Contenedores en HPC

  • No queremos estar totalmente aislados (recursos compartidos)
  • Uso de recursos compartidos del cluster
  • Integración con manejadores de recursos (PBS, Slurm..)
  • Movilidad de cómputo
  • Reproducibilidad de flujos de trabajo

Enfoque distinto, en lugar del despliegue de microservicios buscamos:

¿Por qué no docker?

  • Seguridad, en hpc los usuarios tienen cuentas limitadas, docker utiliza un demonio linux que pertenece a root.
  • No es tan trivial integrar con manejadores de recursos

Contenedores en HPC - El problema

Dependencias, dependencias, dependencias..

Alternativas:

  1. Compila tu mismo el software que quieres correr en el cluster
  2. Manejadores de ambientes (linux modules, lmod, virtual environments)

Contenedores en HPC - Singularity

  • Instalación sencilla (compilar, .rpm, .deb)
  • Interoperable con imagenes docker y docker registry
  • Soporte nativo para MPI, GPU y redes de alta velocidad
  • Agnostico a manejadores de recursos
  • Repositorio de imágenes similar a docker-registry, singularity-hub

 

cicese-computo-contenedores

By Favio Medrano

cicese-computo-contenedores

Laminas para seminario contenedores , del plan de seminarios del departamento de computo dirección de telematica de CICESE

  • 513