Хмари та віртуалізація
Віртуальні машини, контейнери, Docker, Kubernetes, serverless та хмарні платформи
☁ Що таке віртуалізація та хмарні обчислення?
Віртуалізація — це технологія створення програмної абстракції над фізичним обладнанням: процесорами, пам'яттю, дисками та мережевими інтерфейсами. Завдяки віртуалізації один фізичний сервер може одночасно виконувати кілька ізольованих операційних систем або середовищ виконання.
Хмарні обчислення (Cloud Computing) — модель надання обчислювальних ресурсів через Інтернет за запитом. Користувач платить лише за використані ресурси (pay-as-you-go), а інфраструктура масштабується автоматично відповідно до навантаження.
Від віртуальних машин 1960-х (IBM CP-40) до сучасних serverless-архітектур та Kubernetes-кластерів — еволюція обчислень пройшла шлях від монолітних мейнфреймів до гіпермасштабованих розподілених систем, які керують мільярдами контейнерів по всьому світу.
💻 Віртуальні машини
Віртуальна машина (VM) — це програмна емуляція повноцінного комп'ютера: власний процесор, пам'ять, диски, мережеві адаптери та BIOS/UEFI. Гіпервізор (hypervisor) розподіляє фізичні ресурси між кількома VM.
🔹 Типи гіпервізорів
- Тип 1 (Bare-metal) — працює безпосередньо на фізичному залізі. Приклади: VMware ESXi, Microsoft Hyper-V, Xen, KVM (Kernel-based Virtual Machine). Максимальна продуктивність та ізоляція.
- Тип 2 (Hosted) — працює поверх операційної системи хоста. Приклади: VMware Workstation, Oracle VirtualBox, Parallels Desktop. Зручні для розробки та тестування.
🔹 Популярні платформи віртуалізації
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.
📦 Контейнери vs Віртуальні машини
Контейнер — це ізольоване середовище виконання, яке ділить ядро ОС хоста з іншими контейнерами. На відміну від VM, контейнер не емулює апаратуру та не містить повноцінну ОС — лише необхідні бібліотеки та залежності додатка.
🔹 Ключові відмінності
| Параметр | Віртуальна машина | Контейнер |
|---|---|---|
| ОС | Повноцінна ОС на кожній VM | Спільне ядро ОС хоста |
| Розмір | Гігабайти (образ ОС + додаток) | Мегабайти (лише додаток + deps) |
| Запуск | Хвилини (завантаження ОС) | Секунди (процес на хості) |
| Ізоляція | Апаратна (гіпервізор) | Програмна (namespaces, cgroups) |
| Продуктивність | Накладні витрати ~10-20% | Мінімальні втрати (~1-5%) |
| Портативність | Залежить від гіпервізора | Універсальна (будь-який Docker Engine) |
🔹 Механізми ізоляції Linux
- Namespaces — ізоляція просторів імен: PID (процеси), NET (мережа), MNT (файлові системи), UTS (hostname), IPC (міжпроцесна взаємодія), USER (UID/GID), Cgroup (cgroups v2).
- cgroups (control groups) — обмеження та облік ресурсів: CPU, пам'ять, диск I/O, мережа. Дозволяє гарантувати, що один контейнер не з'їсть усі ресурси хоста.
- Capabilities — тонке розподілення привілеїв root. Наприклад, CAP_NET_BIND_SERVICE дозволяє відкривати порти < 1024 без повних root-прав.
- Seccomp (Secure Computing Mode) — фільтр системних викликів. Контейнер може викликати лише дозволені syscall, що різко зменшує поверхню атаки.
🐋 Docker — стандарт контейнеризації
Docker, представлений у 2013 році, зробив контейнеризацію масовою. До Docker контейнери існували (LXC, OpenVZ), але Docker спростив створення, розповсюдження та запуск контейнерів до рівня однієї команди.
🔹 Архітектура Docker
- Docker Engine — демон (dockerd), що керує контейнерами, образами, мережами та томами. CLI-клієнт (docker) надсилає команди через REST API або Unix socket.
- Docker Image — незмінний шаблон контейнера, зібраний шарами (layers). Кожна інструкція у Dockerfile створює новий шар. Шари кешуються та повторно використовуються між образами.
- Docker Container — запущений екземпляр образу. Має власну файлову систему (overlayfs), ізольований мережевий стек та обмежені ресурси.
- Docker Registry — сховище образів. Docker Hub — публічний реєстр. Приватні: AWS ECR, Google Artifact Registry, Harbor, GitHub Container Registry (GHCR).
🔹 Dockerfile — рецепт образу
Dockerfile — текстовий файл з інструкціями для збірки образу. Основні директиви:
FROM— базовий образ (наприклад, ubuntu:22.04, node:18-alpine).RUN— виконання команд під час збірки (apt-get install, npm install).COPY/ADD— копіювання файлів з хоста в образ.WORKDIR— робочий каталог у контейнері.EXPOSE— декларація портів, які слухає додаток.CMD/ENTRYPOINT— команда, що виконується при запуску контейнера.
🔹 Docker Compose
Docker Compose — інструмент для визначення та запуску багатоконтейнерних додатків через YAML-файл docker-compose.yml. Дозволяє описати сервіси, мережі, томи, змінні середовища та залежності між контейнерами. Одна команда docker compose up піднімає всю інфраструктуру додатка.
🔬 Kubernetes — оркестрація контейнерів
Kubernetes (K8s) — відкрита платформа для автоматизації розгортання, масштабування та управління контейнеризованими додатками. Розроблена Google на основі внутрішньої системи Borg, передана CNCF у 2015 році. Сьогодні — де-факто стандарт оркестрації контейнерів.
🔹 Архітектура Kubernetes
- Control Plane (Master) — мозок кластера. Містить: API Server (єдиний вхід для всіх команд), etcd (розподілене сховище конфігурації), Scheduler (призначає поди на вузли), Controller Manager (відстежує стан ресурсів).
- Worker Nodes — вузли, де фактично виконуються контейнери. Кожен вузол містить: kubelet (агент, що керує подами), kube-proxy (мережеві правила iptables/IPVS), Container Runtime (containerd, CRI-O).
🔹 Ключові абстракції 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
- Horizontal Pod Autoscaler (HPA) — автоматично збільшує/зменшує кількість реплік подів на основі метрик CPU, пам'яті або кастомних метрик (Prometheus).
- Vertical Pod Autoscaler (VPA) — коригує запити ресурсів (CPU/RAM) для подів на основі реального використання.
- Cluster Autoscaler — додає/видаляє вузли (worker nodes) у хмарному кластері, коли поди не можуть бути розміщені через брак ресурсів.
⚡ 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 ліміт на безкоштовному плані.
🔹 Переваги та обмеження
- Переваги: нульове адміністрування інфраструктури, автоматичне масштабування до нуля/нескінченності, pay-per-use (платите лише за виклики), швидкий time-to-market.
- Обмеження: cold start (затримка при першому виклику після простою), обмеження часу виконання, складність відлагодження, vendor lock-in, не підходить для довготривалих процесів та stateful-додатків.
☁ Хмарні платформи та моделі
🔹 Моделі хмарних послуг
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 хмарних провайдери
- AWS (Amazon Web Services) — лідер ринку (~32%). 200+ сервісів: EC2, S3, RDS, Lambda, EKS, CloudFront, Route 53. Найширша географія регіонів та зон доступності.
- Microsoft Azure — ~23% ринку. Глибока інтеграція з Windows, Office 365, Active Directory. Сильні позиції у enterprise та гібридних хмарах (Azure Stack).
- Google Cloud Platform (GCP) — ~10% ринку. Лідер у AI/ML (Vertex AI, TPUs), BigQuery (аналітика), Kubernetes (GKE — перший managed K8s).
🔹 Моделі розгортання
- Public Cloud — ресурси провайдера, доступні через Інтернет (AWS, Azure, GCP). Масштабованість, pay-as-you-go, мінімальні капітальні витрати.
- Private Cloud — інфраструктура всередині організації (OpenStack, VMware vCloud, Nutanix). Повний контроль, безпека, відповідність compliance.
- Hybrid Cloud — поєднання public та private з оркестрацією між ними. Дозволяє тримати чутливі дані on-premise, а пікові навантаження виносити у public.
- Multi-Cloud — використання кількох провайдерів одночасно для зниження ризику vendor lock-in та покращення відмовостійкості.
📊 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
- CI (Continuous Integration) — автоматична збірка та тестування коду при кожному коміті. Інструменти: GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis CI, Azure DevOps.
- CD (Continuous Delivery/Deployment) — автоматичне розгортання протестованого коду у staging/production. Continuous Delivery — ручне схвалення перед production. Continuous Deployment — повна автоматизація без ручного втручання.
🔹 IaC — Інфраструктура як код
- Terraform — декларативний інструмент від HashiCorp. Описує бажаний стан інфраструктури у HCL-файлах. Підтримує 3000+ провайдерів (AWS, Azure, GCP, Kubernetes, GitHub). План змін (terraform plan) перед застосуванням (terraform apply).
- Ansible — імперативний інструмент керування конфігурацією. Використовує YAML playbooks. Агентless (працює через SSH). Ідеальний для налаштування серверів, встановлення ПЗ, розгортання додатків.
- Pulumi — IaC на звичайних мовах програмування (TypeScript, Python, Go, C#). Дозволяє використовувати цикли, умови, функції — повноцінну логіку.
- CloudFormation (AWS) / ARM (Azure) / Deployment Manager (GCP) — нативні 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) для самообслуговування розробників.