Kubernetes theory
March 15, 2023

Image Pull Policy

Данная политика определяет поведение kubelet при создании/пересоздании пода. Будут выкачиваться каждый раз заново образы для контейнера или нет.

Особенности.

  1. Устанавливается для контейнера;
  2. Если не указывать специально, то в двух случаях из трёх используется политика Always.
    2.1 Если специально не указывали imagePullPolicy и тег установлен в latest;
    2.2 Если специально не указывали imagePullPolicy и тег не указывали вообще;
    2.3 И только в одном случае используется политика IfNotPresent. Когда указывается имидж и тег, отличный от :latest.

Принимаемые значения.

  1. IfNotPresent. Имидж выкачивается только в том случае, если он не представлен в локальном хранилище.
  2. Always. Каждый раз при запуске контейнера kubelet запрашивает у Registry цифровую подпись(digest) имиджа. Если цифровая подпись у имиджа в Registry будет отличаться от той что закеширована локально, то будет скачан новый имидж. Если отличий нет, то будет использоваться образ из локального хранилища.
  3. Never. Kubelet, в этом случае, не делает попыток скачать имидж из репозитория. Если имидж представлен локально, то под стартанёт, если нет, то зафейлится.

Здесь стоит запомнить, что стоит избегать использование тега :latest у имиджа. Нужно указывать конкретную версию приложения. Это позволит избежать проблем связанных с поддержкой новых функций у приложения, которые могут поломать логику всего сервиса.

Чтобы убедиться точно в том, что используется конкретная версия можно использовать цифровую подпись. В этом случае вместо image: app:tag будет image: app:digest.

Полезные ссылки.

https://kubernetes.io/docs/concepts/containers/images/#updating-images

Ошибка с imagePullPolicy: https://teletype.in/@cameda2/RnCXnVzLyTw