1

我想使用 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。我根据我的需要调整了代码并且它正在工作。但我不确定如何并行部署多个部署(用通道做点什么?)。

4

1 回答 1

0

您可以在 client-go 中使用Informer订阅关注您的更改。Deployment

这是一个更复杂的代码,但正如你所说,如果你不想做polling ,这是一个解决方案。

这里有一些例子:

于 2019-10-26T18:19:15.150 回答