В чем разница между применением kubectl и заменой kubectl

В последнее время я изучаю Кубернете, и я не очень понимаю разницу между "kubectl apply" и "kubectl replace". Есть ли ситуация, когда мы можем использовать только один из них?

Ответ 1

Разница в том, что replace сначала удаляет ресурсы, а затем создает их из файла, который вы им предоставили; тогда как apply пытается напрямую обновить в текущем активном ресурсе только те атрибуты, которые вы ему задаете в файле. См. обновления на месте и деструктивные обновления.

Следствием этого является то, что файл, который вы используете в apply, может быть неполной спецификацией, то есть только тем, что вы хотите изменить; тогда как с replace спецификация должна быть завершена.

Таким образом, вы можете apply файл, который изменяет только аннотацию, без указания каких-либо других свойств ресурса; но если вы попытаетесь использовать тот же файл с командой replace, команда завершится неудачей из-за отсутствия информации.

Кроме того, apply работает только с некоторыми свойствами ресурсов; если вам нужно обновить свойства, для которых apply не применяется (извините за каламбур!), вы должны использовать вместо него replace.

Ответ 2

От: https://github.com/kubernetes/website/blob/master/content/en/docs/concepts/cluster-administration/manage-deployment.md

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