Развертывание и масштабирование приложений в Minikube/K3s

Мы изучили основные объекты Kubernetes и научились взаимодействовать с кластером через kubectl. Теперь перейдем от теории к практике: запустим приложение в реальном окружении. Для локальной разработки и тестирования в 2026 году используют «облегченные» дистрибутивы — они позволяют развернуть полноценный кластер прямо на ноутбуке.

Выбор локального кластера: Minikube или K3s

Локальный кластер — это среда Kubernetes, работающая внутри одной виртуальной машины или Docker-контейнера на вашем компьютере.

  • Minikube — классический инструмент. Поддерживает разные драйверы (Docker, VirtualBox, QEMU). Подходит для глубокого изучения всех функций K8s.
  • K3s — дистрибутив от Rancher, оптимизированный для экономии ресурсов. В 2026 году это стандарт для Edge-вычислений и слабых машин, так как он потребляет вдвое меньше оперативной памяти, чем стандартный Kubernetes.

Развертывание приложения через Deployment

Deployment описывает «желаемое состояние» системы. Используем его, чтобы запустить Python-приложение, которое мы упаковывали в Docker.

Запустите кластер:

minikube start --cpus 2 --memory 4096
# Или для K3s:
# k3s server &

Создайте манифест app-deployment.yaml. В нем мы укажем количество реплик и образ контейнера.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: python-app
spec:
  replicas: 2 # Запускаем 2 копии приложения для отказоустойчивости
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web-container
        image: python:3.11-slim
        command: ["python", "-m", "http.server", "8080"]
        ports:
        - containerPort: 8080

Примените манифест: kubectl apply -f app-deployment.yaml. Kubernetes создаст ReplicaSet, который запустит два пода.


Доступ к приложению: Expose Service

Поды эфемерны: при перезагрузке они получают новые IP-адреса. Чтобы получить стабильный адрес, нужно выполнить операцию expose service (публикация сервиса).

Как показано на Схеме 1, сервис работает как посредник: он знает актуальные IP-адреса всех подов и распределяет трафик между ними.

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

# Создаем сервис для нашего деплоймента
kubectl expose deployment python-app --type=NodePort --port=8080 --name=python-service

# Узнаем URL для доступа (команда для Minikube)
minikube service python-service --url

Масштабирование и отказоустойчивость

Масштабирование — это изменение количества реплик приложения под нагрузку. В Kubernetes это происходит почти мгновенно, так как не нужно настраивать новые серверы, только запустить контейнеры.

Изменим количество реплик через терминал:

kubectl scale deployment python-app --replicas=5
  1. Запустите наблюдение: kubectl get pods -w.
  2. Увеличьте число реплик до 5.
  3. Проследите, как быстро статус меняется с Pending на Running.
  4. Удалите один под вручную: kubectl delete pod [имя_пода]. Deployment тут же создаст новый, чтобы вернуть их количество к 5. 🛰️

Обновление приложения без простоя: Rolling Update

Механизм rolling update (плавное обновление) позволяет менять версию приложения без остановки сервиса. Kubernetes заменяет поды по очереди: запускает новый, проверяет его готовность и только потом удаляет старый.

На Сравнении 1 видна разница между полной перезагрузкой и постепенной заменой в Kubernetes.

Чтобы запустить обновление образа, выполните:

kubectl set image deployment/python-app web-container=python:3.12-slim

Если новый образ окажется нерабочим, вернитесь к стабильной версии одной командой: kubectl rollout undo deployment/python-app.

Мы научились разворачивать, масштабировать и обновлять приложения. Это база современной инфраструктуры. Но когда приложений станут десятки, следить за ними вручную будет невозможно. Чтобы вовремя замечать нехватку ресурсов, в следующей теме мы настроим инструменты мониторинга — Prometheus и Grafana.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram