Hyper-V Containers en Windows server 2016 TP4 (1 de 2)

Buenas

El pasado 19/11/2015 salío a la luz la TP4 (Techinical Preview 4) de windows server 2016. Entre otras novedades incluidas en esta Technical Preview me gustaría destacar y comentar la funcionalidad de Hyper-V Containers.

En este primer post de la serie me gustaría hacer una introducción un poco más teórica sobre que son los Hyper-V Containers y en qué se diferencian de los Windows Servers Containers para en la segunda entrada de la serie demostrar de manera práctica como crear un Hyper-V server container sobre Windows Server 2016 TP4.

Primero que todo me gustaría refrescar que son los containers y que nos aportan. Los Containers en sí mismo son otro tipo de virtualización también conocida como virtualización del Sistema operativo en la cual la aplicación que corre bajo un container tiene la percepción de que sea ejecutando sobre un sistema operativo totalmente aislado e independiente.

Dentro de los containers en el mundo Windows encontramos dos tipos:

Windows server containers: Este tipo de containers ya existían en versiones anteriores a la TP4 de Windows server 2016 los cuales comparten el Sistema operativo con otros containers y con el propio host por lo tanto al no existir una capa que aislé realmente unos containers de otros podría suceder que un incidencia en un container afectará al resto o al porpio host. Estos containers son ideales para escenarios en los que el host realmente confía en el comportamiento de los containers que ejecuta y los containers también son confiables entre ellos, también serán la mejor opción para aplicaciones que se dividen en multiples container o micro-services.

Hyper-V containers: Como ya he mencionado anteriormente este tipo de containers han aparecido como novedad en la TP4 de Windows Sever 2016 y la principal diferencia con respecto a los Windows Server Containers es que los Hyper-V containers tienen una copia del kernel y parte de la memoria directamente asignado a los mismos, de esta manera se consigue un nivel de aislamiento total. Al ofrecer un nivel de aislamiento mayor los Hyper-V Containers tardan algo más de tiempo en arrancar y la densidad de consolidación por host es algo menor. Sin embargo, este tipo de containers serán la solución idónea para evitar que un incidente en un container pueda afectar al rendimiento del host o de otros containers.

Igualmente me gustaría menciona que tanto los Windows server container comos los hyper-V Containers se puede administrar tanto con el cliente de docker como con Power Shell y que es posible migrar fácilmente un aplicación de un Windows server Container a un Hyper-V container.

Por último, como normalmente una imagen suele ser más explicativa que 1000 palabras me gustaría dejaros una pequeña imagen que creo que refleja bien la diferencia entre Windows Server Container e Hyper-V Containers.

Espero que os resulte de utilidad, en la segunda entrada de la serie veremos como crear hyper-V container usando Windows server 2016 Tp4.

Un saludo

Orquestación de máquinas en Azure con Puppet (2 de 2)

Buenas
Atendiendo a lo prometido en esta segunda entrada de la serie me gustaría explicar el procedimiento para definir configuraciones usando Puppet con el objetivo de aplicar las mismas a nuestros clientes de Puppet que en este caso serán máquinas virtuales corriendo en azure.

Una vez tenemos la máquinas virtuales con el agente de Puppet instalado y configurado para conectarse con el servidor de Puppet (Procedimiento explicado en el primer Post de la serie el cual podéis encontrar en el siguiente link) el primer paso que debemos realizar en conectarnos a la consola de Puppet y autorizar la solicitud de conexión de los clientes de Puppet para ello seguiremos los siguientes pasos:

1– Accedemos a la consola de Puppet

2– Pinchamos en Node request

3– Aceptamos las solicitudes que tenemos pendientes

Una vez tenemos los clientes de Puppet autorizadas en la consola procederemos a conectarnos al servidor de Puppet y definir una configuración la cual aplicaremos a nuestros clientes. En el siguiente ejemplo mostraré como configurar un simple fichero de texto el cual se copiará en el directorio de los clientes de Puppet, para ello seguiremos los siguientes pasos:

1– Nos logamos en el servidor de Puppet por ssh

