【问题标题】:Auto rollout kubernes deployment if the deployment fails in azuredevops如果部署在 azure devops 中失败,则自动推出 kubernetes 部署
【发布时间】:2020-03-07 04:17:24
【问题描述】:

我们在 AzureDevops 中有一个发布管道,用于将微服务部署到 AKS,并在微服务部署后发送该微服务的日志。 我们使用下面的命令来使用模板 kubectl 部署部署,命令为“-f /home/admin/builds/$(build.buildnumber)/Myservice_Deployment.yml --record”

在这里我们注意到,任务不是在等待现有 pod 终止并创建新 pod,而是在继续并刚刚完成工作。

我们的预期场景

1) 使用 kubectl apply -f /home/admin/builds/$(build.buildnumber)/Myservice_Deployment.yml --record 部署微服务

2) 等待现有的 Pod 终止,并确保新的 Pod 处于运行状态。

3) 一旦新的 Pod 运行状态,通过 kubectl log 命令收集 Pod 的日志并发送给团队

4) 如果 pod 不是未处于运行状态,则回滚到之前的稳定状态。

我尝试使用不同的 shell 脚本在 azuredevops 中实现这一点,但没有成功

例如:


ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl --kubeconfig /home/admin/kubernetes/Dev-kubeconfig rollout status deployment/My-service"
until $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 60 ]; do
  $ROLLOUT_STATUS_CMD
  ATTEMPTS=$((attempts + 1))
  sleep 10
done

还需要使用kubectl log命令获取微服务的日志,文件格式为Date,需要通过邮件共享..

【问题讨论】:

  • 这个案子进展如何,有更新吗?
  • 从脚本端而不是从 kubernetes 端寻找解决方案

标签: linux bash shell kubernetes azure-devops


【解决方案1】:

您在一个问题中混合了多个问题,但您需要使用活性探针配置您的部署,以实现您想要的行为

阅读:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-liveness-command

【讨论】:

  • 我想这对我的场景没有帮助。我们正在寻找一种仅跟踪当前部署的方法,无论是否创建了 pod。但是您的解决方案是说明有关监视特定内容的内容。两者是不同的场景a
  • 不,这将确保新的 pod 正在运行,然后才删除旧的 pod。正是你要找的东西
  • 但在管道任务端寻找解决方案,以检查部署状态并在新部署失败时部署到上一阶段
  • 我不明白,如果你这样做 kubectl apply 并且部署由于活性探测而没有进展 - 你不需要回滚,因为没有部署任何东西
  • 这就是活性探测将为您做的事情,但我认为您需要使用applyimage set
猜你喜欢
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2020-01-10
  • 2019-11-16
  • 2020-01-06
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多