lunes, 5 de junio de 2017

Elegir entre Windows Containers y Hyper-V Containers

Introducción

Windows Server 2016 incluye el rol Containers, que permite crear y administrar Windows Containers y Hyper-V Containers.

La creación y administración de ambos tipos de containers es muy similar. En esta nota daremos algunas pautas para ayudar a elegir el modelo más conveniente.


Diferencias en el licenciamiento

Los Hyper-V Containers adhieren al mismo modelo de licenciamiento de las máquinas virtuales.
En un Host Datacenter Edition se pueden crear ilimitados Hyper-V Containers
En un Host Standard Edition se pueden crear hasta dos Hyper-V Containers por cada paquete de licencias.

En cambio, los Windows Containers son ilimitados para ambas ediciones de Windows Server 2016.



Diferencias de aislamiento de procesos

En las máquinas virtuales, el sistema operativo se ejecuta en User mode y Kernel mode (hay un kernel mode para cada guest).

Los Windows Server Containers solamente utilizan user mode, permitiendo a los procesos de Windows y procesos de aplicaciones ejecutarse en el container, aislado del user mode de otros containers.
Por este motivo, los Windows Containers no consiguen un completo aislamiento, ya que trabajan con un único Kernel mode en común.

Los Hyper-V Containers en forma similar a las máquinas virtuales son child partitions, el sistema operativo guest del Hyper-V container no es el sistema operativo Windows normal, sino una versión reducida (que tampoco es la versión Nano).


El nivel de aislamiento que provee el Hyper-V container para cada child partition es entre el Hyper-V container con otros Hyper-V containers en el host, el hipervisor y la parent partition del host.

La siguiente figura muestra la diferencia entre ambos tipos de containers.



Ejemplo 1: Hyper-V Container

A continuación se crea un Hyper-V Container llamado TestIISH y se ejecuta dentro del container Notepad.exe

Para crear el container se ejecutó el siguiente comando:

docker run -d --name TestIISH --isolation=hyperv microsoft/iis -p 80:80

Ejecutamos un CMD dentro del container y luego Notepad.exe:

docker exec -i TestIISH cmd

C:\Windows\System32>notepad.exe

PS C:\Windows\System32> get-process -name n*

Vemos el proceso Notepad con ID 2668 dentro del Container


Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id     SI  ProcessName
-----------   -------        -----         ------         ----           -----    ---   -------------
  128            9           1984       7632        0.08        2668   1     notepad

Se ejecuta el comando Get-Process en el host y se verifica que no está el proceso del notepad pero si aparecen procesos llamados vmwp (virtual machine work process)

PS C:\Users\Administrator> get-process n* (no hay resultados)

PS C:\Users\Administrator> get-process v*

Handles  NPM(K)    PM(K)       WS(K)     CPU(s)     Id   SI    ProcessName
-------         ------        -----            -----        ------          --    --     -----------------
    294        31         4928         13264       0.14   2996     0       vmcompute
      0      2770      1072600     616020      0.00   1280     0       vmmem
      0       2717     1050640     346972      0.00   3184     0       vmmem
      0      2724     1050640         16           0.00   3852     0       vmmem
    617      22         10288         23936       0.27   2312     0       vmms
   4488     18         40688         21756      10.05  1872     0      vmwp
    238       5          35640         16392       1.41   3844     0      vmwp
    130       9            1588           7716        0.02   1192    0      VSSVC


Ejemplo 2: Windows Container


Se crea un Windows Container llamdo TestIISW se ejecuta Notepad y se ve el proceso dentro del container con ID 3768

docker run -d --name IISTestW -p 80:80 microsoft/iis

docker exec -i IISTestW cmd

C:\Windows\System32>notepad.exe

PS C:\Windows\System32> get-process -name n*


Handles  NPM(K)    PM(K)      WS(K)     CPU(s)    Id       SI    ProcessName
   -------       ------      -----          -----            ------       --        --      -----------
    128         9           1684       7600           0.02     3768    3      notepad


A continuación Se ejecuta Get-Process en el host 

PS C:\Users\Administrator> get-process -name n*

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id       SI   ProcessName
-------       ------          -----          -----          ------        --       --      -----------
   128        9             1684         7600        0.02      3768    3      notepad

El proceso Notepad con ID 3768 también está presente en el host. Se nota la diferencia de aislamiento respecto del Hyper-V Container.





No hay comentarios:

Publicar un comentario