2– Indicamos los clientes que recibirán las configuraciones definidas para ello Accedemos al path:
cd /etc/puppetlabs/puppet/manifests/

3 – Editamos el fichero site.pp ejecutando:
nano site.pp

4– Incluimos los clientes Puppet siguiendo el ejemplo del pantallazo adjunto y guardamos los cambios en el fichero site.pp

Una vez definidos los cliente sobre los que aplicaremos las configuraciones procedemos a definir el fichero de texto que aplicaremos a nuestros clientes, para ello seguiremos los siguientes pasos:

1– Accedemos al path
cd /etc/puppetlabs/puppet/modules/windows/manifests/

2– Editamos el fichero init.pp ejecutando
nano init.pp

3– En nuestro caso definiremos el fichero init.pp con la siguiente configuración para crear el fichero de texto

Aunque las configuraciones definidas mediante puppet se refrescan automaticamente, en nuestro caso forzaremos a que se apliquen en el cliente ejecutando el comando puppet agent –test y comprobaremos que el fichero definido aparece en C:

Espero que resulte de utilidad

Un saludo

Orquestación de máquinas en Azure con Puppet (1 de 2)

Buenas
Comienzo hoy una
serie de dos artículos en la que explicare como instalar y configurar Puppet en una máquina virtual de Azure para posteriormente definir una configuración la cual será aplicada a máquinas virtuales Windows corriendo en azure.

Primero que todo, para los que nos conocéis Puppet, me gustaría daros una definición muy básica de este Software. Puppet es una herramienta open source creada por la empresa Puppet Labs diseñada con el objetivo de gestionar las configuraciones de máquinas tanto unix como Windows. Puppet nos permite definir configuraciones usando el lenguaje de promación Ruby DSL las cuales se almacenan en un ficheros conocidos como “Puppet manifiest” las cuales se almacenan en un catálogo para posteriormente se distribuidas a las máquinas gestionadas desde el servidor Puppet.

Una vez realizada este breve introducción sobre Puppet, en este primer post de la serie detallaré los pasos para desplegar el servidor de Puppet en Azure asi como desplegar una máquina virtual en Windows con el cliente de Puppet ya instalado la cual gestionaremos desde el servidor de Puppet. Para ellos seguiremos los siguientes pasos:

Despliegue del servidor de Puppet en Azure

1– Nos logamos en el portal de Azure

2– Creamos una nueva máquina virtual desde la galería

3– Seleccionamos la imagen de Puppet que queremos utilizar. En este ejemplo usaré la 3.2.3

4– Definimos que tipo de máquina queremos usar para nuestro servidor de Puppet así como los credenciales de acceso a la misma. Como podéis ver yo en este ejemplo estoy usando una máquina bastante básica

5– Indicamos el nombre dns de nuestro servidor de Puppet, la región de azure en la que correrá esta máquina así como los endpoints requeridos por el servidor de Puppet los cuales podéis ver en el pantallazo adjunto.

6– Validamos el último paso del wizard para crear el servidor de Puppet

Identificación usuario y password de acceso a la consola de Puppet

Durante el despliegue del servidor de Puppet este crea un usuario admin de acceso a la consola el cual recibe un password automáticamente generada que podemos obtener conectado al servidor por ssh y siguiendo los siguientes pasos.

1– Conectamos al servidor de Puppet por ssh

2– Obtenemos el usuario administrador ejecutando el siguiente comando:
sudo grep ‘auth_user_email’ /etc/puppetlabs/installer/answers.install

3– Obtenemos la password para dicho usuario con el siguiente comando.
sudo grep ‘auth_password’ /etc/puppetlabs/installer/database_info.install

4– Probamos el acceso a la consola web con los credenciales obtenidos

Despligue de un servidor de windows y configuración como cliente de Puppet

Una vez tenemos el servidor de Puppet listo vamos a crear una máquina virtual con el agente de puppet preinstalado a la cual aplicaremos configuraciones en el siguiente post, para ello seguimos los siguientes pasos:

1– Creamos una máquina desde la galería usando Windows server 2012 r2 como template

2– Indicamos credenciales y el tipo de máquina que queremos usar.

