Docker for Windows, una vista rápida del panorama actual

El pásado día 5 de mayo tuvo lugar en nuestras oficinas una nueva edición del Meetup de Docker Madrid. Gracias al equipo de DX de Microsoft España ya tenemos las sesiones disponibles en Channel 9.

En primer lugar, contamos con la participación de Ignacio Sánchez y Ramón Román de atSistemas donde me quedo sin duda con su clúster de Raspberry Pi integrado con los nuevos pipelines de Jenkins 2.0. Media hora de sesión donde ver cómo emplear Docker Swarm para la gestión de clústeres basados en Docker y la instanciación de aplicaciones basadas en microservicios. Muy útil las nuevas capacidades incorporadas en Swarm para reinstanciar los contenedores en otro nodo si el host se cae.

Tras ellos, por mi parte hice una breve introducción a cómo se encuentra el ecosistema de Docker en entornos basados en Windows. Desde los avances en Docker for Windows con Kitematic para permitirte trabajar con Docker directamente en Windows 10 con Hyper-V de forma sencilla, hasta los cambios que están llegando en la parte de Windows Server con la implementación a nivel del núcleo del soporte a contenedores.

Tenéis disponible el vídeo y la presentación

Gestión de recursos en Azure Resource Manager con políticas personalizadas

Una de las gran ventajas de Azure Resource Manager (ARM) frente al modelo de Azure Service Manager (ASM) es la capacidad de permitir una gestión mucho más detallada de los permisos de acceso a nuestros recursos por diferentes usuarios gracias al modelo Role Based Access Control (RBAC). RBAC se centra únicamente en las acciones que un usuario puede realizar dentro de una suscripción; es decir: acceder a un grupo de recursos concreto, poder gestionar únicamente máquinas virtuales, visualizar en modo lectura la información visible en el portal, etc. Sin embargo, hay ciertos escenarios que no es posible cubrir con RBAC en exclusiva.

¿Qué podemos hacer si queremos restringir en qué regiones se pueden desplegar recursos por temas legales? ¿O qué servicios son los que se puede usar o no? ¿Qué pasa si queremos seguir una nomenclatura estándar en todos nuestros recursos para facilitar la gestión? Si alguna vez os habéis preguntado algo similar, las políticas personalizadas son vuestra solución.

Continue reading Gestión de recursos en Azure Resource Manager con políticas personalizadas

Azure Load Balancer en Azure Resource Manager

Uno de los elementos claves a la hora de desplegar nuestra solución dentro de máquinas virtuales en Azure es el balanceador de carga. Esto se debe a que para estar cubiertos por el acuerdo de nivel de servicio es necesario tener nuestra aplicación ejecutándose en al menos dos máquinas virtuales dentro de un conjunto de disponibilidad. Aunque ahí de forma directa no se menciona al balanceador, es la pieza clave que hace que nuestros clientes sigan recibiendo servicio si una de nuestras máquinas falla es él.

Trabajando con el modelo de Azure Service Manager, ASM o clásico, cada vez que aprovisionábamos una nueva máquina virtual automáticamente se generaba un nuevo balanceador asociado a la misma. En el caso de Azure Resource Manager, ARM o “el nuevo”, es necesario que de forma activa nosotros creemos el balanceador y hagamos las conexiones necesarias con nuestras máquinas virtuales. Esto se debe a que un balanceador es un recurso más que se encuentra bajo el provedor de recursos de Microsoft.Network. Si queréis más detalles sobre las diferencias entre ASM y ARM podéis encontrarlo en la documentación bajo el artículo “Resource Manager Deployment Model”.

¿Cuál es el problema entonces? A día hoy no existe opción en el portal de gestión de Azure para crear un nuevo balanceador de carga. Esto nos obliga a utilizar PowerShell o las nuevas plantillas de despliegues en JSON para realizarlo. Este artículo entrará en más detalle en conocer cómo crear nuestro balanceador desde dichas plantillas y las opciones de configuración que nos ofrece este tipo de recurso.

Continue reading Azure Load Balancer en Azure Resource Manager

Cómo preparar una máquina virtual para trabajar con Docker en Azure

