Какой разумный рабочий процесс для управления этим? Я что-то упустил полностью?
Некоторые ответы зависят от того, какой риск вы пытаетесь снизить с помощью любого имеющегося процесса. Если это «кластер был уничтожен ураганом, и мне нужно восстановить мои дескрипторы», тогда Heptio Ark является хорошим решением для этого. Если риски более «ориентированы на человека», то ИМХО вам придется пройти очень осторожную грань между блокировкой всех вещей и нанесением вреда очень гибким, расширяющим возможности инструментам, которые kubernetes предоставляет команде. Конкретный пример того, как эта модель работает против вашей модели: что происходит, когда разработчик редактирует развертывание, но не (помнит | знает) обновить дескриптор в репозитории? Так вы отменяете права на редактирование? Использовать некоторую логику сравнения, чтобы обнаружить измененную конфигурацию в кластере?
Говорить с тем, что вы сказали в частности : крайне неоптимальной идеей является изменение дескриптора только для изменения размера (Deployment|ReplicationController|StatefulSet)
. Отдельно, хорошо построенный конвейер CI также должен понимать, что если артефакт buildable не изменен и не выйдет из строя (либо на ранней стадии, либо даже не на запуск сборки, если инструмент CI настолько умен).
Наконец, если вы хотите продолжить работу с текущей ситуацией, то я рекомендую использовать текстовую замену непосредственно перед применением дескриптора:
$ grep "image: " the-deployment.yml
image: example.com/something:#CI_PIPELINE_IID#
$ sed -i'' -e "s/#CI_PIPELINE_IID#/${CI_PIPELINE_IID}/" the-deployment.yml
$ kubectl apply -f the-deployment.yml
так что копия в хранилище остается текстово нетронутой, а также непреднамеренно фактически применена , поскольку в действительности это не приведет к выполнению развертываемого развертывания.