3– Definimos el nombre dns de la máquina, la región de la misma y los endpoints de acceso

4– En la última pantallaza del wizard marcamos el check para que se instale el agente de Puppet e indicamos el nombre dns de nuestro servidor de Puppet.

Siguiendo estos pasos ya tendríamos el entorno listo. En el siguiente post veremos definir configuraciones para posteriormente aplicárselas al cliente de Puppet.

Espero que resulte de utilidad

Un saludo

Desplegar un Container Host sobre Windows Server 2016 TP3 en Azure

Buenas,

Hoy me gustaría explicar el procedimiento para desplegar una máquina en Azure la cual correrá bajo una versión core de Windows Server 2016 TP3. La máquina que desplegamos en Azure ya tendrá el role de Windows container host preconfigurado, por lo tanto una vez deplegada la misma procederá a desplegar una aplicación web la cual se ejecutará en un container dentro de este Container Host.

Una vez realizada esta breve introducción procedo a detallar paso a paso los acciones que debemos realizar:

1– Nos logamos en el portal Azure

2– Creamos que una nueva máquina virtual usando las imágenes de la galería

3– Seleccionamos Windows server Container Preview como imagen

4– Indicamos el nombre de nuestra máquina virtual, el tamaño y las credenciales de acceso a la misma.

5– Indicamos el nombre dns de nuestra máquina, la región en la que se desplegara la misma y mantenemos los endpoints que nos crea por defecto para poder conectarnos a la máquina tanto por rdp como por power Shell remote

6– Dejamos la pantalla de configuración de extensiones por defecto y validamos la creación de la máquina

Una vez desplegada y encendida la máquina deberemos importar el certificado autogenerado de la misma en nuestro trust store con el objetivo de conectarnos mediante powershell usando ssl a la misma, para ellos seguimos estos pasos

1– Con google chrome accedemos a la url de powershell de la máquina y clickamos en certificate information

2– Accedemos a los detalles de certificado, pulsamos en copy to file y seguimos el wizard para export el mismo en formato .DER

3– Instalamos el certificado indicando que queremos instalarlo en el contenedor de Trusted Root Certificates Authorities

Una vez llegados a este punto estaremos listo para conectarnos en nuestro container host mediante powershell y para desplegar un container en el mismo, para ello seguiremos los siguiente pasos

1– Abrimos un sesión de PowerShell y nos conectamos con nuestro container host usando el siguiente comando y especificando las credenciales una vez solicitadas
Enter-PSSesssion -Computer computername -Port Portnumber -Credential username –UseSSL

2– Desplegamos la aplicación en un container. Para este ejemplo utilizarmos los comandos detallados en el siguiente post con la salvedad de la parte de los virtual switch la cual no aplica cuando el container host corre en Azure.
https://blogs.itpro.es/samuellt/2015/09/03/hostear-un-web-server-en-un-container-de-windows-server-2016-tp3/

3– Creamos un Endpoint en Azure el cual en nuestro caso utilizará el puerto 80.

4– Abrimos el navegador y accedemos la aplicación que hemos publicado en el container para comprobar el resultado.

Espero que os resulte interesante.

Un saludo

Nested Virtualization en Windows 10

Buenas,

Hoy me gustaría informaros que hace poco más de una semana Microsoft libero la build 10565 de Windows 10 la cual es la primera versión de Windows 10 que soporta Nested virtualization o lo que es lo mismo virtualización anidada del hypervisor. La posibilidad de anidar el hypervisor nos permite básicamente habilitar el role hyper-v en una máquina virtual de hyper-V.

Esta versión de Windows 10 se encuentra actualmente en fase de insider preview por lo tanto no debemos extrañaros de encontrar algunos bugs en la misma, de hecho el equipo de producto de Hyper-V ya es consciente de algunos que mencionaré a continuación los cuales serán subsanados en futuras releases.

Tras hacer esta breve introducción de la funcionalidad procedo a detallar los pasos que debemos seguir para activar la misma.

1– Descargamos la build 10565 desde el siguiente enlace.

