В последнее время я изучаю Кубернете, и я не очень понимаю разницу между "kubectl apply" и "kubectl replace". Есть ли ситуация, когда мы можем использовать только один из них?
В чем разница между применением kubectl и заменой kubectl
Ответ 1
Разница в том, что replace
сначала удаляет ресурсы, а затем создает их из файла, который вы им предоставили; тогда как apply
пытается напрямую обновить в текущем активном ресурсе только те атрибуты, которые вы ему задаете в файле. См. обновления на месте и деструктивные обновления.
Следствием этого является то, что файл, который вы используете в apply
, может быть неполной спецификацией, то есть только тем, что вы хотите изменить; тогда как с replace
спецификация должна быть завершена.
Таким образом, вы можете apply
файл, который изменяет только аннотацию, без указания каких-либо других свойств ресурса; но если вы попытаетесь использовать тот же файл с командой replace
, команда завершится неудачей из-за отсутствия информации.
Кроме того, apply
работает только с некоторыми свойствами ресурсов; если вам нужно обновить свойства, для которых apply
не применяется (извините за каламбур!), вы должны использовать вместо него replace
.
Ответ 2
Disruptive updates
В некоторых случаях вам может потребоваться обновить поля ресурса, которые нельзя обновляется после инициализации, или вы можете просто сделать рекурсивный изменить немедленно, например, чтобы исправить сломанные стручки, созданные Развертывание. Чтобы изменить такие поля, используйте
replace --force
, который удаляет и воссоздает ресурс.
Ответ 3
Разница между apply
и replace
аналогична разнице между apply
и create
.
create
/replace
использует императивный подход, в то время как apply
использует декларативный подход.
Если вы использовали create
для создания ресурса, то используйте replace
для его обновления. Если вы использовали apply
для создания ресурса, используйте apply
для его обновления.
Обратите внимание, что для replace
и apply
требуется полная спецификация, и оба сначала создают новые ресурсы перед удалением старых (если не указано --force
).
Ответ 4
вы можете добавить опцию -v = 8 при использовании kubectl, и вы найдете журнал, подобный этому
apply --force
patch 422
delete 200
get 200
get 200
get 404
post 201
replace --force
get 200
delete 200
get 404
post 201