gpt4 book ai didi

go - 如何使用client-go重新启动StatefulSet的特定Pod?

转载 作者:行者123 更新时间:2023-12-01 20:26:51 25 4
gpt4 key购买 nike

我的方法是:

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被删除。因此, Get pod方法返回具有运行状态的pod。如果我在Pod删除后使用 sleep几秒钟,则可以正常工作。有没有更好的方法而不使用 sleep

最佳答案

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

关于go - 如何使用client-go重新启动StatefulSet的特定Pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60630363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com