Las máquinas virtuales a la hora de probar cosas nuevas son muy prácticas, más si están desplegadas directamente en la nube. Gracias a ello tu equipo se mantiene limpio y no se ocupa espacio ni recursos. Preparando una sesión de introducción a los contenedores y en especial a Docker he estado preparando el entorno para hacer todas las demos en Azure. La idea es tener todas las herramientas relacionadas con Docker y su integración con Azure en un mismo lugar permitiendo de esta manera facilitar el trabajo.

La idea es instalar la versión experimental de Docker y así disfrutar de las últimas novedades de la DockerCon. Junto con ello, disponer de Machine, Compose, Swarm y también de las herramientas de línea de comandos de Azure para linux. Un pack básico para sacar todo el provecho de Docker en Azure. ¡Empecemos!

Continue reading Cómo preparar una máquina virtual para trabajar con Docker en Azure

Filtros y estrategias de planificación de un cluster con Swarm

Swarm tiene disponible a día de hoy dos estrategias para desplegar los contenedores entre los nodos de Docker del cluster: BinPacking y Random. Por defecto, Swarm utiliza la primera; la segunda únicamente escoge un nodo al azar y está pensada para tareas de depuración según indica la documentación.

En este artículo cubriremos los detalles del planificador y los filtros que se le pueden aplicar para desplegar nuestros contenedores.

Continue reading Filtros y estrategias de planificación de un cluster con Swarm

Mecanismos de descubrimiento de nodos con Swarm

En el artículo anterior sobre Swarm cubrimos uno de los mecanismos de descubrimiento de nodos que tiene. Sin embargo, la plataforma a día de hoy soporta otros gracias a un modelo extensible basado en plugins:

  • Servicio de descubrimiento alojado en Docker Hub (Hosted Discovery Service): el mecanismo utilizado en el artículo anterior.
  • Fichero de descripción del cluster.
  • Listado estático de IPs.
  • Etcd: un almacenamiento basado en claves de caracter distribuido y consistente para el descubrimiento de servicios y entornos de configuración compartida.
  • Consul: una herramienta para facilitar el descubrimiento y la configuración de servicios en tu infraestructura.
  • Apache Zookeper: un servidor open-source enfocado a la coordinación de sistemas distribuidos de forma altamente fiable.

En este artículo veremos cómo funciona dicho método de descubrimiento y cómo podemos hacer el descubrimiento de los nodos a través de otros dos métodos: un fichero de descripción del cluster y un listado de direcciones IP.

Continue reading Mecanismos de descubrimiento de nodos con Swarm

Desplegando un cluster de Docker con Swarm en Azure

En las últimas entradas en las que hablaba sobre Docker, todo el rato trabajaba contra un único servidor donde estaba alojado el motor. A la hora de realizar pruebas puede ser suficiente; sin embargo, a la hora de desplegar entornos más complejos, con alta disponibilidad y otras características de nivel empresarial, es necesario disponer de más herramientas.

El equipo de Docker está trabajando en ello con Machine, Compose y Swarm. La primera de ellas ya la cubrí en un artículo anterior, la segunda vendrá en uno futuro y la tercera es la que explicaré en este artículo.

Swarm es la solución nativa de clusterización para contenedores de Docker. Permite unificar diferentes motores como un único host virtual y desplegar en él tus soluciones. Lo mejor es que se puede gestionar desde otras herramientas de forma transparente como el propio cliente de Docker, Compose, Jenkins, etc

Vamos a ver cómo podemos montar un cluster de Docker y gestionarlo con Swarm desde cero en Azure. En lugar de utilizar las extensiones disponibles en Azure para máquinas virtuales, veremos cómo crearlo paso por paso a mano.

Continue reading Desplegando un cluster de Docker con Swarm en Azure

Utilizando los nuevos perfiles de Azure para PowerShell

Hace unos pocos días se actualizaron las herramientas de PowerShell para Azure a su última versión, la 0.8.15. Entre las novedades se encuentra una que me acaba de resultar muy útil para gestionar múltiples suscripciones de Azure desde PowerShell: los perfiles.

Nota: Si quieres actualizar tu versión de las herramientas de PowerShell o instalarlas desde cero recuerda que te resultará más fácil utilizando el script de PowerShell que creé.

Si alguna vez has intentado ejecutar un script contra múltiples suscripciones seguro que te has encontrado con las dificultades de desplegar los recursos en la suscripción correcta. Un perfil es un contenedor para agrupar una serie de suscripciones para ser usado como forma de autentificación contra los extremos de Azure. Es posible seleccionar qué perfil queremos ejecutar en cada momento de forma general para la sesión actual de PowerShell o pasándolo a cada comando con el parámetro -Profile

