#devops #manifest #cloud-foundry
Вопрос:
Я новичок в этой технологии (пока учусь), и у меня есть сомнения в том, как правильно работать с приложениями.
Например, у меня есть шлюз приложений с 2 экземплярами (Traefik), и там я использую переменные env, такие как RESTRICTED_NETWORK_01 и RESTRICTED_NETWORK_02.
Я хочу заменить значение IP-адреса RESTRICTED_NETWORK_02 и применить это изменение без какого-либо влияния на службу пользователей шлюза/перенаправления.
Должен ли я просто использовать команду:
cf set-env app-gateway RESTRICTED_NETWORK_02 [ipvalue]/24
затем
cf restart-app-instance app-gateway 0
wait until the instance restarts and apply
cf restart-app-instance app-gateway 1
Являются ли это правильными шагами, которые я должен предпринять в этой ситуации?
Какая-нибудь помощь?
Ответ №1:
cf перезапуск-приложение-экземпляр приложения-шлюз 0
Это, вероятно, не будет делать то, что вы хотите, по крайней мере, ненадежно. Эта команда работает, завершая экземпляр приложения, который затем позволяет перезапустить его. Обычно это полезно, если у вас есть экземпляр приложения, который находится в плохом состоянии, но не разбился или не прошел проверку работоспособности (или для демонстрационных версий, в которых вам нужно выполнить сбой приложения).
С точки зрения переменных env, это работает не так хорошо. Это связано с тем, что внесенные вами изменения переменной env находятся в облачном контроллере, но ваше приложение работает в планировщике (Diego). Планировщик имеет копию данных с облачного контроллера, которая сообщает ему, как запустить приложение, включая переменные среды, которые следует задать. Команда, на которую вы ссылаетесь, не приводит к тому, что облачный контроллер обновляет определение приложения, отправленное планировщику (Диего). Это просто приводит к тому, что процесс завершается и перезапускается планировщиком, использующим то же определение.
Ваш пробег может варьироваться в зависимости от этого, так как я слышал некоторые сообщения о том, что люди говорят, что cf restart-app-instance
это работает для обновления переменных env (я действительно не понимаю, как это будет, но я также не исследовал их утверждения). Вы могли бы попробовать и посмотреть, но истории, которые я видел, обычно заканчивались проблемами. tl-dr это не работает последовательно.
Для надежного обновления переменных env вам необходимо использовать cf restart
. Это приведет к перезапуску всех экземпляров приложений.
Что вам следует сделать, чтобы перезапустить экземпляры приложений без простоев, так это воспользоваться cf restart --strategy=rolling
опцией (доступной в версии 7 интерфейса командной строки cf). Это приведет к внесению изменений, и пока у вас есть несколько экземпляров приложений, это не должно привести к простою.
Комментарии:
1. Большое спасибо! Много ценной информации о CF, которую я не знал. Мне нужно обновить мою версию cf (v6.42) до v7. Я провел тест с cf v3-zdt-перезапуском, но мое приложение было в вечном развертывании, мне пришлось использовать cf v3-отмена-zdt-push, чтобы остановить его. Самое странное, что я даже «потерял» один экземпляр в процессе. Шлюз приложений был уменьшен до 1/1 по сравнению с предыдущими 2/2 (даже перезапуск не смог вернуть второй экземпляр). Действительно ценю помощь Дэниела!
2. Возможно, вы также захотите поговорить с оператором вашей платформы и посмотреть, какую версию CF они развернули. Практически все последние версии должны иметь хорошую поддержку для развертывания, но если у вас возникли проблемы с этим, и вы используете более старую версию, вашей оперативной группе может потребоваться обновление. Хотя наличие cf7 важно, также важно иметь последнюю версию Cloud Controller и других внутренних сервисов.
3. Я могу понять. Хуже всего то, что они используют одну и ту же версию (v6.42 с 2019 года), к сожалению, действительно устаревшую. Я уточню у основной команды, есть ли у них какой-либо план по обновлению CF, облачного контроллера и внутренних сервисов. Еще раз спасибо, так как я новичок, эта информация действительно важна для меня.