Этот конспект не сохранится

Закроешь вкладку — потеряешь. Зарегистрируйся — и он будет в библиотеке навсегда.

Telegram

Ваш конспект

YouTubeKubernetes Crash Course for Absolute Beginners [NEW]

🚀 Kubernetes: Быстрый старт за 1 час

Ключевые тезисы:

  • Kubernetes — это оркестратор контейнеров для управления сотнями/тысячами контейнеров в разных средах.
  • Решает задачи высокой доступности (HA), масштабируемости и восстановления после сбоев (Disaster Recovery).
  • Основная архитектура: Master Node (управление) + Worker Nodes (запуск приложений).
  • Конфигурация в Kubernetes декларативна (описываем желаемое состояние в YAML/JSON).
  • Для локальной разработки и тестирования используется Minikube (одноузловой кластер).
  • Взаимодействие с кластером происходит через kubectl (CLI-инструмент) и API-сервер.

🎯 Что такое Kubernetes и зачем он нужен?

Kubernetes — это open-source фреймворк для оркестрации контейнеров, изначально созданный Google. Он управляет контейнеризированными приложениями, состоящими из множества контейнеров, в различных средах: физических/виртуальных машинах, облаке или гибридных развертываниях.

🔥 Решаемые проблемы:

  1. Высокая доступность (High Availability): Приложение работает без простоев и всегда доступно для пользователей.
  2. Масштабируемость (Scalability): Быстрое масштабирование приложения вверх/вниз в зависимости от нагрузки.
  3. Восстановление после сбоев (Disaster Recovery): Механизмы резервного копирования и восстановления состояния приложения и данных при сбоях инфраструктуры.

🏗️ Архитектура Kubernetes

Кластер Kubernetes состоит как минимум из одного Master Node и нескольких Worker Nodes.

🧠 Master Node (Узел управления)

Запускает ключевые процессы для управления кластером:

  • API Server: Точка входа в кластер. Через него взаимодействуют все клиенты (UI, API, kubectl).
  • Controller Manager: Следит за состоянием кластера (например, перезапускает упавшие контейнеры).
  • Scheduler: Интеллектуально распределяет контейнеры по Worker Nodes на основе их нагрузки и доступных ресурсов.
  • etcd: Key-value хранилище, которое в реальном времени хранит состояние всего кластера (конфигурации, статусы). Резервные копии (снапшоты) etcd используются для восстановления кластера.

⚠️ Важно: Master Node критически важен. В production-средах обычно развертывают несколько Master Nodes для отказоустойчивости.

⚙️ Worker Nodes (Рабочие узлы)

Здесь запускаются приложения. На каждом Worker Node работает:

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

🌐 Виртуальная сеть объединяет все узлы кластера в единую "машину" с суммарными ресурсами.


📦 Основные компоненты Kubernetes (на примере веб-приложения с БД)

1. Pod

  • Наименьшая и основная единица в Kubernetes.
  • Это абстракция над контейнером, создающая среду выполнения. Позволяет Kubernetes не зависеть от конкретной технологии контейнеров (Docker и др.).
  • Обычно в одном Pod запускается один контейнер приложения, но могут быть и вспомогательные ("sidecar") контейнеры.

2. Service

  • Постоянный статический IP-адрес и DNS-имя, которые можно привязать к Pod.
  • Жизненный цикл Service не связан с Pod. Если Pod умирает и пересоздается с новым IP, Service и его адрес остаются прежними.
  • Также выступает в роли внутреннего балансировщика нагрузки (Load Balancer) между репликами Pod.
  • Типы:
    • Internal (ClusterIP): Для внутреннего доступа внутри кластера (например, для БД).
    • External (NodePort/LoadBalancer): Для доступа извне. NodePort открывает порт на самом узле (Node) в диапазоне 30000-32767.

