Обновление оператора 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. Когда я это делаю, я сталкиваюсь с другими проблемами (я думаю, потому что функция согласования вызывается из первоначального создания модуля и количество реплик становится неверным).

0 ответов

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