Skip to content

Kubernetes-развёртывание

Структура манифестов

Все манифесты находятся в директории k8s/:

k8s/
├── cert-manager/
│   └── issuer.yaml          # ClusterIssuer для Let's Encrypt
├── config.yaml              # Namespace, ConfigMap, Secret, RBAC
├── deployment.yaml          # Основной deployment (2 реплики)
├── deployment-v2.yaml       # Canary/blue-green deployment
└── services.yaml            # Services, Ingress с TLS

Установка

bash
# Применить все манифесты
kubectl apply -f k8s/config.yaml
kubectl apply -f k8s/services.yaml
kubectl apply -f k8s/deployment.yaml

# Настроить cert-manager
kubectl apply -f k8s/cert-manager/issuer.yaml

Blue-green deployment

Для бесшовного обновления используется deployment-v2.yaml:

bash
# Запуск новой версии
kubectl apply -f k8s/deployment-v2.yaml

# После проверки — переключить трафик на v2
kubectl patch service slozy-web-service -p '{"spec":{"selector":{"version":"v2"}}}'

# Откат при необходимости
kubectl patch service slozy-web-service -p '{"spec":{"selector":{"version":"v1"}}}'

HPA (Horizontal Pod Autoscaler)

Deployment настроен с лимитами CPU и памяти, что позволяет HPA масштабировать количество подов:

yaml
resources:
  requests:
    memory: "128Mi"
    cpu: "100m"
  limits:
    memory: "512Mi"
    cpu: "500m"

Для включения HPA:

bash
kubectl autoscale deployment slozy-web --cpu-percent=70 --min=2 --max=10

Ingress и TLS

Ingress использует cert-manager для автоматического выпуска SSL-сертификатов Let's Encrypt:

yaml
annotations:
  cert-manager.io/cluster-issuer: "letsencrypt-prod"
tls:
  - hosts:
    - api.slozy.net
    secretName: slozy-tls

ConfigMap и Secrets

Конфигурация вынесена в ConfigMap (slozy-config), секреты — в Secret (slozy-secrets):

yaml
# ConfigMap
POSTGRES_MAX_OPEN_CONNS: "25"
POSTGRES_MAX_IDLE_CONNS: "10"
DEV_MODE: "false"

# Secret
POSTGRES_PASSWORD: "change-me"
JWT_SECRET: "change-me-min-32-chars-production-secret"