Вопрос 7: мониторинг. Без мониторинга Kubernetes — чёрный ящик. Минимальный стек:
# Установка Prometheus + Grafana через kube-prometheus-stack
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set grafana.adminPassword=<пароль> \
--set prometheus.prometheusSpec.retention=30d \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=50Gi
Вопрос 8: health checks. Kubernetes должен знать, жив ли ваш контейнер и готов ли он принимать трафик:
spec:
containers:
- name: api
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 15
failureThreshold: 3 # 3 сбоя подряд → перезапуск контейнера
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 2 # 2 сбоя → под убирается из Service
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 2 # 60 секунд на запуск приложения
Три типа проб:
livenessProbe — «жив ли контейнер?». Если нет — перезапуск.
readinessProbe — «готов ли принимать трафик?». Если нет — убирается из балансировки, но не перезапускается.
startupProbe — «запустился ли?». Даёт время тяжёлым приложениям (Java с Spring Boot стартует 30–60 сек).
Вопрос 9: CI/CD. Деплой через kubectl apply с локальной машины — антипаттерн. Минимальный пайплайн:
# .gitlab-ci.yml (пример)
stages:
- build
- deploy-staging
- deploy-production
build:
stage: build
script:
- docker build -t registry.technostart.ru/api:$CI_COMMIT_SHA .
- docker push registry.technostart.ru/api:$CI_COMMIT_SHA
deploy-staging:
stage: deploy-staging
script:
- kubectl --context staging set image deployment/api api=registry.technostart.ru/api:$CI_COMMIT_SHA -n staging
- kubectl --context staging rollout status deployment/api -n staging --timeout=120s
deploy-production:
stage: deploy-production
when: manual # Только ручной запуск!
script:
- kubectl --context production set image deployment/api api=registry.technostart.ru/api:$CI_COMMIT_SHA -n production
- kubectl --context production rollout status deployment/api -n production --timeout=120s
Вопрос 10: готовность приложения. Kubernetes требует от приложения:
- Читать конфигурацию из переменных окружения или ConfigMap (не из локального config.xml).
- Писать логи в stdout/stderr (не в файлы).
- Быть stateless — состояние в базе данных или Redis, не на локальном диске.
- Корректно обрабатывать SIGTERM для graceful shutdown.
- Отдавать метрики на /metrics для Prometheus.
- Реализовать эндпоинты /healthz и /ready для проб.
Если приложение не соответствует этим требованиям — сначала адаптируйте его, и только потом деплойте в K8s. Иначе вы получите все проблемы монолита на VPS плюс сложность Kubernetes сверху.
Оставить комментарий