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 поначалу кажется сложным, но его декларативный подход — описываем желаемое состояние, а система сама к нему стремится — делает управление инфраструктурой предсказуемым и воспроизводимым.

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

    Комментарии

    0

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

    JavaScript Advanced - продвинутые концепции языка и ООП — часть карты развития Frontend, Backend, Mobile

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

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

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

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

    TypeScript с нуля

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

    React и Redux Toolkit

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

    Neovim

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

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

    Картинка поста Git флоу для команды разработчиков: гайд по веткам и релизам
    Иконка аватараАнтон
    Иконка календаря30 сентября 2026
    gitgit-flowкомандная работа+ 2middleИконка уровня middle

    Git флоу для команды разработчиков: гайд по веткам и релизам

    Git флоу для команды разработчиков: разбираем Git Flow, GitHub Flow и trunk-based development — как выбрать модель веток и избежать конфликтов при совместной работе.

    Иконка чипа0
    Иконка глаза92
    Иконка комментариев0
    Картинка поста Микросервисная архитектура для начинающих: гайд с примерами
    Иконка аватараАнтон
    Иконка календаря23 сентября 2026
    микросервисыархитектураbackend+ 2juniorИконка уровня junior

    Микросервисная архитектура для начинающих: гайд с примерами

    Микросервисная архитектура простыми словами: чем она отличается от монолита, какие есть плюсы и минусы, и как спроектировать первую систему на микросервисах — с примерами кода.

    Иконка чипа0
    Иконка глаза185
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря01 октября 2026
    AI-инструментыDevOpsразработка+ 2middleИконка уровня middle

    Gemini CLI в России: как установить и настроить

    Установить Gemini CLI из России можно без VPN и без ухищрений — это обычный npm-пакет, он скачивается и запускается на любой машине. Упирается всё на следующем шаге: 18 июня 2026 года Google перестал обслуживать запросы Gemini CLI для бесплатных аккаунтов и подписчиков Google AI Pro и Ultra, а единственный оставшийся путь — вход по API-ключу — требует биллинга в регионе, где Россия не числится. Ниже разбираем, как агент ставится, как устроены три способа входа, почему ни один из них не доводи...

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