2– Instalamos nuestro pc físico usando esta build.

3– Habilitamos el role de hyper-v en nuestra máquina física.

4– Creamos una máquina y desplegamos la build 10565 en la misma (importante no configurar dinamyc memory en la misma)

5– Apagamos la máquina virtual que acabamos de crear. Este será un prerrequisito para ejecutar el script que ha desarrollado el grupo de producto para habilitar la funcionalidad de una manera súper sencilla.

6– Ejecutamos el siguiente script para habilitar nested virtualization en la máquina virtual que acabamos de crear

7– Arrancamos esta máquina virtual y procedemos a instalar el role de hyper-v en la misma

8– Seguidamente ejecutaremos el siguiente script el cual nos permitirá habilitar el MAC spoofing en esta máquina virtual. Esta funcionalidad nos permitirá conectar a la red las máquinas virtuales desplegadas de manera anidada.

9– Una vez llegados a este punto ya tenemos el entorno listo y podemos crear máquinas virtuales de manera anidada sobre la máquina vritual en la que instalamos Hyper-V previamente.

Como ya comente al comienzo de este post la build 10565 ha sido liberada muy recientemente y tiene algunos bugs, los cuales me gustaría enumerar para vuestra conocimiento.
– No podemos usar dynamic memory en nuestras máquinas virtuales
– Runtime Memory resize tampco funcionaría en este entorno.
– No se puede aplicar checkpoint a las máquinas virtuales.
– De momento no se soporta live migration.

Espero que os resulte de utilidad.

Un saludo

Programar el encendido/apagado de nuestras máquinas virtuales en Azure

Buenas,

Hoy me gustaría compartir el procedimiento para encender y apagar nuestras máquinas virtuales en azure, para ello programaremos la ejecución de un script de power Shell dentro de los servicios de automatización de Windows Azure.

Como podréis imaginar esta solución resultará especialmente interesante de cara a reducir el consumo de recursos de cómputo en Azure y por consiguiente disminuir el coste de ejecución de nuestras máquinas en Azure.

Una vez hecha esta breve introducción procedo a detallar paso a paso las acciones que debemos realizar

1– Nos logamos en el portal de Azure

2– Accedemos al apartado de automatización y creamos una cuenta de automatización

3– Asiganmos un nombre para la cuenta de automatización y definimos en que región se ejecutará

4– Procedemos a definir los credenciales con los ejecutaremos nuestros scrips accediento al apartdo de assets

5– Pinchamos en “Add Settings” y posteriromente en añadir credenciales “add credentials”

6– En el tipo de crendencial indicamos que se utilizarán para ejecutar scripts de Power Shell y definimos un nombre para las credenciales.

7– Indicamos el usuario y la contraseña de las credenciales que queremos guardar las cuales se usarán posteriormente para ejecutar los scripts. La cuenta utilizada debe tener permisos de Co-Administrador y debemos estar dada de alta en el dominio de nuestra organización

8– Una vez creados y gurdados los credenciales accedemos a runbooks

9– Procedemos a crear un runbook mediante el asistente de creación rápida como se puede observar en el pantallazo adjunto

10– Tras crear el runbook lo seleccionamos para acceder al mismo.

11– Seguidamente pinchamos en Autor

12– En este apartado definiremos el script de power Shell que queremos ejecutar. Como podéis observar en el pantallazo adjunto el script en si mismo es muy sencillo y simplemente obtendremos los credenciales guardados y ejecutaremos el comando en este caso para iniciar la máquinas virtual. Una vez definidos los parámetros del script lo guardaremos, testearemos y si todo es correcto lo publicaremos.

Es importante mencionar que el resultado del test del script debe ser satisfactorio antes de públicarlo, la salida de dicho test será similar a la siguiente

13– Tras tener nuestro runbook definido y guardado tan solo nos queda definir una planificación de ejecución, para ello accederemos a “Schedule” – “link to a new Schedule”

14– Por ultimo procederemos a definir la plafinificación de la ejecución

15– La creación y la planificación del runbook de apagado será exactamente idéntica a la de encendido pero ejecutaremos el comando de power Shell Stop-Azurevm en lugar de Start-AzureVm.

Espero que resulte de utilidad.

Un saludo.

Configuración básica de Nano Server usando PowerShell Direct

Buenas,

Hoy me gustaría explicar el procedimiento para realizar una configuración básica de Nano Server mediante Power Shell direct cuando el mismo se ejecuta en una máquina virtual en una máquina virtual de Hyper-V.

Básicamente las configuraciones que realizaremos serán deshabilitar el firewall para poder atacarle posteriormente por la red y definir los parámetros de tcp/ip. Una vez hechas estas configuraciones ya podremos conectarnos a nano usando el Server Manager o llamadas de Power Shell por la red.

Antes de empezar a detallar el procedimiento para realizar esta configuración básica de nano server me gustaría dejaros en siguiente link al Blog de Bem Armstrong en el que se explica como configurar una máquina virtual de nano server con Windows server 2016 TP3 y el cual yo he seguido para preparar mi máquina virtual.

http://blogs.msdn.com/b/virtual_pc_guy/archive/2015/09/14/running-nano-from-windows-server-2016-tp3-on-hyper-v.aspx

Tras seguir los pasos mencionados en post de Bem nos encontraremos con una máquina virtual que tiene el siguiente aspecto.

Una vez tenemos nuestra máquina virtual con Nano Server lista seguiremos los siguientes pasos para realizar su configuración básica con Power Shell Direct.

1– Abrimos una consola de power Shell como administradores

2– Nos conectamos a nuestra vm con Nano mediante Power Shell Direct ejecutando el siguiente comando e introduciendo credenciales
Enter-PSSession –VMName NanoTP3

3– Procedemos a deshabilitar el firewall usando el siguiente comando
Invoke-Command -ScriptBlock { netsh advfirewall set allprofiles state off }

4– Identificamos el nombre del adaptador de red de la vm con el siguiente commando
Invoke-Command -ScriptBlock { Get-NetAdapter }

5– Definimos la ip de la vm con el siguiente commando
Invoke-Command -ScriptBlock { New-NetIPAddress –InterfaceAlias “Ethernet 2” –IPAddress “192.168.1.210” –PrefixLength 24 -DefaultGateway 192.168.1.1 }

6– Definimos los dns
Invoke-Command -ScriptBlock { Set-DnsClientServerAddress -InterfaceAlias “Ethernet 2” -ServerAddresses 192.168.1.10, 192.168.1.11 }

7– Por ultimo en mi caso procederé a deshabilitar el IPV6
Invoke-Command -ScriptBlock { Disable-NetAdapterBinding -InterfaceAlias “Ethernet 2” -ComponentID ms_tcpip6 }

Espero que os resulte de interes, intentare profundizar en configuraciones adicionales en otro artículo.

Un saludo

Azure Site Recovery – De Hyper-V a Azure

Buenas
Como ya prometí en su momento hoy escribo el siguiente post para explicar cómo configurar Azure site recovery para replicar máquinas de virtuales a Azure desde nuestros host en hyper-v sin necesidad de tener instalado SCVMM en nuestra infraestructura.
Para realizar dicha configuración realizaremos los siguientes pasos.

1– Nos logamos en el portal de azure y accedemos a Recovery Services

2– Creamos un vault

3– Una vez tenemos el vault creado accedemos al mismo y seleccionamos el tipo de “setup recovery” que queremos configurar y automáticamente se cargará una pagina con las instrucciones que debemos seguir.

4– Seguidamente realizamos el primer paso del wizard que es crear un site de Hyper-V

5– Posteriormente debemos descargar el “download provider” que es simplemente un instalable que instalará el agente de hyper-V encargado de realizar la replicación en nuestro de hyper-v y la “registration key” que es un clave cuya función principal es vincular el host de hyper-v con la subcripción de azure

El procedimiento para instalar el download provider es muy sencillo, tan solo debemos seguir el wizard de instalación e indicar como se conectará el host de hyper-V a internet (de manera directa o pasando por un proxy). Una vez realizada la instalación debemos ver el host de hyper-V si pinchamos en Servers – HyperV sites

