Когда именно я устанавливаю поле контроллера ownerReference в true? - PullRequest
0 голосов
/ 27 июня 2018

Я пишу контроллер Kubernetes.

Кто-то создает пользовательский ресурс через kubectl apply -f custom-resource.yaml. Мой контроллер замечает создание, а затем создает Deployment, который каким-то образом относится к пользовательскому ресурсу.

Я ищу правильный способ настройки поля Deployment *1007*, чтобы удаление пользовательского ресурса привело к удалению Deployment. Я понимаю, что могу сделать это так:

ownerReferences:
- kind: <kind from custom resource>
  apiVersion: <apiVersion from custom resource>
  uid: <uid from custom resource>
  controller: <???>

Мне неясно, является ли это случаем, когда я бы установил controller на true.

Справочная документация Kubernetes гласит (полностью):

Если true, эта ссылка указывает на управляющий контроллер.

Учитывая, что контроллер выполняет код, а ссылка на владельца фактически ссылается на другой ресурс Kubernetes через соответствующие поля uid, name, kind и apiVersion, это утверждение бессмысленно: ссылка на объект Kubernetes может ' код "указать на".

У меня есть ощущение, что автор документации пытается указать, что & mdash; используя мой пример & mdash; поскольку пользователь сам не создал Deployment, он должен быть помечен каким-то флагом, указывающим, что контроллер создал его вместо этого.

Это правильно?

Здесь, конечно, следуют следующие вопросы: ОК, какое поведение изменится, если controller установлено здесь false, но другие поля ownerReference установлены так же, как указано выше?

1 Ответ

0 голосов
/ 04 июля 2018

Согласно документации:

Иногда Kubernetes автоматически устанавливает значение ownerReference. Например, когда вы создаете ReplicaSet, Kubernetes автоматически устанавливает поле ownerReference каждого Pod в ReplicaSet. В версии 1.6 Kubernetes автоматически устанавливает значение ownerReference для объектов, созданных или принятых ReplicationController, ReplicaSet, StatefulSet, DaemonSet и Deployment.

Вы также можете указать отношения между владельцами и иждивенцами, вручную установив поле ownerReference.

По сути, развертывание находится на вершине иерархии владения, и ownerReference не устанавливается на него автоматически. Поэтому вы можете вручную добавить ownerReference в ваше развертывание, чтобы создать ссылку на ваш ресурс Foo.

Вы спросили:

Конечно, здесь следуют следующие вопросы: ОК, какое поведение изменится, если controller установлено здесь false, но другие поля ownerReference установлены так же, как указано выше?

OwnerReference используется сборщиком мусора. Роль сборщика мусора в Kubernetes заключается в удалении определенных объектов, которые когда-то имели владельца, но у него его больше нет.

Вот ссылка на описание структуры OwnerReference на Github. Как вы упомянули, если controller: true, ссылка указывает на управляющий контроллер, другими словами, на владельца. А также, это инструкция для поведения сборщика мусора, связанного с объектом и его владельцем. Если controller: false, сборщик мусора управляет объектом как объектом без владельца, например, позволяет свободно его удалять.

Для получения дополнительной информации, вы можете посетить следующие ссылки:
- Сборка мусора
- Удаление и сборка мусора объектов Kubernetes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...