Поиск по сайту:

Понимание политик извлечения образов Kubernetes


Политики извлечения образов Kubernetes определяют, когда Kubelet должен получать обновленную версию образа. Политики извлечения используются при запуске нового модуля. Kubelet предпримет соответствующие действия, указанные в политике Pod.

Поведение по умолчанию

Вам не нужно указывать политику извлечения изображений. Если у пода нет политики, Kubernetes сделает вывод о ваших намерениях по тегу изображения. Если вы указали определенный тег (например, my-image:my-release), изображение будет загружено только в том случае, если этот тег еще не существует на узле Kubelet. Эта политика называется IfNotPresent.

Если тег не указан или вы используете тег latest, изображение будет всегда извлекаться. Kubernetes будет получать манифест образа каждый раз, когда запускается новый под. Если в манифесте указано изменение, обновленный образ будет извлечен до создания контейнеров.

Kubernetes никогда не изменит imagePullPolicy в результате другого действия. Редактирование image Pod не приведет к тому, что Kubernetes переоценит политику извлечения по умолчанию. Это означает, что если вы начнете с my-image:latest, а затем обновите Pod до my-image:my-release, политика получения изображений по-прежнему будет Еслинет в наличии. Вы должны вручную указать новую политику, если она требуется.

Заставить Kubelet всегда тянуть

Вам нужно будет применить политику получения изображений, чтобы заставить Kubelet всегда пытаться извлекать. Установите imagePullPolicy: Always для модуля, чтобы включить это поведение.

spec:
  containers:
      - name: my-container
        image: my-image:my-release
        imagePullPolicy: Always

Новые версии изображений будут загружаться всякий раз, когда запускается модуль и изменяется дайджест манифеста изображения. Локально кэшированная версия изображения по-прежнему будет использоваться повторно, если дайджест не изменился. Это позволяет избежать ненужных загрузок по сети. Дайджесты Docker — это неизменяемые ссылки, которые однозначно идентифицируют изображения без имени или тега.

Принудительное получение полезно, когда вы хотите распространять новые версии своего изображения с использованием того же тега. Это может иметь место, когда вы помечаете изображения, используя имя ветки, из которой они были созданы. Без политики Всегда Kubernetes никогда не извлечет ваши новые выпуски образов, если тег уже доступен локально.

Запрет автоматического извлечения

Все политики, разрешающие извлечение изображений, будут извлекать новые версии ваших локально кэшированных тегов. Используйте дайджест изображения в качестве поля image вашего модуля, если вы хотите, чтобы контейнер придерживался точной версии изображения при каждом запуске.

Существуют сценарии, в которых вы можете вообще не захотеть, чтобы Kubernetes извлекал изображения. Установка политики Никогда предотвратит автоматическое получение Kubelet. Эта политика вообще не будет проверять наличие обновлений — версия манифеста реестра не будет извлечена.

Если вы используете Никогда, вам понадобится альтернативный способ доставки изображений на узлы. Каждое изображение должно существовать локально, прежде чем вы попытаетесь запустить свои модули. В противном случае Kubernetes не сможет запускать контейнеры Pod.

Это действует как механизм защиты, когда вы используете автономный механизм извлечения изображений. Вы не захотите, чтобы Kubernetes непреднамеренно пытался выполнить автоматическую выборку в случае сбоя извлечения. Это может привести к потере изображений, которые уже кэшированы локально.

Политики извлечения и кэширование

Выбранная вами политика извлечения не должна существенно влиять на производительность. Пока ваш поставщик изображений поддерживает кэширование слоев, Kubelet нужно будет только извлекать действительно новые слои в каждом изображении.

Политика Всегда добавляет сетевой вызов каждый раз, когда вы запускаете новый модуль. Нужно только проверить дайджест изображения, так что это должно быть практически мгновенно. Если дайджест не соответствует версии из локального кэша, новые слои изображения будут извлечены из реестра. Наиболее значительные потери производительности связаны с фактической передачей этих слоев по сети с последующей их распаковкой.

Краткое содержание

Kubernetes поддерживает несколько моделей поведения для получения изображений. Изображения обрабатываются Kubelet и будут загружаться при каждом запуске модуля. Политика по умолчанию извлечет изображение, если тег еще не существует локально. Если изображение не имеет тега или имеет тег latest, вместо него будет использоваться политика Всегда.

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

Помните, что политики получения изображений по умолчанию всегда устанавливаются для каждого модуля. Если вы хотите использовать одну политику для всего кластера, вам потребуется использовать инструмент проверки конфигурации для сканирования манифестов подов. kube-score — это инструмент статического анализа манифестов объектов Kubernetes, который включает проверку imagePullPolicy в своем наборе правил по умолчанию. Запустите kube-score score my-manifest.yaml как часть конвейера непрерывной интеграции, чтобы предотвратить использование манифестов, для которых не определена политика.




Все права защищены. © Linux-Console.net • 2019-2024