如何在部署超过 'progressDeadlineSeconds' 时自动将部署回滚到以前的修订版?
How to roll back a deployment to a previous revision automatically when deployment has crossed 'progressDeadlineSeconds'?
我正在努力在 kubernetes 中部署 docker 图像。第一次部署容器,我用的是:
kubectl apply -f <deployment_file>.yaml
并且容器已成功部署到 pod 中。
此外,deployment_file 看起来像这样:
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'属性。
为了跟踪部署,我使用了:
kubectl rollout status deployment.v1beta1.apps/publisher
现在如果我想用新镜像更新容器,我可以再次重复使用命令
kubectl apply -f <deployment_file>.yaml
应用更新。
但是,如果由于某种原因应用更新失败(假设 docker 图像已损坏),有没有办法在 - pods 时自动触发回滚到以前的修订版?状态未设置为 'running' 或执行时间超过 'pregressDeadlineSeconds'?
直到现在我还没有找到自动执行回滚的方法。想法将不胜感激。
按照以下步骤操作。
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
在 kubectl apply
命令之后,您可以检查部署是否成功推出,然后,如果有必要,kubectl rollout undo
命令可以回滚到以前的修订版。
另外,您可以使用 sleep
Linux 命令等待一段时间。
在 Linux:
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
停止 kubectl rollout status
如果它在 5 秒后卡住。
> /dev/null 2>&1 &
在后台运行命令,没有终端输出。
这是我撤消部署部署所遵循的步骤
这里client-depl是部署的名字
步骤 1 要获取特定部署的历史列表,请使用此命令
kubectl rollout history deploy client-depl
之后你会得到这样的输出。
rollout history deploy image
假设我想将部署部署到 REVISION 1,然后使用此命令
$ kubectl rollout undo deploy client-depl --to-revision=1
之后你会得到这样的输出
deployment rollback image
恭喜您已成功将部署部署到以前的版本。如有任何疑问,请回复,我们很乐意为您提供帮助。
我正在努力在 kubernetes 中部署 docker 图像。第一次部署容器,我用的是:
kubectl apply -f <deployment_file>.yaml
并且容器已成功部署到 pod 中。
此外,deployment_file 看起来像这样:
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'属性。
为了跟踪部署,我使用了:
kubectl rollout status deployment.v1beta1.apps/publisher
现在如果我想用新镜像更新容器,我可以再次重复使用命令
kubectl apply -f <deployment_file>.yaml
应用更新。
但是,如果由于某种原因应用更新失败(假设 docker 图像已损坏),有没有办法在 - pods 时自动触发回滚到以前的修订版?状态未设置为 'running' 或执行时间超过 'pregressDeadlineSeconds'?
直到现在我还没有找到自动执行回滚的方法。想法将不胜感激。
按照以下步骤操作。
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
在 kubectl apply
命令之后,您可以检查部署是否成功推出,然后,如果有必要,kubectl rollout undo
命令可以回滚到以前的修订版。
另外,您可以使用 sleep
Linux 命令等待一段时间。
在 Linux:
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
停止 kubectl rollout status
如果它在 5 秒后卡住。
> /dev/null 2>&1 &
在后台运行命令,没有终端输出。
这是我撤消部署部署所遵循的步骤
这里client-depl是部署的名字
步骤 1 要获取特定部署的历史列表,请使用此命令
kubectl rollout history deploy client-depl
之后你会得到这样的输出。
rollout history deploy image
假设我想将部署部署到 REVISION 1,然后使用此命令
$ kubectl rollout undo deploy client-depl --to-revision=1
之后你会得到这样的输出
deployment rollback image
恭喜您已成功将部署部署到以前的版本。如有任何疑问,请回复,我们很乐意为您提供帮助。