Короткий ответ
imagePullPolicy управляет тем, когда kubelet скачивает образ контейнера: Always — каждый раз перед запуском проверяет реестр и скачивает образ заново; IfNotPresent — использует локально закэшированный образ, если он уже есть на узле; Never — запрещает скачивание, используя только локальный образ.
Как это работает подробнее
по умолчанию Kubernetes выбирает Always, если тег образа — latest или не указан, и IfNotPresent для любого другого явного тега. Это поведение по умолчанию можно переопределить явно в манифесте.
Пример кода
manifest.yaml
containers:
- name: app
image: registry.example.com/app:2.3.1
imagePullPolicy: IfNotPresentЧто использовать на практике
- Практика.
IfNotPresentускоряет запуск и снижает нагрузку на реестр образов, но требует, чтобы тег образа был уникальным и неизменяемым (immutable) — то есть при каждом новом релизе должен использоваться новый тег, а не повторное использование старого с другим содержимым.Neverприменяют в основном в локальной разработке (minikube/kind), где образ собран прямо на узле.
Подводные камни
- Риски. использовать тег
latestв продакшене — это заставляет Kubernetes каждый раз скачивать образ (Always) и, что хуже, делает невозможным точно знать, какая именно версия кода запущена на конкретном поде; переиспользовать один и тот же тег для разных версий образа приIfNotPresent— узел может не скачать обновлённую версию, если локально уже есть образ с этим тегом.