pod прекращает работу из-за ссылки ownerReferences, указывающей на ресурс в другом пространстве имен в кубернетах

Начиная с kubernetes 1.20 произошли изменения в отношении ссылок на владельца и того, как k8 выполняет сборку мусора. Обычно, если ресурс в пространстве имен запускает модуль / задание в y пространство имен с дочерним, имеющим ссылку на родительский ресурс в x, k8 завершает дочерний модуль / задание.

Ссылка: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md

      Resolves non-deterministic behavior of the garbage collection controller when ownerReferences with incorrect data are encountered. Events with a reason of OwnerRefInvalidNamespace are recorded when namespace mismatches between child and owner objects are detected. The kubectl-check-ownerreferences tool can be run prior to upgrading to locate existing objects with invalid ownerReferences.

A namespaced object with an ownerReference referencing a uid of a namespaced kind which does not exist in the same namespace is now consistently treated as though that owner does not exist, and the child object is deleted.
A cluster-scoped object with an ownerReference referencing a uid of a namespaced kind is now consistently treated as though that owner is not resolvable, and the child object is ignored by the garbage collector. (#92743, @liggitt) [SIG API Machinery, Apps and Testing]

Если мы удалим ownerReferences, ресурс не будет сборщиком мусора. Есть ли способ справиться с этой ситуацией, т.е. как заставить ownerReferences работать в нескольких пространствах имен ИЛИ позволить заданию / модулю очистить себя после завершения? Спасибо.

1 ответ

Согласно Fix GC uid race и обработке конфликтующего владельца. Ссылка # 92743.

пространства имен предназначены быть независимыми друг от друга, поэтому ссылки между пространствами имен не разрешены в таких вещах, как ownerReferences, ссылки на тома secret / configmap и т. д.

кроме того, предоставление разрешений пространству имен a обычно не предназначено для обеспечения видимости или возможности взаимодействовать с объектами из пространства имен b (или заставлять системные контроллеры взаимодействовать с объектами из пространства имен b).

и обновление примечания к пространству имен GC #25091

Ссылки на владельцев между пространствами имен запрещены по дизайну.

Итак, используя ownerReferencesдля сборки мусора в пространствах имен невозможно по дизайну .


Однако вы можете эмулировать сборщик мусора с несколькими пространствами имен с помощью меток. Вам просто нужно настроить эти метки, когда какой-либо объект создает подобъект.

В качестве альтернативы вы можете удалить пространство имен для сборки всех объектов в этом пространстве имен, но это, вероятно, неоптимальное решение.

Другие вопросы по тегам