Каков рекомендуемый способ получить модули развертывания Kubernetes?

Особенно учитывая все асинхронные процедуры, связанные с созданием и обновлением развертывания, мне трудно надежно найти текущие модули, связанные с текущей версией данного развертывания.

В настоящее время занимаюсь:

  1. Добавьте уникальные метки в шаблон развертывания.
  2. Получите номер редакции развертывания.
  3. Получите все наборы реплик с этикетками.
  4. Отфильтруйте их дальше, чтобы найти тот, у которого правильный номер версии.
  5. Извлеките хэш шаблона модуля из набора реплик.
  6. Получите все модули с метками и хешем шаблона модуля.

Это неудобно и сложно. Кроме того, я не уверен, что (4) и (6) гарантированно приведут только к желаемым объектам. Но я не могу фильтровать по ссылке ownerReferences, не так ли?

Есть ли более надежный и простой способ?


person Torsten Bronger    schedule 20.05.2018    source источник
comment
Почему кто-то считает этот пост не по теме?   -  person Torsten Bronger    schedule 20.05.2018
comment
Я не уверен, что понимаю ваш вопрос. Вы ищете обновленные модули (на основе последней версии вашего развертывания) или все связанные с ним модули? Если вам нужны все модули, почему бы не связать уникальную метку с шаблоном развертывания и просто отфильтровать для этого модули?   -  person embik    schedule 20.05.2018
comment
Мне нужны только модули, связанные с текущей версией развертывания. Я соответственно прояснил вопрос.   -  person Torsten Bronger    schedule 20.05.2018


Ответы (1)


Когда вы создаете Deployment, он создает ReplicaSet, который создает Pods.

ReplicaSet содержит путь «ownerReferences», который включает имя и UID родительского развертывания.

Поды содержат тот же путь, что и ссылка на родительский ReplicaSet.

Вот пример информации ReplicaSet:

# kubectl get rs nginx-deployment-569477d6d8 -o yaml
apiVersion: extensions/v1beta1
kind: ReplicaSet
...
name: nginx-deployment-569477d6d8
namespace: default
ownerReferences:
- apiVersion: extensions/v1beta1
  blockOwnerDeletion: true
  controller: true
  kind: Deployment
  name: nginx-deployment
  uid: acf5fe8a-5d0e-11e8-b14f-42010a8000fc

...

person Anton Kostenko    schedule 21.05.2018
comment
Это только часть решения. Вы также должны принять во внимание revision. - person Torsten Bronger; 21.05.2018
comment
Да, вам понадобится revision, чтобы получить право ReplicaSet. - person Anton Kostenko; 21.05.2018
comment
Ревизию развертывания можно получить с kubectl get <deployment> -o jsonpath="{.metadata.annotations.deployment\.kubernetes\.io/revision}") - person Ferdy Pruis; 10.06.2021