Согласно документации Kubernetes в разделе о применении на стороне сервера вы можете найти следующее:
Изменения в полях объекта отслеживаются с помощью « управления полями «механизм. Когда значение поля изменяется, право собственности переходит от его текущего менеджера к менеджеру, который вносит изменения. При попытке применить объект поля с другим значением и принадлежащие другому менеджеру приведут к конфликту . Это сделано для того, чтобы сигнализировать, что операция может отменить изменения другого соавтора. Конфликты могут быть принудительными, в этом случае значение будет переопределено, и право собственности будет передано.
И некоторая информация о стратегии слияния.
Стратегия слияния
Стратегия слияния, реализованная с помощью Server Side Apply, обеспечивает в целом более стабильный жизненный цикл объекта. Прикладная программа на стороне сервера пытается объединить поля, основываясь на том, кто ими управляет, вместо того, чтобы игнорировать только на основе значений. Таким образом, он призван упростить и сделать более стабильным для нескольких действующих лиц обновление одного и того же объекта путем создания менее неожиданных помех.
Когда пользователь отправляет объект «полностью определенное намерение» конечной точке Apply на стороне сервера,сервер объединяет его с живым объектом, предпочитая значение в применяемом конфиге, если оно указано в обоих местах. Если набор элементов, присутствующих в примененной конфигурации, не является надмножеством элементов, примененных одним и тем же пользователем в прошлый раз, каждый отсутствующий элемент, не управляемый другими поставщиками, удаляется. Для получения дополнительной информации о том, как схема объекта используется для принятия решений при объединении, см. sigs.k8s.io / structd-merge-diff .
Надеюсь, это поможет.
Редактировать: Да, применить и обновить использовать эти функции.
Применить и обновить
Для этой функции рассматриваются два типа операций: Apply
(PATCH
с типом содержимого application/apply-patch+yaml
) и Update
(все другие операции, которые изменяют объект). Обе операции обновляют managedFields
, но ведут себя немного по-разному.
Например, при конфликтах происходит сбой только операции применения, а обновление - нет. Кроме того, для применения идентификаторов требуются операции применения, предоставляя параметр запроса fieldManager
, в то время как параметр запроса является необязательным для операций обновления. Наконец, при использовании операции apply у вас не может быть managedFields
в объекте, который применяется.