Curs 6 - Virtualizare și Containere în Sistemele de Operare

În acest curs vom explora modul în care sistemele de operare implementează virtualizarea și containerizarea, conceptele de hypervisor, mașini virtuale (VM), containere și orchestrarea acestora.

1. Ce este Virtualizarea?

Virtualizarea este tehnologia care permite crearea de instanțe multiple de sisteme de operare pe un singur hardware fizic.

- Tipuri de virtualizare:

- Virtualizare hardware: Separarea completă a resurselor fizice (ex: KVM, VMware ESXi).

- Paravirtualizare: OS-ul virtualizat conștientizează faptul că rulează într-un mediu virtualizat (ex: Xen).

- Containere: Partajarea aceluiași kernel pentru mai multe aplicații izolate (ex: Docker, Kubernetes).

- Hypervisor Type 1 vs. Type 2:

- Type 1 (Bare Metal): Rulează direct pe hardware (ex: ESXi, Hyper-V, Xen).

- Type 2 (Hosted): Rulează ca o aplicație în interiorul unui OS gazdă (ex: VirtualBox, VMware Workstation).

2. Mașini Virtuale (VM) și Hypervisors

- Principalele soluții de virtualizare:

- KVM (Kernel-based Virtual Machine): Implementat în Linux, performant și open-source.

- Xen: Utilizat de AWS pentru instanțele EC2.

- VMware ESXi: Platformă comercială pentru centre de date.

- Microsoft Hyper-V: Hypervisor nativ Windows.

- Crearea și gestionarea unei mașini virtuale:

virt-install --name=ubuntu_vm --ram=2048 --vcpus=2 --disk path=/var/lib/libvirt/images/ubuntu.img,size=20 --os-variant=ubuntu20.04 --network bridge=br0 --graphics none --location http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/

3. Containere și Diferențele față de VM-uri

- Diferențe esențiale între containere și VM-uri:

- VM-urile emulează un sistem de operare complet, containerele rulează în cadrul OS-ului gazdă.

- Containerele sunt mai ușoare și pornesc mai rapid decât VM-urile.

- Principalele tehnologii de containerizare:

- Docker: Standard de facto pentru containere.

- Podman: Alternativă rootless la Docker.

- LXC (Linux Containers): Tehnologie avansată pentru virtualizare la nivel de sistem de operare.

4. Orchestrarea Containerelor și Kubernetes

- De ce avem nevoie de orchestrare?

- Gestionarea automată a containerelor la scară mare.

- Load balancing, failover și autoscaling.

- Principalele sisteme de orchestrare:

- Kubernetes: Standard industrial pentru orchestrarea containerelor.

- Docker Swarm: Soluție simplă pentru gestionarea clusterelor Docker.

- OpenShift: Soluție enterprise bazată pe Kubernetes.

- Networking și securitatea containerelor:

- Namespace-uri și izolarea rețelei în Kubernetes.

- Politici de securitate pentru containere.

5. Exemplu Practic - Crearea și Rularea unui Container în Docker și Kubernetes

a) Crearea și rularea unei imagini Docker

docker build -t myapp .
docker run -d -p 8080:80 myapp

b) Crearea unui pod Kubernetes

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: myapp

c) Monitorizarea și gestionarea resurselor

kubectl get pods

Resurse suplimentare: