Хмари та віртуалізація

Віртуальні машини, контейнери, Docker, Kubernetes, serverless та хмарні платформи

Що таке віртуалізація та хмарні обчислення?

Віртуалізація — це технологія створення програмної абстракції над фізичним обладнанням: процесорами, пам'яттю, дисками та мережевими інтерфейсами. Завдяки віртуалізації один фізичний сервер може одночасно виконувати кілька ізольованих операційних систем або середовищ виконання.

Хмарні обчислення (Cloud Computing) — модель надання обчислювальних ресурсів через Інтернет за запитом. Користувач платить лише за використані ресурси (pay-as-you-go), а інфраструктура масштабується автоматично відповідно до навантаження.

Від віртуальних машин 1960-х (IBM CP-40) до сучасних serverless-архітектур та Kubernetes-кластерів — еволюція обчислень пройшла шлях від монолітних мейнфреймів до гіпермасштабованих розподілених систем, які керують мільярдами контейнерів по всьому світу.

💻 Віртуальні машини

Віртуальна машина (VM) — це програмна емуляція повноцінного комп'ютера: власний процесор, пам'ять, диски, мережеві адаптери та BIOS/UEFI. Гіпервізор (hypervisor) розподіляє фізичні ресурси між кількома VM.

🔹 Типи гіпервізорів

🔹 Популярні платформи віртуалізації

VMware vSphere / ESXi

Лідер корпоративної віртуалізації. ESXi — гіпервізор типу 1, vCenter — централізоване управління кластерами, vMotion — живе переміщення VM між хостами без простою.

Microsoft Hyper-V

Вбудований у Windows Server та Windows Pro. Підтримує Live Migration, Replica (реплікація VM), Storage Spaces Direct, інтеграцію з Azure.

KVM + QEMU

KVM перетворює ядро Linux у гіпервізор типу 1. QEMU емулює обладнання. Разом — основа хмарних платформ OpenStack, Proxmox VE, oVirt. Відкритий код, нульова вартість ліцензії.

Oracle VirtualBox

Безкоштовний гіпервізор типу 2 для Windows, macOS, Linux. Ідеальний для навчання, тестування та розробки. Підтримує знімки стану VM (snapshots), спільні папки, USB-пасsthrough.

Порада: Для production-середовищ обирайте гіпервізори типу 1 (ESXi, Hyper-V, KVM). Для розробки та навчання — VirtualBox або VMware Workstation (тип 2) дають більше гнучкості та простіше в налаштуванні.

📦 Контейнери vs Віртуальні машини

Контейнер — це ізольоване середовище виконання, яке ділить ядро ОС хоста з іншими контейнерами. На відміну від VM, контейнер не емулює апаратуру та не містить повноцінну ОС — лише необхідні бібліотеки та залежності додатка.

🔹 Ключові відмінності

Параметр Віртуальна машина Контейнер
ОС Повноцінна ОС на кожній VM Спільне ядро ОС хоста
Розмір Гігабайти (образ ОС + додаток) Мегабайти (лише додаток + deps)
Запуск Хвилини (завантаження ОС) Секунди (процес на хості)
Ізоляція Апаратна (гіпервізор) Програмна (namespaces, cgroups)
Продуктивність Накладні витрати ~10-20% Мінімальні втрати (~1-5%)
Портативність Залежить від гіпервізора Універсальна (будь-який Docker Engine)

🔹 Механізми ізоляції Linux

🐋 Docker — стандарт контейнеризації

Docker, представлений у 2013 році, зробив контейнеризацію масовою. До Docker контейнери існували (LXC, OpenVZ), але Docker спростив створення, розповсюдження та запуск контейнерів до рівня однієї команди.

🔹 Архітектура Docker

🔹 Dockerfile — рецепт образу

Dockerfile — текстовий файл з інструкціями для збірки образу. Основні директиви:

🔹 Docker Compose

Docker Compose — інструмент для визначення та запуску багатоконтейнерних додатків через YAML-файл docker-compose.yml. Дозволяє описати сервіси, мережі, томи, змінні середовища та залежності між контейнерами. Одна команда docker compose up піднімає всю інфраструктуру додатка.

🔬 Kubernetes — оркестрація контейнерів

Kubernetes (K8s) — відкрита платформа для автоматизації розгортання, масштабування та управління контейнеризованими додатками. Розроблена Google на основі внутрішньої системи Borg, передана CNCF у 2015 році. Сьогодні — де-факто стандарт оркестрації контейнерів.

🔹 Архітектура Kubernetes

🔹 Ключові абстракції K8s

Pod

Найменша розгортаєма одиниця. Містить один або кілька контейнерів, що ділять мережу та томи. Поди — епемеральні: їх створюють і знищують, але не оновлюють на місці.

Deployment

Декларативне управління станом подів. Визначає бажану кількість реплік, стратегію оновлення (RollingUpdate, Recreate). При зміні образу Deployment автоматично створює нові поди та видаляє старі.

Service

Абстракція для доступу до групи подів. Типи: ClusterIP (внутрішній), NodePort (порт на вузлі), LoadBalancer (хмарний балансувальник), ExternalName (CNAME DNS).

Ingress

Правила маршрутизації HTTP/HTTPS-трафіку до сервісів. Ingress Controller (NGINX, Traefik, HAProxy) реалізує ці правила. Дозволяє керувати SSL, rewrite, rate limiting.

ConfigMap / Secret

Зовнішня конфігурація додатка без перезбірки образу. ConfigMap — для нечутливих даних (налаштування). Secret — для паролів, токенів, ключів (base64, не шифрується за замовчуванням).

StatefulSet / DaemonSet

StatefulSet — для станових додатків (БД) зі стабільними ідентифікаторами та постійними томами. DaemonSet — гарантує по одному поду на кожному вузлі (логи, моніторинг).

🔹 Масштабування в K8s

Serverless — обчислення без серверів

Serverless (FaaS — Function as a Service) — модель хмарних обчислень, де розробник пише лише код, а вся інфраструктура (сервери, масштабування, патчі, моніторинг) лежить на провайдері. Платите лише за фактичний час виконання функції (мілісекунди).

🔹 Популярні serverless-платформи

AWS Lambda

Піонер FaaS. Підтримує Python, Node.js, Java, Go, Ruby, C#. Інтеграція з 200+ сервісами AWS. Ліміти: 15 хвилин на виконання, 10 ГБ пам'яті, 6 МБ запит (sync) / 250 КБ (async).

Azure Functions

Microsoft-альтернатива Lambda. Плани споживання (Consumption), Premium та Dedicated (App Service). Підтримує .NET, Python, Node.js, Java, PowerShell. Durable Functions для довготривалих workflows.

Google Cloud Functions

Інтеграція з Firebase, Cloud Storage, Pub/Sub. Gen 2 — на базі Cloud Run з підтримкою більших образів, довших таймаутів (60 хв) та більших запитів (32 МБ).

Cloudflare Workers

Edge computing serverless. Функції виконуються у 300+ дата-центрах Cloudflare (ближче до користувача). Підтримує JavaScript/TypeScript, Rust, Python (WASM). 0 мс cold start, 50 мс CPU ліміт на безкоштовному плані.

🔹 Переваги та обмеження

Хмарні платформи та моделі

🔹 Моделі хмарних послуг

IaaS

Infrastructure as a Service — віртуальні машини, мережі, сховища, балансувальники. Ви керуєте ОС, додатками та даними. Приклади: AWS EC2, Azure VMs, Google Compute Engine, DigitalOcean.

PaaS

Platform as a Service — платформа для розробки та розгортання без управління інфраструктурою. Приклади: Heroku, Google App Engine, AWS Elastic Beanstalk, Vercel, Railway, Render.

SaaS

Software as a Service — готові програми через браузер. Приклади: Gmail, Zoom, Salesforce, Notion, Figma, Google Docs, Slack, Trello. Користувач лише використовує, не керує.

FaaS / Serverless

Function as a Service — запуск окремих функцій у відповідь на події. Автоматичне масштабування до нуля. Приклади: AWS Lambda, Azure Functions, Google Cloud Functions, Cloudflare Workers.

🔹 Топ-3 хмарних провайдери

🔹 Моделі розгортання

📊 VM vs Container vs Serverless

Параметр Віртуальна машина Контейнер (Docker) Serverless (FaaS)
Одиниці масштабування Ціла VM Окремий контейнер / под Окрема функція
Час запуску Хвилини Секунди Мілісекунди (cold start ~100-500 мс)
Ізоляція Апаратна (гіпервізор) Процесна (namespaces, cgroups) Повна ізоляція (пісочниця провайдера)
Керування Повне (ОС, патчі, моніторинг) Часткове (образи, оркестрація) Нульове (провайдер керує всім)
Вартість Постійна (платите за VM 24/7) Постійна (worker nodes) Змінна (pay-per-invocation)
Використання Legacy-додатки, моноліти, БД Мікросервіси, веб-додатки, CI/CD Обробка подій, API, ETL, чат-боти

🔧 DevOps, CI/CD та інфраструктура як код

DevOps — культура, практики та інструменти, що об'єднують розробку (Development) та операції (Operations) для скорочення життєвого циклу додатків та забезпечення безперервної поставки (Continuous Delivery).

🔹 CI/CD Pipeline

🔹 IaC — Інфраструктура як код

🔹 GitOps

GitOps — підхід, де Git-репозиторій є єдиним джерелом правди (single source of truth) для інфраструктури та додатків. Інструменти на кшталт ArgoCD або Flux постійно синхронізують стан кластера Kubernetes зі станом репозиторію. Будь-яка зміна — це pull request у Git.

🎯 Підсумок

Віртуалізація та хмарні обчислення перетворили IT-індустрію за останнє десятиліття. Від віртуальних машин, які емулюють повноцінні комп'ютери, через легкі контейнери Docker, що революціонізували доставку додатків, до serverless-функцій, які масштабуються до нуля — кожен рівень абстракції розв'язує свої задачі.

Kubernetes став операційною системою дата-центрів, а Terraform та GitOps — стандартом управління інфраструктурою. Хмарні провайдери (AWS, Azure, GCP) пропонують сотні сервісів, що дозволяють будувати глобальні додатки без власних дата-центрів.

Ключові тренди: WebAssembly (WASM) як альтернатива контейнерам для edge, Kubernetes на bare metal (Talos, K3s), GitOps як стандарт розгортання, FinOps для оптимізації хмарних витрат, а також поява платформної інженерії (Platform Engineering) — внутрішніх developer portals (Backstage) для самообслуговування розробників.