Как запускал новые коды в Kubernetes?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Как запускал новые коды в Kubernetes?
В современной разработке Kubernetes (K8s) стал стандартом для оркестрации контейнеризированных приложений. За 10+ лет работы я применял различные стратегии развертывания, и вот мой опыт.
Подготовка приложения
Первый этап — подготовить приложение к запуску в Kubernetes:
- Dockerization — создание Dockerfile для Node.js приложения
- Health checks — реализация livenessProbe и readinessProbe для отслеживания состояния контейнера
- Graceful shutdown — корректная обработка SIGTERM для завершения текущих запросов
Kubernetes Manifest файлы
Создаю YAML-манифесты для определения Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-app
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: nodejs-app
template:
metadata:
labels:
app: nodejs-app
spec:
containers:
- name: nodejs-app
image: myregistry.azurecr.io/nodejs-app:v1.2.3
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: production
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
resources:
requests:
memory: 256Mi
cpu: 100m
limits:
memory: 512Mi
cpu: 500m
CI/CD Pipeline
Обычно использую GitHub Actions или GitLab CI для автоматизации развертывания. Workflow включает сборку Docker образа, push в registry и обновление Deployment в кластере.
Стратегии развертывания
- Rolling Update (по умолчанию) — поэтапная замена старых подов на новые, обеспечивает zero-downtime
- Blue-Green Deployment — запуск полной копии приложения, переключение трафика после проверки
- Canary Release — постепенный запуск новой версии на небольшой части трафика для раннего обнаружения проблем
Мониторинг и откат
Использую Prometheus + Grafana для метрик, ELK Stack для логирования. Быстрый откат в случае проблем: kubectl rollout undo deployment/nodejs-app
Best Practices
- Секреты и конфигурация — использую ConfigMap и Secrets, не хардкодишь в образе
- Версионирование образов — semantic versioning для контроля версий
- Resource requests/limits — правильное выделение ресурсов для масштабирования
- Service Discovery — использование DNS имен Kubernetes для коммуникации между сервисами
Этот подход позволяет развертывать обновления безопасно, быстро откатываться при необходимости и поддерживать высокую доступность приложений.