Подтвердить что ты не робот

Как заставить Kubernetes повторно вытащить изображение?

У меня есть следующий контроллер репликации в Kubernetes на GKE:

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 2
  selector:
    app: myapp
    deployment: initial
  template:
    metadata:
      labels:
        app: myapp
        deployment: initial
    spec:
      containers:
      - name: myapp
        image: myregistry.com/myapp:5c3dda6b
        ports:
        - containerPort: 80
      imagePullPolicy: Always
      imagePullSecrets:
        - name: myregistry.com-registry-key

Теперь, если я скажу

kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b

обновление обновления выполняется, но повторное извлечение не выполняется. Зачем?

4b9b3361

Ответ 1

Нужно группировать imagePullPolicy внутри данных контейнера, а не внутри данных спецификации. Тем не менее, я подал issue об этом, потому что считаю это странным. Кроме того, сообщение об ошибке отсутствует.

Итак, этот spec-фрагмент работает:

spec:
  containers:
  - name: myapp
    image: myregistry.com/myapp:5c3dda6b
    ports:
    - containerPort: 80
    imagePullPolicy: Always
  imagePullSecrets:
    - name: myregistry.com-registry-key

Ответ 2

Кубернеты будут тянуть за создание Pod, если либо (см. обновление-images doc):

  • Использование изображений с тегами :latest
  • imagePullPolicy: Always указан

Это здорово, если вы хотите всегда тянуть. Но что, если вы хотите сделать это по требованию: например, если вы хотите использовать some-public-image:latest, но только хотите вывести новую версию вручную, когда вы ее попросите. Вы можете:

  • Установите imagePullPolicy в IfNotPresent или Never и pre-pull: потяните вручную изображения в каждом кластере node, чтобы последние были кешированы, затем сделайте a kubectl rolling-update или аналогично перезапуску Pods (уродливый легко сломанный хак!)
  • Временно измените imagePullPolicy, выполните kubectl apply, перезагрузите модуль (например, kubectl rolling-update), верните imagePullPolicy, повторите kubectl apply (уродливый!)
  • Потяните и нажмите some-public-image:latest в свой частный репозиторий и сделайте kubectl rolling-update (тяжелый!)

Нет хорошего решения для потяжной нагрузки. Если это изменится, прокомментируйте; Я обновлю этот anwser.

Ответ 3

Мой взлом во время разработки - это изменить мой манифест развертывания, чтобы добавить последний тег и всегда тянуть так

image: etoews/my-image:latest
imagePullPolicy: Always

Затем я удаляю pod вручную

kubectl delete pod my-app-3498980157-2zxhd

Поскольку это развертывание, Kubernetes автоматически воссоздает модуль и вытаскивает последнее изображение.

Ответ 4

Популярный обходной путь - исправление развертывания с помощью фиктивной аннотации (или метки):

kubectl patch deployment <name> -p \
  "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"'date +'%s''\"}}}}}"

Если ваше развертывание соответствует этим требованиям, это приведет к тому, что K8s получит новый образ и развернет его.

Ответ 5

По-видимому, теперь, когда вы запускаете обновление для обновления с аргументом --image так же, как и существующее изображение контейнера, вы также должны указать --image-pull-policy. Следующая команда должна принудительно тянуть изображение, если оно совпадает с изображением контейнера:

kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b --image-pull-policy Always

Ответ 7

Для этого будет новая команда:

Создайте новую kubectl rollout restart которая выполняет повторный перезапуск развертывания.

Запрос на удаление был объединен. Это будет частью версии 1.15 (список изменений)

Ответ 8

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

https://kubernetes.io/docs/concepts/containers/images/

Ответ 9

Вы можете определить imagePullPolicy: Always в своем файле развертывания.

Ответ 10

Теперь команда kubectl rollout restart deploy YOUR-DEPLOYMENT в сочетании с политикой imagePullPolicy: Always позволит вам перезапустить все ваши модули с последней версией вашего образа.