我想使用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 。我根据自己的需要调整了代码,并且可以正常工作。但是我不确定如何并行执行多个部署(对通道执行某些操作?)。
答案 0 :(得分:0)
您可以使用客户端访问中的线人 订阅或监视 .\Invoke-JobList.ps1 -jobFile joblist3.csv -nConcurrent 3 -Verbose
上的更改。
这是更复杂的代码,但是正如您所说,如果您不想进行轮询,这是一个解决方案。
以下是一些示例: