Медленный деплой в Kubernetes — боль любого DevOps-инженера. Ожидание завершения обновления может растягиваться на минуты, а иногда и дольше. Давайте разберёмся, как ускорить этот процесс!
1️⃣ Используем
kubectl rollout restart вместо полного пересоздания подов Вместо
kubectl delete pod лучше использовать:
kubectl rollout restart deployment my-app
Так Kubernetes обновит поды поочередно, не убивая их сразу.
2️⃣ Минимизируем образ контейнера
Чем меньше образ, тем быстрее он загружается. Используйте минимальные базовые образы, например:
-
alpine-
distroless-
scratch 3️⃣ Включаем сжатие в Docker
При
docker push можно сжать слои с помощью:
export DOCKER_BUILDKIT=1
docker build --compress -t my-app .
Это ускорит загрузку образа в реестр.
4️⃣ Используем kustomize или Helm для ускорения шаблонизации
Kustomize позволяет изменять манифесты без дублирования, а Helm хранит шаблоны, минимизируя изменения в
values.yaml. 5️⃣ Подключаем
imagePullPolicy: IfNotPresent Если образ уже есть на ноде, Kubernetes не будет скачивать его заново. Включаем в деплойменте:
containers:
- name: my-app
image: my-registry/my-app:latest
imagePullPolicy: IfNotPresent
Но будь осторожен — это работает только при версионных тегах!
6️⃣ Настраиваем readinessProbe
Иногда поды стартуют, но ещё не готовы принимать трафик. Добавляем
readinessProbe, чтобы сервис не направлял запросы на неподготовленные поды:
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 2
periodSeconds: 5
Это ускоряет переключение на новые версии.
7️⃣ Параллельный rollout (maxSurge/maxUnavailable)
Позволяет обновлять несколько подов сразу:
strategy:
rollingUpdate:
maxSurge: 2
maxUnavailable: 1
type: RollingUpdate
Так Kubernetes создаст новые поды раньше, чем удалит старые.
8️⃣ Используем
--cache-from для кэширования слоёв Docker Если билдите образ в CI/CD, кэшируйте слои:
docker build --cache-from=my-registry/my-app:latest -t my-app .
Это ускорит сборку.
9️⃣ Оптимизируем CI/CD пайплайн
- Используем
kaniko для сборки образов без Docker Daemon - Включаем параллельные шаги
- Отключаем ненужные тесты в pre-prod стадиях
👉 @devops_star