Podemos crear un nuevo perfil en memoria con el comando New-AzureProfile. Soporta como métodos de autenticación Azure Active Directory o Certificados. En mi caso, la segunda opción era la que buscaba. Si queréis más detalles de cómo hacerlo con Active Directory podéis consultar la documentación con Get-Help New-AzureProfile

$profile = New-AzureProfile -SubscriptionId "GUIDIdentificadorSuscripcion" -Certificate "HuellaDelCertificado"

Dicho certificado lo habremos creado previamente siguiendo las instrucciones disponibles en la documentación y lo habremos subido a través del portal de Azure. La huella del certificado lo podremos obtener de forma fácil a través de Powershell

Get-Item "Cert:\CurrentUser\My\$HuellaDelCertificado"

Una vez que tengamos nuestro perfil creado, podremos seleccionarlo para utilizarlo en nuestra sesión actual con:

Select-AzureProfile -Profile $profile

Si queremos terminar con nuestro perfil en memoria y queremos volver a emplear el que está guardado en disco podemos hacerlo con:

Select-AzureProfile -Default

En el caso de que queramos ejecutar un comando en un perfil específico podemos utilizar el parámetro -Profile para evitar tener que cambiar con Select-AzureProfile al perfil que queremos y volver después a cambiar al perfil que estábamos usando anteriormente para continuar. Por ejemplo, creando una cuenta de almacenamiento en el perfil que tengo guardado en mi variable $produccion

New-AzureStorageAccount -StorageAccountName "myAzureStorageAccount" -Location "North Europe" -Type Standard_RAGRS -Profile $produccion

Espero que os salve de algún apuro ;)

Desplegando nuestros hosts de Docker a Azure con Machine

A la hora de desplegar nuestro host o motor de Docker en Azure, ya estuve hablando sobre cómo se podía hacer utilizando la extensión disponible para máquinas virtuales o desde cero dentro de nuestra propia máquina virtual.

Sin embargo, estos mecanismos no proporcionan una solución rápida o fácilmente automatizable en entornos que así lo requieran. Por ello, desde Docker no están haciendo evolucionar la plataforma únicamente en el área de su motor y cliente, sino que también hay una serie de proyectos satélites que buscan completarla proporcionando las herramientas de orquestación y automatización necesarias.

A finales de febrero, liberaron la primera versión beta de tres de ellas: Swarm, Compose y Machine.

  • Machine: el objetivo de esta herramienta es facilitar el despliegue del motor de Docker a través de un solo comando en tu ordenador, en tu propio datacenter o en un proveedor de cloud como Azure.
  • Compose: facilita el despliegue de aplicaciones distribuidas construidas sobre una solución basada en múltiples contenedores.
  • Swarm: es la solución de clusterización para contenedores de Docker. Permite unificar diferentes motores de Docker como un único host virtual y desplegar en él tus soluciones. Lo mejor es que se puede gestionar desde otras herramientas de forma transparente como el propio cliente de Docker, Compose, Jenkins, etc.

El artículo de hoy está enfocado a mostrar cómo hacer uso de Machine para desplegar nuestras hosts en Azure.
Continue reading Desplegando nuestros hosts de Docker a Azure con Machine

MeetUp – Docker para Linux en Azure, los mejores aliados para el mundo DevOps

La pasada semana tuve el placer de participar en el Meetup sobre Docker de la Comunidad Mad OpenTech hablando sobre cómo es posible integrar Docker en la plataforma cloud de Azure y la estrategia de Microsoft enfocada al despliegue y gestión de aplicaciones basadas en contendedores.

Junto conmigo, también estuvo Roberto Majadas, CTO de OpenShine, haciendo una completa introducción sobre en qué consiste la contenerización de aplicaciones y cómo emepezar a trabajar con Docker en su charla sobre “Docker, la revolución de los contenedores”
Ya están disponibles en la propia página del Meetup los materiales que ambos utilizamos en nuestras sesiones. A continuación podéis ver un resumen de qué es lo que hablamos.

– Roberto Majadas (OpenShine) presenta “Docker, la revolución de los contenedores” – MAD OpenTech

– José Ángel Fernández (Microsoft) presenta “Integración de tareas de gestión y despliegue de Docker en Azure ”