kubectl - получение текущего / «нового» репликаса для развертывания в формате json - PullRequest
0 голосов
/ 21 января 2020

Мы пытаемся создать некоторую простую автоматизацию, чтобы определить, завершилось ли развертывание обновляющегося обновления или нет, а также, если обновление завершилось неудачно. Наивный способ (который мы делаем сегодня) - просто собрать все модули для развертывания и подождать, пока они не будут готовы. Мы смотрим на все модули и, если один из них был перезапущен 3 или более раз (с момента запуска обновления), мы откатываем обновление. Это прекрасно работает большую часть времени. Временами этого не происходит, когда развернутая текущая версия по какой-либо причине находится в состоянии сбоя, поэтому существующие модули непрерывно перезапускаются, вызывая откат с нашего конца.

Таким образом, у меня была идея следить за модулями в новом репликационном наборе, который развертывается после того, как я запускаю обновление. Таким образом, мы не будем обнаруживать сбойные модули в предыдущей версии как сбои обновляемого обновления. Я узнал, как найти модули в репликасе (PS: я использую PowerShell в качестве оболочки, но, надеюсь, перевод на bash или что вы предпочитаете, довольно прост):

kubectl get pod -n <namespace> -l <selector> -o json | ConvertFrom-Json | Where {$_.metadata.ownerReferences.name -eq <replicaset-name>}

И я можно легко определить, какой репликационный набор принадлежит развертыванию, используя тот же метод, просто запросив репликационные наборы и снова применив фильтрацию к их ownerReference.

ОДНАКО развертывание имеет как минимум два набора репликаций во время непрерывного обновления: новое и старое. Я могу видеть их имена, если я использую «kubectl описать развертывание» - но это не очень удобно для автоматизации без некоторой обработки текста. Похоже, что fr agile способ сделать это. Было бы здорово, если бы я мог найти ту же информацию в json, но, похоже, ее не существует.

Итак, мой вопрос: как мне найти связь между развертываниями и текущим / старым репликасом, предпочтительно в формате JSON? Есть ли какой-то другой ресурс, который «соединяет» эти два, или есть некоторая информация о самих репликациях, которую я могу использовать, чтобы отличить guish новый от старого репликаса?

1 Ответ

3 голосов
/ 22 января 2020

При развертывании будет указана текущая "редакция" набора реплик с аннотацией deployment.kubernetes.io/revision.

metadata:
  annotations:
    deployment.kubernetes.io/revision: "4"

Это будет существовать как для развертывания, так и для репликационного набора. Репликация с ревизией N-1 будет "старой".

...