PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Kubernetes простыми словами: первые шаги для разработчика

    Kubernetes простыми словами: первые шаги для разработчика

    Аватар автора Kubernetes простыми словами: первые шаги для разработчика

    Антон Ларичев

    Иконка календаря04 июля 2026
    kubernetesdevopsdockerконтейнерыоркестрацияk8sjuniorИконка уровня junior
    Картинка поста Kubernetes простыми словами: первые шаги для разработчика

    Введение

    Если вы уже работали с Docker и запускали контейнеры вручную, то рано или поздно столкнулись с вопросом: а как управлять десятками контейнеров в продакшне? Как перезапускать упавший контейнер, распределять нагрузку, обновлять приложение без простоя?

    Kubernetes (или k8s) решает именно эти задачи. Это платформа оркестрации контейнеров, которую Google открыл в 2014 году. Сегодня она стала стандартом индустрии для запуска production-нагрузок.

    В этой статье мы разберём ключевые концепции Kubernetes и запустим простое приложение в локальном кластере с помощью minikube.

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

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

    Кластер

    Кластер — это набор машин (узлов), на которых запускаются ваши приложения. Он делится на две части:

    • Control Plane — управляет кластером: планирует запуск контейнеров, следит за состоянием системы
    • Worker Nodes — рабочие узлы, где непосредственно работают ваши контейнеры

    Pod

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-app
    spec:
      containers:
        - name: web
          image: nginx:1.25
          ports:
            - containerPort: 80
    

    Однако поды напрямую почти не создают — для этого используют более высокоуровневые объекты.

    Deployment

    Deployment управляет группой одинаковых подов и гарантирует, что нужное количество реплик всегда запущено. Если под упадёт, Deployment автоматически создаст новый.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      replicas: 3  # хотим три копии приложения
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
            - name: web
              image: nginx:1.25
              ports:
                - containerPort: 80
              resources:
                requests:
                  memory: "64Mi"
                  cpu: "100m"
                limits:
                  memory: "128Mi"
                  cpu: "200m"
    

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

    Service

    Поды имеют динамические IP-адреса, которые меняются при перезапуске. Service — стабильная точка доступа к группе подов. Он находит поды по лейблам и балансирует трафик между ними.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app  # ищем все поды с этим лейблом
      ports:
        - protocol: TCP
          port: 80        # порт сервиса
          targetPort: 80  # порт контейнера
      type: ClusterIP  # доступен только внутри кластера
    

    Установка minikube и первый запуск

    Для локальной разработки используем minikube — инструмент, который запускает одноузловой кластер прямо на вашей машине.

    # Установка kubectl — CLI для управления кластером
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    
    # Установка minikube
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
    
    # Запуск кластера
    minikube start
    
    # Проверка состояния
    kubectl get nodes
    

    После запуска вы увидите один узел в статусе Ready.

    Деплой первого приложения

    Создадим файл deployment.yaml и применим его:

    # Применяем конфигурацию
    kubectl apply -f deployment.yaml
    
    # Смотрим статус подов
    kubectl get pods
    
    # Подробная информация о поде (полезно при ошибках)
    kubectl describe pod my-app-xxxxxx
    
    # Логи контейнера
    kubectl logs my-app-xxxxxx
    

    Применим также Service и проверим доступность:

    kubectl apply -f service.yaml
    
    # Для minikube открываем туннель к сервису
    minikube service my-app-service
    

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

    Одна из ключевых возможностей Kubernetes — простое масштабирование:

    # Увеличиваем количество реплик до 5
    kubectl scale deployment my-app --replicas=5
    
    # Смотрим, как создаются новые поды
    kubectl get pods -w
    

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

    # Обновляем версию образа — Kubernetes сделает rolling update
    kubectl set image deployment/my-app web=nginx:1.26
    
    # Следим за процессом обновления
    kubectl rollout status deployment/my-app
    
    # Если что-то пошло не так — откат к предыдущей версии
    kubectl rollout undo deployment/my-app
    

    Namespace — изоляция окружений

    Namespace позволяет логически разделить кластер. Удобно создавать отдельные namespace для dev, staging и production:

    # Создаём namespace для разработки
    kubectl create namespace development
    
    # Деплоим приложение в конкретный namespace
    kubectl apply -f deployment.yaml -n development
    
    # Смотрим поды в namespace
    kubectl get pods -n development
    

    Частые ошибки

    ImagePullBackOff — Kubernetes не может скачать образ. Проверьте имя образа, тег и доступность registry. Если используете приватный registry, нужен Secret с кредами.

    CrashLoopBackOff — контейнер запускается и сразу падает. Смотрите логи: kubectl logs <pod-name> --previous покажет логи упавшего контейнера.

    Pending-поды — поду не хватает ресурсов. Проверьте kubectl describe pod <name> — в секции Events будет причина. Часто решается снижением requests в конфигурации.

    Отсутствие лимитов ресурсов — без limits один под может вытеснить остальные с узла. Всегда указывайте resources.limits.

    Прямое редактирование подов — поды созданы Deployment-ом пересоздаются при изменении конфига. Всегда меняйте Deployment, а не под напрямую.

    Заключение

    Mы разобрали базовые строительные блоки Kubernetes: Pod, Deployment, Service и Namespace. Этого достаточно, чтобы запускать и обновлять приложения, масштабировать их и изолировать окружения.

    Дальнейшие шаги для изучения: ConfigMap и Secret для конфигурации, Ingress для HTTP-маршрутизации, PersistentVolume для хранения данных, а также HorizontalPodAutoscaler для автоматического масштабирования по нагрузке.

    Kubernetes поначалу кажется сложным, но его декларативный подход — описываем желаемое состояние, а система сама к нему стремится — делает управление инфраструктурой предсказуемым и воспроизводимым.

    Иконка глаза2

    Комментарии

    0

    Постройте личный план изучения Основы Git до уровня Middle — бесплатно!

    Основы Git — часть карты развития Frontend, Backend, DevOps

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    изображение курса

    Основы JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Nginx как reverse proxy для Node.js: настройка за 30 минут
    Иконка аватараАнтон
    Иконка календаря17 июня 2026
    nginxnodejsdevops+ 2middleИконка уровня middle

    Nginx как reverse proxy для Node.js: настройка за 30 минут

    Nginx как reverse proxy для Node.js: пошаговая настройка, SSL, балансировка нагрузки, кэширование статики и WebSocket за 30 минут.

    Иконка чипа0
    Иконка глаза696
    Иконка комментариев0
    Картинка поста CI/CD с GitHub Actions: автоматизация деплоя для начинающих
    Иконка аватараАнтон
    Иконка календаря03 июля 2026
    CI/CDGitHub ActionsDevOps+ 2juniorИконка уровня junior

    CI/CD с GitHub Actions: автоматизация деплоя для начинающих

    CI/CD с GitHub Actions: пошаговая настройка pipeline для автоматического тестирования и деплоя Node.js-приложений без сторонних сервисов.

    Иконка чипа0
    Иконка глаза37
    Иконка комментариев0
    Картинка поста Clean Architecture: чистая архитектура для веб-разработки
    Иконка аватараАнтон
    Иконка календаря02 июля 2026
    архитектураclean architecturetypescript+ 3middleИконка уровня middle

    Clean Architecture: чистая архитектура для веб-разработки

    Clean Architecture разделяет код на независимые слои: бизнес-логика не зависит от фреймворков, БД и внешних сервисов. Разбираем на примерах TypeScript.

    Иконка чипа0
    Иконка глаза67
    Иконка комментариев0
    Иконка чипа0