Встречается на 33% собеседований по DevOps

Что такое kubernetes

Kubernetes (часто сокращенно K8s) — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Она была разработана в Google на основе опыта работы с контейнерами в продакшене и стала стандартом для оркестрации контейнеров в индустрии.

Основные концепции

Kubernetes оперирует несколькими ключевыми абстракциями, которые позволяют описывать желаемое состояние системы и автоматически поддерживать его.

  • Поды (Pods) — базовая единица развертывания. Под может содержать один или несколько контейнеров, которые разделяют сетевые настройки и хранилище. Контейнеры в поде всегда запускаются на одном узле.
  • Узлы (Nodes) — физические или виртуальные машины, на которых запускаются поды. Каждый узел управляется мастер-узлом и содержит службы для запуска подов: kubelet, kube-proxy и среду выполнения контейнеров (например, Docker).
  • Контроллеры (Controllers) — компоненты, которые следят за тем, чтобы фактическое состояние кластера соответствовало желаемому. Примеры: ReplicaSet (поддерживает нужное количество реплик), Deployment (управляет обновлениями приложений), StatefulSet (для приложений с состоянием).
  • Сервисы (Services) — абстракция, определяющая логический набор подов и политику доступа к ним. Сервисы обеспечивают стабильный DNS-адрес и балансировку нагрузки между подами.
  • Пространства имен (Namespaces) — механизм изоляции частей кластера. Позволяет разделять ресурсы между командами или проектами.
  • ConfigMaps и Secrets — объекты для хранения конфигурационных данных и конфиденциальной информации (паролей, ключей) соответственно. Они могут монтироваться в поды как файлы или переменные окружения.

Архитектура

Кластер Kubernetes состоит из двух типов узлов:

  • Мастер-узел (Master Node) — управляет кластером и принимает решения о развертывании: когда, где и как запускать поды. Включает компоненты: kube-apiserver (точка входа для API), etcd (хранилище состояния), kube-scheduler (планировщик), kube-controller-manager (менеджер контроллеров).
  • Рабочие узлы (Worker Nodes) — на них запускаются приложения. Каждый рабочий узел содержит kubelet (агент, управляющий подами), kube-proxy (сетевые правила) и среду выполнения контейнеров.

Почему Kubernetes стал популярен

  • Масштабируемость: эффективно управляет тысячами контейнеров, автоматически масштабируя приложения по нагрузке.
  • Надежность и устойчивость: автоматическое восстановление от сбоев — перезапуск неисправных контейнеров, перераспределение подов при падении узлов.
  • Гибкость и портативность: работает в любых средах — публичных облаках, виртуальных машинах, физических серверах.
  • Управление конфигурацией и секретами: централизованное хранение и предоставление конфигурационных данных и секретов.
  • Автоматизация: упрощает развертывание, обновление и откат приложений, а также интеграцию с CI/CD.

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

Ниже приведен пример YAML-манифеста для развертывания приложения nginx с тремя репликами:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

Этот манифест описывает желаемое состояние: три реплики пода с контейнером nginx. Kubernetes сам создаст поды и будет поддерживать их количество.

Подводные камни

  • Сложность: Kubernetes имеет крутую кривую обучения; для небольших проектов может быть избыточен.
  • Ресурсоемкость: мастер-узлы и системные компоненты требуют значительных вычислительных ресурсов.
  • Сетевое взаимодействие: требует настройки сетевых плагинов (CNI) и понимания модели сервисов.
  • Хранение данных: для stateful-приложений нужны PersistentVolumes и правильная стратегия бэкапов.

Коротко

  • Kubernetes — платформа для оркестрации контейнеров, стандарт индустрии.
  • Ключевые объекты: поды, узлы, контроллеры, сервисы, namespace, ConfigMaps/Secrets.
  • Архитектура: мастер-узел (управление) и рабочие узлы (запуск приложений).
  • Преимущества: масштабируемость, самовосстановление, портативность, автоматизация.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы