我有一个自定义的 Kubernetes Go 操作员,我希望能够以零停机时间更新正在运行的实例/pod。即,我想在删除旧 pod 之前创建一个新 pod 并让它运行。
做这个的最好方式是什么?
目前我正在这样做:
// 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
这可行,但当然旧的 pod 会在新的 pod 准备好之前被删除。
理想情况下,我想将删除(第 2 步)与等待循环交换,以便删除仅在新 pod 处于 PodSucceeded 或 PodRunning 阶段时发生。当我这样做时,我遇到了其他问题(我认为是因为从初始 pod create 调用了 reconcile 函数并且副本数变得不正确)。