Как установить лимит попыток получения изображения Kubernetes

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

Статус от kubectl get pods шоу ImagePullBackOff,

Что нужно установить в файле yaml конфигурации kube, чтобы эти модули не работали в течение нескольких дней? В идеале, мы просто хотим, чтобы изображение было извлечено пару раз, а затем потерпело неудачу в случае неудачи.

Определение стручка

apiVersion: v1
kind: Pod
metadata:
  name: test-missing-image

spec:
  containers:

  - image: missingimage

    name: test
    resources:
      limits:
        memory: "10000Mi"
    readinessProbe:
      httpGet:
        port: 5678
        path: /somePath
      initialDelaySeconds: 360
      periodSeconds: 30
      timeoutSeconds: 30

  restartPolicy: Never
  terminationGracePeriodSeconds: 0

Спасибо!

1 ответ

AKAIK, единственный способ управлять этим на момент написания этой статьи - с помощью imagePullPolicy в спецификации контейнера.

Вы можете установить его на Never но ваш модуль не будет работать, так как изображение отсутствует локально. Или вы можете установить его IfNotPresent но каким-то образом вам придется создать изображение с этим конкретным тегом локально в ваших узлах K8s. Любой из этих вариантов не идеален, но я считаю, что есть смысл обосновать его ImagePullBackOff: люди хотели бы знать, почему их стручок не работает.

Итак, IMO, более важный вопрос: почему вы хотите удалить / сделать недействительными изображения в реестре докеров, которые все еще работают в вашем кластере? Почему бы не обновить pods/deployments/daemonsets/replicasets/statefulsets с последними образами до удаления или аннулирования образа в реестре докеров (также называемого развертыванием)?

Общая практика может быть что-то вроде этого:

create new image => deploy it => make sure everything is ok => 
{
  ok => invalidate the old image tag.
  not ok => rollback => delete new image tag => go back to create new image => create new image tag.
}

Обратите внимание, что слои и изображения не удаляются в реестре Docker. Вы можете удалить или перезаписать теги: Как удалить изображения из личного реестра Docker?

Другие вопросы по тегам