Virtualización
- Definición: es la posibilidad de que un conjunto de recursos físiscos se vean como varias copias de recursos lógicos.
- Los motivos son varios:
- Portabilidad (como la JVM)
- Simulación / testing
- Aislamiento (como chroot, jain y cía)
- Particionamiento de HW
- Agrupamiento de funciones (”consolidation”)
- Protección ante fallas de Hardware
- VMM (Virtual Machine Manager) / Hypervisor: es el que tiene acceso al hardware físico. Características que deberían cumplir:
- Fidelidad
- Performance
- Safety
- Simulación vs emulación: la simulación usa los componentes actuales, la emulación usa componentes virutales.
- Las plataformas de virtualización suele estar asistida por Hardware. Esto es para evitar para que los dos corran con el mismo nivel de privilegios.
- INTEL: VT-x que provee VMX ROOT y VMX non-root. Se proveen instrucciones para saltar fácil entre dos modos.
- Se agrega la Virtual Machine Control Structure.
- Desafíos: optimizaciones del kernel, picos de carga fáciles de detectar y pueden caer varias VMs si falla el hardware.
Containers
- Concepto: aplicaciones aisladas entre si.
- Usa muchas tecnologías del Kernel de Linux.
- No son una virtualización completa.
- Aislamiento, limitación de recursos y sistemas de archivos eficientes.
- Componentes fundamentales:
- Namespaces: me aisla los contenedores entre si. Hay muchos tipos de namespaces.
- PID, NET, MNT, UTS, IPC, USER, TIME. Cada uno ve una realidad distinta del sistema.
- Cgroups: permiten limitar y contabilizar los recursos.
- CPU, Memoria, IOPS de disco, Red (parcialmente).
- Layered FS: Modelo donde se aplican capas de solo lecutra y una capa superior de escritura. Cada capa representa cambios respecto de la anterior.
- OverlayFS: Muchas capas read only, y una capa superior de solo escritura. Cada capa escribe sobre la capa anterior.
- Imagen: una plantilla inmutable usada para crear un contenedor. Contiene todo lo necesario para correr esa aplicación. LAs imágenes están compuestas por capas que se apilan sobre una capa base en común.
- Docker provee mecanismos sencillos para poder trabajar con contenedores.
- OCI: Open Container Inititative
- OCI Image Spec: Formato estándar de las imágenes.
- OCI Runtime Spec: Comportamiento estándar del runtime (como runc).
- Otras funcionalidades del Kernel:
- Seccomp: restringe las llamadas al sistema.
- Capabilites: permiten asignar a un aplicativo ciertos privilegios usualmente reservados al administrador.
- Kubernetes: Plataforma de código abierto para automatizar la implementación, el escalado y la administración en contenedores.
Cloud
- Trusted Execution Environment: área protegida de una CPU que ejecuta código y protege datos confidenciales.
- Intel SGX (Software Guard Extensions): enclaves en CPUs de Intel.
- AMD SEV (Secured Encrypted Virtualization): Cifrado de memoria para VMs.