0

我的做法是:

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
    })
}

它不起作用,因为 pod 的删除是非阻塞的,这意味着它不会等待 pod 被删除。所以Getpod 方法返回的是运行状态的 pod。如果我sleep在 pod 删除后使用几秒钟,那么它工作正常。有没有更好的方法可以在不使用的情况下做到这一点sleep

4

1 回答 1

2

每个对象的元数据中都有一个名为uid. 您可以比较并等待 pod 就绪具有不同的 UUID。有关更多详细信息,请参阅https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids(尽管这就是要说的全部内容)。

于 2020-03-11T06:48:10.293 回答