Мой подход такой:
func restartPod(meta metav1.ObjectMeta, kubeClient kubernetes.Interface) error {
err := kubeClient.CoreV1().Pods(meta.Namespace).Delete(meta.Name, deleteInForeground())
if err != nil {
return err
}
//time.Sleep(2 * time.Second)
return wait.PollImmediate(5*time.Second, 5*time.Minute, func() (done bool, err error) {
pod, err := kubeClient.CoreV1().Pods(meta.Namespace).Get(meta.Name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return pod.Status.Phase == v1.PodRunning && pod.Status.ContainerStatuses[0].Ready, nil
})
}
Он не работает, потому что удаление модуля неблокируется, это означает, что он не ожидает удаления модуля. Таким образом, метод Get
pod возвращает модуль с состоянием выполнения. Если я использую sleep
в течение нескольких секунд после удаления модуля, то он работает нормально. Есть ли лучший способ сделать это без использования sleep
?