
У нас есть система, которая в настоящее время использует docker-compose
для развертывания контейнеров (фактически docker-compose pull && docker-compose up
), и мы находимся в процессе преобразования системы в Kubernetes.
У нас есть CI/CD, который автоматически развертывается в production на основе тегов git, отправленных в репозиторий git. Для staging мы продолжаем продвигать ветку. Образы docker создаются и помечаются либо тегом git production, либо именем ветки git staging.
При развертывании docker-compose
достаточно умен, чтобы не перезапускать контейнер, если образ фактически тот же самый, т. е. два производственных тега указывают на один и тот же образ.
Я ищу способ сделать то же самое в Kubernetes — если при развертывании фактический образ, используемый для контейнера pod, совпадает с тем, что уже запущен (на основе контрольной суммы образа, а не только тега образа), то не нужно перезапускать pod. Это возможно?
Спасибо
решение1
Как я уже упоминал в комментариях, все должно работать «из коробки» с imagePullPolicy:Always
.
В соответствии сдокументация
Изображения контейнеров
imagePullPolicy и тег изображения влияют на то, когда kubelet пытается извлечь указанное изображение.
imagePullPolicy:Всегда: каждый раз, когда kubelet запускает контейнер, kubelet запрашивает реестр образов контейнеров, чтобы разрешить имя в дайджест образа. Если у kubelet есть образ контейнера с этим точным дайджестом, кэшированный локально, kubelet использует его кэшированный образ; в противном случае kubelet загружает (извлекает) образ с разрешенным дайджестом и использует этот образ для запуска контейнера.
Примечание: Чтобы убедиться, что контейнер всегда использует одну и ту же версию образа, вы можете указать его дайджест; замените : на @ (например, image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2). Дайджест однозначно идентифицирует определенную версию образа, поэтому он никогда не обновляется Kubernetes, если вы не измените значение дайджеста.
Также есть инструмент под названиемимаго, стоит взглянуть на него. Imago проверяет запущенные поды sha256 и просто перезапускает ресурс, которому нужно использовать более новые образы.