3. Ingress

  • Компонент для внешнего доступа по "красивому" URL (например, https://myapp.com).
  • Запросы извне сначала попадают на Ingress, который перенаправляет их на соответствующий Service внутри кластера.

4. ConfigMap

  • Внешняя конфигурация для приложения (например, URL базы данных).
  • Хранит данные в виде пар "ключ-значение" в открытом текстовом формате.
  • Изменение ConfigMap не требует пересборки образа приложения.

5. Secret

  • Аналогичен ConfigMap, но предназначен для хранения конфиденциальных данных (пароли, ключи, сертификаты).
  • Данные хранятся в base64-encoded формате (но это не шифрование!).
  • Для безопасности Secrets необходимо шифровать с помощью сторонних инструментов.

6. Volumes (Тома)

  • Обеспечивают постоянное хранение данных для Pod.
  • Подключают физическое хранилище (локальное на узле или удаленное, например, облачное) к Pod.
  • Kubernetes не управляет резервным копированием и репликацией данных в Volume — это ответственность администратора.

7. Deployment & StatefulSet

  • Deployment: "Чертеж" (blueprint) для создания и управления Pod. Позволяет декларативно указать желаемое количество реплик (replicas) Pod и легко масштабироваться. Обеспечивает высокую доступность stateless-приложений (веб-серверы, микросервисы).
  • StatefulSet: Аналог Deployment для stateful-приложений (базы данных: MongoDB, MySQL и т.д.). Управляет репликацией и синхронизацией доступа к общему хранилищу, чтобы избежать противоречий данных.
    • 💡 На практике базы данных часто размещают вне Kubernetes из-за сложности управления.

⚙️ Конфигурация и работа с кластером

📄 Конфигурационные файлы

  • Все настройки подаются в декларативном виде в формате YAML или JSON через API-сервер.
  • Структура файла:
    1. apiVersion & kind (тип ресурса, например, Deployment).
    2. metadata (имя, метки).
    3. spec (желаемая конфигурация).
    4. status (фактическое состояние, заполняется Kubernetes автоматически на основе данных из etcd).

🛠️ Инструменты для локальной разработки

  • Minikube: Инструмент для запуска одноузлового локального кластера Kubernetes. Master и Worker процессы работают на одной машине (виртуальной или в контейнере).
  • kubectl: Основной CLI-инструмент для взаимодействия с любым кластером Kubernetes (локальным Minikube или production).
    • kubectl get <component> — список компонентов (pods, services, deployments).
    • kubectl describe <component> <name> — детальная информация о компоненте.
    • kubectl logs <pod-name> — логи контейнера в Pod.
    • kubectl apply -f <file.yaml> — применить конфигурацию из файла.

🎬 Практический пример: Развертывание приложения

Цель: Развернуть веб-приложение (Node.js) с базой данных (MongoDB) в Minikube.

Шаги:

  1. Установка и запуск Minikube с драйвером Docker.
  2. Создание конфигурационных файлов YAML:
    • config.yaml — ConfigMap с URL БД.
    • secret.yaml — Secret с логином и паролем для БД (в base64).
    • mongo.yaml — Deployment и Service для MongoDB. В Deployment указываются environment variables, берущие значения из Secret.
    • webapp.yaml — Deployment и Service типа NodePort для веб-приложения. Environment variables приложения ссылаются на ConfigMap и Secret.
  3. Применение конфигураций через kubectl в правильном порядке (сначала ConfigMap/Secret, затем зависимости):
    kubectl apply -f config.yaml
    kubectl apply -f secret.yaml
    kubectl apply -f mongo.yaml
    kubectl apply -f webapp.yaml
    
  4. Проверка развертывания:
    • kubectl get all — статус всех компонентов.
    • kubectl get pods — статус подов.
    • minikube ip — получение IP-адреса кластера.
    • Доступ к приложению в браузере по адресу: http://<MINIKUBE_IP>:<NODE_PORT>.

✅ Выводы

  • Kubernetes — мощный стандарт для оркестрации контейнеров, решающий ключевые задачи production-сред.
  • Основная логика строится вокруг Pod, Service, Deployment/StatefulSet, ConfigMap/Secret и Volume.
  • Minikube и kubectl — обязательные инструменты для начала работы и экспериментов.
  • Конфигурация ведется декларативно в YAML-файлах, которые удобно хранить вместе с кодом приложения (Infrastructure as Code).
🚀 Быстрый старт с Kubernetes за 1 час — конспект на EchoNote