首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在部署跨“进度”时自动回滚到以前的修订?

如何在部署跨“进度”时自动回滚到以前的修订?
EN

Stack Overflow用户
提问于 2019-05-24 11:40:57
回答 3查看 15.8K关注 0票数 7

我正努力在库伯内特斯部署一个码头形象。第一次部署容器时,我使用了:

代码语言:javascript
复制
kubectl apply -f <deployment_file>.yaml

容器被成功地部署在一个吊舱里。

另外,deployment_file看起来也是这样的:

代码语言:javascript
复制
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: publisher
spec:
  replicas: 2
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 300
  progressDeadlineSeconds: 900
  template:
    metadata:
      labels:
        app: publisher
    spec:
      containers:
      - name: publisher
        image: 123dev.azurecr.io/publisher:{{ci-build-number}}
        env:
          - name: ENVIRONMENT
            value: "dev"
        ports:
        - containerPort: 8080

我在上面的yaml文件中定义了'progressDeadlineSeconds‘属性。

为了跟踪部署,我使用了:

代码语言:javascript
复制
kubectl rollout status deployment.v1beta1.apps/publisher

现在,如果我想用新映像更新容器,我可以再次重用命令

代码语言:javascript
复制
kubectl apply -f <deployment_file>.yaml

若要应用更新,请执行以下操作。

但是,如果由于某种原因应用更新失败(假设码头映像已损坏),是否有一种方法在- pods状态未设置为“运行”或执行时间跨越“pregressDeadlineSecond”时自动触发回滚到以前的修订?

到目前为止,我还没有找到自动执行回滚的方法。我很感激你的想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-02 15:12:15

在使用kubectl apply命令之后,您可以检查部署是否成功推出,然后,如果有必要,kubectl rollout undo命令可以回滚到以前的版本。此外,您还可以使用sleep Linux命令在此之前等待一段时间。

在Linux上:

代码语言:javascript
复制
sleep 900 && \
if [[ $(timeout 5 kubectl rollout status -f <deployment_file>.yaml) != *"successfully rolled out"* ]]; then     
    kubectl rollout undo -f <deployment_file>.yaml
fi > /dev/null 2>&1 &

如果timeout 5在5秒后被卡住,则kubectl rollout status将停止。

> /dev/null 2>&1 &在后台运行命令,没有终端输出。

票数 4
EN

Stack Overflow用户

发布于 2019-05-24 12:02:41

按照以下步骤操作。

代码语言:javascript
复制
1. append the --record param to deployment, as shown below
kubectl apply -f <deployment_file>.yaml --record

2. kubectl rollout history deploy <deployment-name> to check deployment history. for example,
kubectl rollout history deploy mynginx
deployments "mynginx"
REVISION  CHANGE-CAUSE
3         kubectl set image deploy mynginx mynginx=nginx:1.12.2
4         kubectl set image deploy mynginx mynginx=nginx:1.13.8


3. you can rollback to previous version using revision, say to revision 3
kubectl rollout undo deploy mynginx --to-revision=3
票数 5
EN

Stack Overflow用户

发布于 2021-10-19 12:50:30

以下是我撤销部署的展开所遵循的步骤

这里,客户端是部署的名称。

步骤1要获取特定部署的历史记录,请使用以下命令

代码语言:javascript
复制
kubectl rollout history deploy client-depl

在此之后,您将得到这样的输出。

展示历史记录部署映像

因此,假设我希望将部署部署到修订1,然后使用以下命令

代码语言:javascript
复制
$ kubectl rollout undo deploy client-depl --to-revision=1

在此之后,您将得到如下输出

部署回滚映像

祝贺您成功地将部署推出到以前的版本。如有任何疑问,请回复将乐意帮助您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56291964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档