我想使用 kubernetes go 客户端扩展部署并等待部署成功完成。我已经创建了可行的解决方案,但想知道我是否错过了任何边缘情况或可以改进它。
我的第一个非常简单的解决方案:
for _, deployment := range deploymentList.Items {
deployment.Spec.Replicas = int32Ptr(1)
_, err := deploymentsClient.Update(&deployment)
if err != nil {
panic(err)
}
}
for {
deploymentList, err = deploymentsClient.List(opts)
if err != nil {
panic(fmt.Errorf("List deployments failed: %v", err))
}
# checks if DeploymentAvailable and Status is "True"
if available(deploymentList) {
fmt.Println("Rolled out")
break
}
fmt.Println("Not rolled out")
time.Sleep(5 * time.Second)
}
这行得通,但我不喜欢轮询的想法。
第二种解决方案的灵感来自kubectl rollout status。我根据我的需要调整了代码并且它正在工作。但我不确定如何并行部署多个部署(用通道做点什么?)。