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.yamlBlue-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=10Ingress и TLS
Ingress использует cert-manager для автоматического выпуска SSL-сертификатов Let's Encrypt:
yaml
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
tls:
- hosts:
- api.slozy.net
secretName: slozy-tlsConfigMap и 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"