Развертывание и масштабирование приложений в 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
- Запустите наблюдение:
kubectl get pods -w. - Увеличьте число реплик до 5.
- Проследите, как быстро статус меняется с
PendingнаRunning. - Удалите один под вручную:
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