Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Kubernetes для Python-разработчика
Kubernetes — это оркестровочная платформа для контейнеризированных приложений. В роли Python-разработчика я работал с K8s в нескольких аспектах.
Подготовка приложения к K8s
Контейнеризация — первый шаг. Создание Dockerfile для Python приложения:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0"]
12-factor app — проектирование приложения для K8s:
- Configuration через environment variables
- Stateless дизайн (состояние в БД/Redis)
- Graceful shutdown
- Health checks
Развёртывание в K8s
Kubernetes Manifest — YAML файлы для описания приложения:
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-app
spec:
replicas: 3
selector:
matchLabels:
app: python-app
template:
metadata:
labels:
app: python-app
spec:
containers:
- name: app
image: my-python-app:1.0
ports:
- containerPort: 8000
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8000
initialDelaySeconds: 5
periodSeconds: 5
Service для доступа к приложению:
apiVersion: v1
kind: Service
metadata:
name: python-app-service
spec:
selector:
app: python-app
type: LoadBalancer
ports:
- port: 80
targetPort: 8000
Управление конфигурацией
# Приложение читает config из environment
import os
from pydantic import BaseSettings
class Settings(BaseSettings):
database_url: str = os.getenv("DATABASE_URL")
redis_url: str = os.getenv("REDIS_URL")
debug: bool = os.getenv("DEBUG", "false").lower() == "true"
workers: int = int(os.getenv("WORKERS", "4"))
class Config:
env_file = ".env"
settings = Settings()
ConfigMaps и Secrets:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DEBUG: "false"
LOG_LEVEL: "info"
---
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
stringData:
url: "postgresql://user:pass@db:5432/mydb"
Работа с базами данных
# Миграции в K8s — запускать как Job перед deployment
from alembic.config import Config
from alembic.script import ScriptDirectory
from alembic.runtime.migration import MigrationContext
from alembic.operations import Operations
async def run_migrations():
"""Запустить миграции при инициализации"""
alembic_cfg = Config("alembic.ini")
alembic_cfg.set_main_option("sqlalchemy.url", DATABASE_URL)
command.upgrade(alembic_cfg, "head")
# В K8s Job:
# apiVersion: batch/v1
# kind: Job
# ... запускает: python -m alembic upgrade head
Логирование и мониторинг
import logging
import json
from pythonjsonlogger import jsonlogger
# JSON логирование для K8s (собирает в centralized logging)
logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = jsonlogger.JsonFormatter()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("Application started", extra={"component": "api"})
CI/CD интеграция
# GitLab CI / GitHub Actions
script:
- docker build -t registry.example.com/python-app:$CI_COMMIT_SHA .
- docker push registry.example.com/python-app:$CI_COMMIT_SHA
- kubectl set image deployment/python-app app=registry.example.com/python-app:$CI_COMMIT_SHA
Масштабирование
# Horizontal Pod Autoscaling
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: python-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: python-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Лучшие практики
Используй init containers для подготовки окружения. Установи правильные resource limits для стабильности. Интегрируй health checks для reliability. Используй readiness/liveness probes для graceful updates. Логируй в stdout для K8s aggregation. Версионируй образы правильно для отката.