← Назад к вопросам

Что делал в Kubernetes?

3.0 Senior🔥 121 комментариев
#DevOps и инфраструктура

Комментарии (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. Версионируй образы правильно для отката.

Что делал в Kubernetes? | PrepBro