Как посмотреть историю изменений Deployment в Kubernetes?

«Как посмотреть историю изменений Deployment в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Историю изменений (rollout history) для Deployment можно посмотреть с помощью команды kubectl rollout history. Это позволяет отслеживать, какие версии приложения были развернуты и какие изменения вносились.

Основные команды:

# Показать список всех ревизий для Deployment
kubectl rollout history deployment/<deployment-name>

# Показать детали конкретной ревизии (например, 3)
kubectl rollout history deployment/<deployment-name> --revision=3

# Указать namespace, если Deployment находится не в default
kubectl rollout history deployment/<deployment-name> -n <namespace>

# Вывести детали ревизии в формате YAML (полезно для аудита)
kubectl rollout history deployment/<deployment-name> --revision=3 --output=yaml

Пример вывода kubectl rollout history deployment/nginx-app:

REVISION  CHANGE-CAUSE
1         kubectl apply --filename=deployment-v1.yaml
2         kubectl set image deployment/nginx-app nginx=nginx:1.21
3         kubectl apply --filename=deployment-v3.yaml

Практическое применение:

  1. Аудит изменений: Понимание, кто и когда вносил изменения (если заполнено поле CHANGE-CAUSE через аннотацию kubernetes.io/change-cause).
  2. Откат (rollback): Зная номер стабильной ревизии, можно выполнить откат: kubectl rollout undo deployment/<deployment-name> --to-revision=2.
  3. Сравнение конфигураций: Детали ревизии показывают разницу в образах, переменных окружения или ресурсах между версиями.

Важно: Для корректного отображения CHANGE-CAUSE нужно добавлять аннотацию при применении манифеста, например: kubectl apply -f deployment.yaml --record (флаг --record устарел в новых версиях, лучше явно указывать в манифесте).