Как получить откат, чтобы использовать более старый образ вместо того, чтобы оставаться на новейшем (созданном извне)?

Мы переносим наш процесс сборки за пределы кластера OpenShift 3.11 и заметили, что при откате к более раннему развертыванию используется не старый образ докера, а самый новый, известный OpenShift.

Я видел, что для изображений, созданных исходной сборкой OpenShift, это сработало, но для наших созданных извне образов, которые помещаются во внешний реестр докеров openshift, а затем oc new-app registry/foo/bar:master (который создает для этого поток изображений), это не работает.

Можно ли вообще этого добиться?

Нужны ли мне дополнительные метаданные в моем образе докера?

Нужно ли мне рассказывать OpenShift больше о моем изображении?


Примечание. Открыт https://github.com/openshift/origin/issues/23754 в Origin - проект с открытым исходным кодом ниже Redhat - об этом


person Thorbjørn Ravn Andersen    schedule 06.09.2019    source источник
comment
Вам следует избегать использования master в качестве версии тега изображения, начните использовать уникальные номера версий для каждой сборки изображения, если вы хотите иметь возможность вернуться к старым версиям.   -  person Graham Dumpleton    schedule 07.09.2019
comment
@GrahamDumpleton, мне нужно подписаться на тег. Вы говорите, что мне нужно больше, чем этот ярлык?   -  person Thorbjørn Ravn Andersen    schedule 07.09.2019


Ответы (2)


Используйте неизменяемые теги.

Поскольку вы обращаетесь к своим изображениям с помощью тега master, я предполагаю, что в настоящее время вы используете изменяемые теги, которые обновляются при каждой сборке изображения. При этом вы можете просто «откатиться», отменив фиксацию и заново построив старый образ, но при этом вы все равно получите обновленное базовое изображение и другие метаданные.

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

(1) Обращайтесь к своему изображению через дайджест изображения. В этом случае вам понадобится реестр, в котором будут храниться ваши изображения, даже если они не помечены тегами. Например, Quay.io не хранит немаркированные изображения, и вы можете загрузить только последнюю версию. Чтобы этого избежать, просто добавьте фиктивный тег, например дайджест изображений.

(2) Выпустите свои изображения с семантическим управлением версиями, например используя сообщения фиксации Angular и добавляя semantic-release в конвейер сборки. Убедитесь, что базовое изображение, которое вы используете, тоже неизменяемо. Чтобы развернуть образы в нашем кластере, используйте GitOps с помощью такого инструмента, как Flux CD. Теперь вы можете легко выполнить откат, отменив фиксацию в репозитории GitOps.

(3) Подумайте, нужен ли вам откат вообще. В качестве альтернативы вы можете использовать канареечные развертывания с Istio, который поставляется с OpenShift 4. Вместо отката вы просто развертываете две версии своего приложения одновременно, а затем используете Istio для маршрутизации трафика к той или другой, пока вы не будете счастливый.

person Hendrik M Halkow    schedule 14.09.2019
comment
Мы используем внешний реестр докеров OpenShift. Вместо этого мы также можем использовать экземпляр Habor. OpenShift 4 не вариант. Если я вас правильно понимаю, вы, по сути, говорите, что мне нужно вручную (или с помощью инструмента, отличного от OpenShift) отслеживать изображения для развертывания и, следовательно, вручную развертывать их, чтобы дескриптор развертывания содержал уникальный тег, предоставленный мной, который требует отката. найти старое изображение? Есть ли способ, которым OpenShift может сделать это при наличии достаточного количества подсказок за один раз? - person Thorbjørn Ravn Andersen; 16.09.2019
comment
sufficient hints могут быть только тегами, упомянутыми в [docs.openshift .com / контейнер-платформа / 3.11 / архитектура /. Они включают дайджест изображений, который я упоминал в (1). Они были созданы? А oc rollback работает? - person Hendrik M Halkow; 16.09.2019
comment
Теги дайджеста изображения не создавались явным образом. К сожалению, у меня нет времени на дальнейшее расследование, пока не закончится награда, так что я добросовестно вручил ее вам и вернусь к ней позже. Спасибо. - person Thorbjørn Ravn Andersen; 17.09.2019

Для отката к определенной версии вам просто нужно указать версию, новейшая будет автоматически откатана, если вы не укажете версию развертывания.

документы

Триггеры изменения образа в конфигурации развертывания отключены как часть отката, чтобы предотвратить нежелательные развертывания вскоре после завершения отката. Чтобы повторно включить триггеры смены изображения:

$ oc deploy <deployment_config> --enable-triggers 

Чтобы вернуться к конкретной версии:

$ oc rollback <deployment_config> --to-version=1

person ProllyGeek    schedule 09.09.2019
comment
Я смотрю на кнопку отката в графическом интерфейсе, которая для образов, созданных с помощью Build Config, может откатиться к этому конкретному образу, но, похоже, для изображений, импортированных из внешнего реестра, не делать этого, а использовать новейший образ докера, который для меня ошибка. Мы говорим об одном и том же? - person Thorbjørn Ravn Andersen; 09.09.2019
comment
Я думаю, что мы говорим об одном и том же, за исключением того, что я вызываю команду непосредственно из интерфейса командной строки, есть ли у вас какие-либо следы того, что происходит, когда вы нажимаете кнопку графического интерфейса? - person ProllyGeek; 09.09.2019
comment
Из того, что я прочитал, вы говорите о версии дескриптора развертывания, которая работает! Проблема в том, что при развертывании тогда в потоке изображений использовалось более старое изображение, чем то, которое использовалось при откате к старому дескриптору развертывания. Как развертывание 2, но с использованием образа 5 вместо образа 2. - person Thorbjørn Ravn Andersen; 09.09.2019
comment
@ ThorbjørnRavnAndersen а, ладно, вытащили неправильное изображение. что-то вроде этого вопроса? github.com/openshift/origin/issues/13302 - person ProllyGeek; 09.09.2019
comment
Не похоже. Однако я открою вопрос, просто чтобы проверить, ли это ошибка. - person Thorbjørn Ravn Andersen; 09.09.2019
comment
Что ж, меня интересует этот вопрос, поэтому, если у вас будет время, мы можем вместе шаг за шагом рассмотреть, как работает ваш процесс. - person ProllyGeek; 09.09.2019
comment
Я открыл эту проблему: github.com/openshift/origin/issues/23754 Никакой реакции так далеко. - person Thorbjørn Ravn Andersen; 16.09.2019