У меня есть следующий контроллер репликации в 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
обновление обновления выполняется, но повторное извлечение не выполняется. Зачем?
image
pull
kubernetes
Торстен Бронджер
источник
источник
imagePullPolicy
области.latest
, не делайте этого. Последняя будет тянуть, ну, совсем недавно изображение с последней меткой. То, что вы хотите, это диапазон SemVer. ~ 1.2.3 например. это потянет изображения с тегами между> = 1.2.3 и <1.3.0. До тех пор, пока поставщик изображений следует SemVer, о котором вы знаете (и это важная часть), не было внесено каких-либо обратных изменений (специально) и не было добавлено никаких новых функций (возможно, из-за проблем безопасности). Пожалуйста, пожалуйста, никогда не используйтеlatest
в производственных системах.Ответы:
Kubernetes потянет за создание Pod, если либо (см. Документацию update -images ):
:latest
imagePullPolicy: Always
указанЭто здорово, если хочешь всегда тянуть. Но что, если вы хотите сделать это по требованию : например, если вы хотите использовать,
some-public-image:latest
но хотите, чтобы вытащить более новую версию вручную, когда вы просите об этом. В настоящее время вы можете:imagePullPolicy
дляIfNotPresent
илиNever
и предварительно тянуть : вручную изображения натянуть на каждом узле кластера , так что последний кэшируются, то сделатьkubectl rolling-update
или аналогичным перезапустить Бобы (некрасиво легко ломаются хак!)imagePullPolicy
, сделатьkubectl apply
, перезапустить модуль (напримерkubectl rolling-update
), вернутьсяimagePullPolicy
, повторитьkubectl apply
(уродливый!)some-public-image:latest
на ваш личный репозиторий и сделайтеkubectl rolling-update
(тяжелый!)Нет хорошего решения для вытягивания по требованию. Если это изменится, пожалуйста, прокомментируйте; Я обновлю этот ответ.
источник
:latest
- как насчетpatch
ing? всегда ли он тянет самое новое / последнее изображение? Кажется, не работает для меня :(:latest
тег, который указывал на новое изображение, иkubectl rolling-update
работал, чтобы обновить стручки.Нужно группировать
imagePullPolicy
данные контейнера, а не данные спецификации. Тем не менее, я подал вопрос об этом, потому что я нахожу это странным. Кроме того, нет сообщения об ошибке.Итак, этот спецификационный фрагмент работает:
источник
imagePullPolicy
(или пометка:latest
) это хорошо, если вы хотите всегда тянуть, но не решаете вопрос о потягивании деманд.imagePullPolicy: Always
внутри определения контейнера приведет к тому, чтоkubernetes
выборочные изображения будут помечены:latest
всякий раз, когда более новая их версия помещается в реестр?imagePullPolicy: Always
просто говорит Kubernetes всегда извлекать изображение из реестра. Какое изображение будет настроено поimage
атрибуту. Если вы настроите егоimage: your-image:latest
, то он всегда будет тянутьyour-image
изображение сlatest
тегом.Мой хак во время разработки состоит в том, чтобы изменить мой манифест развертывания, чтобы добавить последний тег и всегда тянуть так
Затем я удаляю стручок вручную
Поскольку это развертывание, Kubernetes автоматически воссоздает модуль и извлекает последнюю версию.
источник
Популярный обходной путь , чтобы залатать развертывание с фиктивной аннотацией (или меток):
Предполагая, что ваше развертывание соответствует этим требованиям , это заставит K8 извлекать любой новый образ и повторно развертывать .
источник
ImagePullPolicy
как Always . аннотации, такие какdeployment.kubernetes.io/revision: "v-someversion"
иkubernetes.io/change-cause: the reason
могут быть весьма полезны и направлены на постоянное развертывание.Там будет новая команда, чтобы сделать это напрямую:
Создайте новую
kubectl rollout restart
команду, которая выполняет повторный запуск развертывания.Запрос тянуть GOT слиты. Это будет частью версии
1.15
( changelog )источник
Очевидно, теперь, когда вы запускаете скользящее обновление с
--image
аргументом, совпадающим с существующим образом контейнера, вы также должны указать--image-pull-policy
. Следующая команда должна вызвать вытягивание изображения, когда оно совпадает с изображением контейнера:kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b --image-pull-policy Always
источник
источник
Теперь команда в
kubectl rollout restart deploy YOUR-DEPLOYMENT
сочетании сimagePullPolicy: Always
политикой позволит вам перезапустить все ваши модули с последней версией вашего образа.источник
Команда непрерывного обновления, когда ей передается аргумент изображения, предполагает, что изображение отличается от того, которое в настоящее время существует в контроллере репликации.
источник
--image
флаг.Вы можете определить
imagePullPolicy: Always
в своем файле развертывания.источник
Политика извлечения изображения всегда помогает вытягивать изображение каждый раз, когда создается новый модуль (это может быть в любом случае, например, масштабирование реплик, или модуль умирает, и создается новый модуль)
Но если вы хотите обновить образ текущего запущенного модуля, лучше всего использовать развертывание. Это оставляет вам безупречное обновление без каких-либо проблем (в основном, когда у вас есть постоянный том, подключенный к модулю) :)
источник