6– Una vez tenemos nuestro hyper-v conectado con nuestra subcripción de azure debemos de asegurarnos que tenemos al menos una red virtual en azure donde se levantarían las maquinas replicadas y una cuenta de almacenamiento con geo-replicación en la que se almacenarán las cuentas replicadas.

7– Seguidamente debemos configurar un grupo de protección para nuestras vms en el que especificaremos la subcripción y la cuenta de almacenamiento asociados al mismo al igual que la frecuencia de replicación, los puntos de recuperación y si queremos realizar instantáneas coherentes a nivel de aplicación.

8– El último paso necesario sería agragar las máquinas virtuales que queremos replicar en azure, las cuales una vez replicdas veremos de la siguientes manera.

Como podéis observar en la pantallazo de la parte superior, una vez replicada la máquina virtual tenemos la posibilidad de test o realizar una conmutación por error.

Espero que resulte de utilidad.

Un saludo

Azurecon 2015 & Non Stop IT! – Soluciones de backup y disaster recovery

Buenos días,

Escribo este para recomendaros la inscripción en dos eventos de cuales en uno de ellos estaré participando como ponente.

– El primero evento que me gustaría recomedaros es la Azurecon 2015 que se celebra de manera online el próximo 29 de septimbre. Podéis registraros en el evento usando el siguiente enlace.

Enlace de Registro

– El segundo evento que me gustaría recomendaros y en el que impartire una charla sobre Azure Site recovery Manager junto a mi amigo Juan Jose Diaz Antuña se celebrará en Madrid el proximo 22 de septiembre, a continuación podéis encontrar el link de registro y la agenda del evento.

Enlace de Registro

Espero que os resulte de utilidad y con suerte veros en el evento del día 22 🙂

Un saludo

Hostear un Web server en un container de Windows Server 2016 TP3

Buenas,

Tras explicar en el siguiente articulo como desplegar un container host corriendo sobre Windows server 2016 TP3. Atendiendo a lo prometido, hoy me gustaría explicar el procedimiento para crear un web server en un container que correrá en este container host.

Para ellos seguiremos los siguientes pasos:

1– Iniciamos sesión en nuestro container host y arrancamos powershell

2– Creamos un container usando la imagen de Windows server core y los iniciamos ejecutando los siguientes comandos de power Shell.

$container = New-Container -Name webbase -ContainerImageName WindowsServerCore -SwitchName «Virtual Switch»
Start-Container $container

3– Instalamos el servicio de webserver nginx en el container ejecutando los siguientes commandos.

wget -uri ‘http://nginx.org/download/nginx-1.9.3.zip’ -OutFile «c:\nginx-1.9.3.zip»
Expand-Archive -Path C:\nginx-1.9.3.zip -DestinationPath c:\ -Force

4– Paramos la ejecución del container y creamos una imagen del mismo la cual desplegaremos a posteriori, para ellos ejecutamos los siguientes comandos.

Stop-Container $container
$webserverimagetest = New-ContainerImage -Container $container -Publisher Demo -Name nginxwindows -Version 1.0

5– Desplegamos e iniciamos un container con el web server incorporado usando la imagen previamente creada, para ellos ejecutaremos los siguientes comandos:

$webservercontainer = New-Container -Name webservertest -ContainerImageName nginxwindows -SwitchName «Virtual Switch»
Start-Container $webservercontainer

6– Iniciamos el web server de nginx ejecutando los siguientes comandos

cd c:\nginx-1.9.3\
start nginx

7– Por ultimo crearemos una regla de firewall para permitir el trafico por el puerto 80 en nuestro container host ejecutando el siguiente comando:

if (!(Get-NetFirewallRule | where {$_.Name -eq «TCP80»})) {
New-NetFirewallRule -Name «TCP80» -DisplayName «HTTP on TCP/80» -Protocol tcp -LocalPort 80 -Action Allow -Enabled True
}

8 – finalmente probamos el acceso a la aplicación web desde un navegador. En el pantallazo adjunto podéis ver el resultado.

Espero que os resulte de utilidad

Un saludo