Обновление оператора Kubernetes Go
У меня есть собственный оператор Kubernetes Go, и я хочу иметь возможность обновлять работающий экземпляр / под без простоев. т.е. я хочу создать новый модуль и запустить его до того, как удалю старый.
Как лучше всего это сделать?
На данный момент делаю это:
// 1. Create the new pod
err := r.client.Create(context.TODO(), pod)
// 2. Delete the old pod
err := r.client.Create(context.TODO(), &oldpod)
// 3. Loop until the new pod is no longer in the pending phase
Это работает, но, конечно, старый модуль удаляется до того, как будет готов новый.
В идеале я хочу поменять местами удаление (шаг 2) с циклом ожидания, чтобы удаление происходило только в том случае, если и когда новый модуль находится в фазе PodSucceeded или PodRunning. Когда я это делаю, я сталкиваюсь с другими проблемами (я думаю, потому что функция согласования вызывается из первоначального создания модуля и количество реплик становится неверным).