首页 > 解决方案 > 如果在 azuredevops 中部署失败,则自动推出 kubernes 部署

问题描述

我们在 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 格式,需要通过邮件共享。

标签: linuxbashshellkubernetesazure-devops

解决方案


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

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


推荐阅读