Kubernetes и Helm: Первые шаги

Знакомство

Чикшова Екатерина
Системный инженер Рексофт

  • В DevOps с 2018 года
  • Начала свой путь в карьере с маленького стартапа, где была единственным системным инженером
  • Стек:
    Kubernetes, Docker, Helm, GitLab CI, Kafka, PostgreSQL, ClickHouse, Grafana, Python, Bash и т.д.
  • Люблю автоматизировать рутину и делиться знаниями

Короткий путь от базовых понятий Kubernetes до управления приложениями с помощью Helm

От разработки до продакшена

Проблема: "У меня на машине работает!"


  • Разрыв сред: Разработка, тестирование, продакшен — везде разные окружения.
  • Проблема: Несовместимость версий, зависимостей, библиотек.
  • Результат: Непредсказуемость, долгое и болезненное развертывание.
  • Решение: Контейнеризация (Docker)
    • Приложение + зависимости упакованы в единый образ.
    • Образ — переносимая и предсказуемая единица развертывания.

Когда контейнеров становится много


  • Новая проблема: Микросервисная архитектура = десятки/сотни контейнеров.
  • Вопросы к orchestration (оркестрации):
    • Запуск и остановка?
    • Сетевое взаимодействие?
    • Маcштабирование под нагрузку?
    • Восстановление после сбоев?
  • Решение: Нужен автоматизированный контроль и управление жизненным циклом. Нужен Оркестратор.

Оркестраторы: Кто на рынке?

Docker Swarm
Просто, но уже не модно
Apache Mesos
Мощно, но сложно (ниша)
Nomad (HashiCorp)
Проще K8s, универсальный
  • Kubernetes (K8s) — de-facto стандарт, "голый" движок.
  • OpenShift (Red Hat) — enterprise-платформа на базе Kubernetes.
  • Ключевые отличия OpenShift:
    • Интегрированный стек: Встроенные Registry, CI/CD, мониторинг, контроль доступа.
    • Усиленная безопасность: Strict security policies по умолчанию (например, запрет на запуск от root).
    • GUI: Мощный веб-интерфейс для разработчиков и админов.
    • Поддержка: Коммерческая поддержка от Red Hat.
  • Выбор: Нужен полный контроль и гибкость? — K8s. Нужна готовая, предсказуемая платформа с поддержкой? — OpenShift.
Kubernetes (K8s)
Индустриальный стандарт. 'Голый' движок
OpenShift (Red Hat)
Enterprise-платформа на базе K8s. 'Kubernetes с батарейками'.

Что такое Kubernetes?

Что такое Kubernetes?


  • Определение: Open-source система для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями.
  • Происхождение: Google -> CNCF.
  • Аналогия: "Операционная система для кластера".
    • Выделяет ресурсы (CPU, RAM, Disk) под ваши приложения.
    • Вы говорите ЧТО вам нужно (желаемое состояние), K8s решает КАК это выполнить.

Ключевые понятия K8s


Нажимайте на вкладки, чтобы узнать подробнее

Pod
  • Pod — наименьшая и простейшая единица в K8s ("стручок").
  • Это "обертка" для 1+ контейнеров.
  • Контейнеры в Pod:
    • Разделяют сеть (общий IP).
    • Разделяют дисковое пространство (общие тома).
  • Аналогия: Pod — это виртуальный "хост" для ваших контейнеров.
  • Хрупкость: Pod сам по себе не восстанавливается.
Deployment и ReplicaSet
  • Deployment = Стратег: Задает желаемое состояние приложения.
    • Отвечает за обновления (rolling updates) и откаты (rollbacks).
    • Создает и управляет ReplicaSet'ами.
  • ReplicaSet = Исполнитель: Обеспечивает наличие заданного количества идентичных Pod'ов.
    • Его задача — следить за репликами.
    • Создает новые Pod'ы, если они падают или удаляются.
  • Вместе: Deployment управляет ReplicaSet'ами, а ReplicaSet управляет Pod'ами.
Service
  • Проблема: У Pod'ов нестабильные IP. Как к ним обращаться?
  • Решение: Service — стабильная сетевая точка доступа.
  • Дает:
    • Постоянный IP-адрес.
    • Постоянное DNS-имя (внутри кластера).
  • Типы:
    • ClusterIP (только внутри кластера).
    • LoadBalancer (внешний IP для доступа из интернета).
    • NodePort (открывает порт на каждой ноде).

Проблема: Управление множеством манифестов


  • Простое приложение = 3+ YAML-манифеста.
  • Реальное приложение = 10-20+ манифестов.
  • Проблема: Развертывание в dev, stage, prod?
  • Новая проблема: Хаос, копипаста, человеческий фактор, трудно поддерживать.
  • Нужен способ: параметризации, шаблонизации и управления конфигурациями.

Helm - менеджер пакетов для K8s

Решение: Helm - менеджер пакетов для K8s


  • Helm — это как apt / yum / brew для Kubernetes.
  • Основные понятия:
    • Chart: Пакет, содержащий шаблонизированные манифесты + настройки.
    • Values (values.yaml): Настройки для шаблонов (версия образа, кол-во реплик).
    • Release: Запущенный экземпляр chart'а в кластере.
  • Плюсы:
    • Упрощает развертывание сложных приложений (1 команда).
    • Параметризация конфигурации для разных сред.
    • Огромный публичный репозиторий готовых charts.

Наш Helm Chart и магия ReplicaSet


  • Цель: Упаковать наши манифесты в переиспользуемый Chart.
  • Как: Превращаем статические значения в переменные (шаблонизируем).
    • replicas: 1 -> replicas: {{ .Values.replicaCount }}
    • image: nginx -> image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
  • Values.yaml — единый файл конфигурации:
    replicaCount: 2
    image:
      repository: nginx
      tag: alpine
  • Результат: Одна команда helm install создает весь стек (Deployment -> ReplicaSet -> Pods, Service).
  • Вау-эффект: helm upgrade с новым image.tag заставляет Deployment создать новый ReplicaSet для новой версии и выполнить плавное обновление!

Итоги и Что дальше?


  • Коротко изучили: Зачем нужны K8s и Helm.
  • Узнали основные сущности: Pod, Deployment, ReplicaSet, Service.
  • Увидели вживую: Как это все создается и работает
  • Что изучать дальше?
    • ConfigMaps и Secrets (для конфигурации)
    • Volumes (для хранения данных)
    • Ingress (для продвинутой маршрутизации трафика)
    • Namespaces (для изоляции проектов)
    • Мониторинг (Prometheus, Grafana)
  • Ресурсы: Официальная документация Kubernetes

kubernetes.io

DevOps RoadMap

Дополнительные материалы

Для закрепления материала, разобранного на вебинаре, выкладываем архив со всеми артефактами по практическим кейсам. Скачать его можно по ссылке: Kubernetes_Webinar.zip.

Видео лекции