Как установить лимит попыток получения изображения Kubernetes - PullRequest
0 голосов
/ 30 октября 2018

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 Ответ

0 голосов
/ 31 октября 2018

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?

...