Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГАК-2026.docx
Скачиваний:
1
Добавлен:
16.06.2026
Размер:
2.66 Mб
Скачать

3.2. Пример Dockerfile

3.3. Основные команды Docker

3.4. Пример docker-compose.Yml

4. Проблемы при использовании только Docker

Когда у вас одно приложение на одном сервере, Docker отлично справляется. Но в реальных системах:

  • Приложений много (десятки микросервисов).

  • Серверов много (кластер).

  • Нужно обеспечивать отказоустойчивость (если сервер упал, контейнеры должны запуститься на другом).

  • Нужно масштабировать (запускать больше копий контейнеров при нагрузке).

  • Нужно обновлять приложения без простоя (rolling updates).

  • Нужно управлять сетью и хранилищами между контейнерами.

Для решения этих проблем нужна оркестрация.

5. Оркестрация контейнеров

Оркестрация — это автоматическое управление жизненным циклом контейнеров в кластере серверов: развёртывание, масштабирование, сетевое взаимодействие, обеспечение отказоустойчивости, обновление.

Самый популярный оркестратор — Kubernetes (часто называют k8s).

6. Kubernetes (K8s)

Kubernetes — это открытая платформа для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Изначально разработан Google, сейчас управляется Cloud Native Computing Foundation (CNCF).

6.1. Основные понятия Kubernetes

  • Кластер (Cluster) — набор машин (узлов), на которых работают контейнеры.

  • Узел (Node) — физическая или виртуальная машина в кластере.

    • Master-узлы — управляют кластером (control plane).

    • Worker-узлы — запускают контейнеры с приложениями.

  • Pod — наименьшая единица в Kubernetes. Один или несколько контейнеров, которые всегда работают вместе и разделяют сеть и хранилище.

  • Deployment — описывает желаемое состояние приложения (например, "запущено 3 реплики образа my-app:latest"). Kubernetes следит, чтобы это состояние поддерживалось.

  • Service — абстракция, которая определяет политику доступа к подам (постоянный IP-адрес и DNS-имя, балансировка нагрузки).

  • ConfigMap / Secret — хранение конфигураций и секретов отдельно от образов.

  • Ingress — управление внешним доступом к сервисам (например, HTTP-маршрутизация).

  • Namespace — виртуальный кластер внутри физического для разделения ресурсов.

6.2. Архитектура Kubernetes

  • API Server — точка доступа к кластеру (через REST API).

  • etcd — распределённое хранилище ключ-значение для всех данных кластера.

  • Scheduler — назначает поды на узлы.

  • Controller Manager — запускает контроллеры, следящие за состоянием.

  • Kubelet — агент на каждом рабочем узле, управляет подами.

  • Kube-proxy — отвечает за сетевые правила и балансировку.

6.3. Пример манифеста Deployment

7. Сравнение Docker и Kubernetes

Характеристика

Docker

Kubernetes

Что делает

Создаёт и запускает контейнеры

Оркестрирует контейнеры на кластере

Где работает

На одной машине

На кластере машин

Масштабирование

Вручную или через Docker Swarm

Автоматическое, декларативное

Самоисцеление

Нет (контейнер упал — надо вручную запустить)

Да (перезапускает упавшие поды)

Обновление без простоя

Сложно

Есть rolling updates

Сеть

Простая, в основном bridge

Сложная, с сервисами и балансировкой

Хранение данных

Тома (volumes)

Persistent Volumes, Storage Classes

Сложность

Низкая

Высокая

Когда использовать

Локальная разработка, маленькие проекты, один сервер

Крупные проекты, микросервисы, продакшн-кластеры

8. Применение в информационных системах

8.1. Микросервисная архитектура

Каждый микросервис упаковывается в свой контейнер. Kubernetes управляет их жизненным циклом, сетевым взаимодействием, масштабированием.

8.2. Непрерывная интеграция и доставка (CI/CD)

  • Приложение собирается в Docker-образ.

  • Образ загружается в реестр.

  • Kubernetes обновляет развёртывание новым образом.

  • Всё автоматизировано (GitLab CI, Jenkins, GitHub Actions).

8.3. Тестовые и staging окружения

Можно быстро создавать изолированные окружения для тестирования (каждая ветка кода — свой namespace в Kubernetes).

8.4. Платформа для разработчиков

Разработчик может поднять полную копию production-окружения на своей машине с помощью Docker Compose, а в production использовать Kubernetes.

8.5. Пакетная обработка и пакетные задания (Jobs)

Kubernetes поддерживает запуск разовых или периодических заданий (CronJobs).

9. Облачные managed-сервисы

Крупные облачные провайдеры предлагают управляемый Kubernetes, чтобы не настраивать master-узлы самостоятельно:

  • Amazon EKS (Elastic Kubernetes Service)

  • Google GKE (Google Kubernetes Engine)

  • Azure AKS (Azure Kubernetes Service)

  • Яндекс.Облако Managed Kubernetes

Они берут на себя управление control plane, обновления, безопасность.

10. Заключение

Ключевые выводы:

  1. Контейнеризация (Docker) позволяет упаковывать приложения с зависимостями, обеспечивая воспроизводимость и изоляцию.

  2. Оркестрация (Kubernetes) управляет контейнерами в кластере: развёртывание, масштабирование, отказоустойчивость, обновления.

  3. Docker — это инструмент для создания и запуска контейнеров на одном узле.

  4. Kubernetes — это платформа для управления контейнерами на множестве узлов.

  5. Вместе они являются основой современной микросервисной архитектуры и DevOps-практик.

  6. В продакшене почти всегда используют Kubernetes (или другой оркестратор), а Docker — для разработки и сборки.

  7. Облачные провайдеры предлагают managed-версии Kubernetes, упрощая администрирование.