k8s 回滚应用

  kubectl apply 每次更新应用时 Kubernetes 都会记录下当前的配置,保存为一个 revision(版次),这样就可以回滚到某个特定 revision。

滚动更新是一次只更新一小部分,成功后再更新更多的副本,最终完成所有副本的更新。滚动更新最大的好处是零停机,整个更新过程始终有副本在运行,从而保证业务的连续性。

在Deployment 配置文件中通过revisionHistoryLimit 属性配置revison数量

下面实践回滚功

三个配置文件  httpd.v1.ym,httpd.v2.yml, httpd.v3.yml

复制代码
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd
  annotations:
     kubernetes.io/change-cause: "httpd.v1"  #记录到revision中的内容
spec:
  revisionHistoryLimit: 10      #保留最近10个revision
  replicas: 2
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80
复制代码
复制代码
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd  
  annotations:
     kubernetes.io/change-cause: "httpd.v2" 
spec:
  revisionHistoryLimit: 10
  replicas: 2
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2
        ports:
        - containerPort: 80
复制代码
复制代码
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd
  annotations:
     kubernetes.io/change-cause: "httpd.v3"  #记录到revision中的内容
spec:
  revisionHistoryLimit: 10      #保留最近10个revision
  replicas: 2
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
      - name: httpd
        image: httpd:2.4
        ports:
        - containerPort: 80
复制代码

 

更新应用

--record 的作用是将当前命令记录到 revision 记录中,这样我们就可以知道每个 revison 对应的是哪个配置文件。

不想在命令行加的话就要在配置文件中添加

 annotations:
     kubernetes.io/change-cause: "httpd.v3"  #记录到revision中的内容

通过 kubectl rollout history deployment httpd 查看 revison 历史记录。

CHANGE-CAUSE 就是 --record 的结果。

 如果要回滚到某个版本,比如 revision 1,可以执行命令 :

kubectl rollout undo deployment httpd --to-revision=1

通过查看历史 revision 由3版本变成4版本 ,其实这个4版本对应的就是之前的1版本

 

参考

https://www.cnblogs.com/benjamin77/p/9936543.html

 

posted @   xmc_2022  阅读(1008)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示