(K8s学习笔记七)Pod的升级和回滚
1.Deployment的升级
示例:滚动升级busybox-deployment容器
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox: 1.7 # 查看busybox容器副本数量
kubectl get pods # 使用以下命令更新busybox到1.9版
kubectl set image deployment/busybox-deployment busybox=busybox:1.9
或者kubectl edit编辑bosybox的deployment文件将image 1.7改为1.9,修改后会自
动出发Pod滚动升级 # 查看更新过程
kubectl rollout status deployment/busybox-deployment
Deployment的更新策略包括:
1)Recreate:设置spec.strategy.type=Recreate,表示在更新Pod时会先杀掉所有正好运行的Pod,然后创建新的Pod
2)RollingUpdate:设置spec.strategy.type=RollingUpdate,表示Pod会以滚动升级的方式逐个更新,此为默认值,其中
spec.strategy.rollingUpdate.maxUnavilable指定更新过程中不可用状态的Pod的数量上限,如设置为30%,则更新过程中确保运行的Pod总数至少占Pod期望副本总数的70%。
spec.strategy.rollingUpdate.maxSurge:用于指定更新过程中Pod总数超过Pod期望副本数部分的最大值,如设为30%,则新的ReplicaSet可以在滚动更新开始时立即进行副本扩容,只需保证新旧ReplicaSet的Pod副本数之和不超过期望副本数的130%即可,一旦旧的Pod被杀掉,新的ReplicaSet就会进一步扩容。
2.Deployment的回滚
# 使用kubectl rollout history命令查看deployment部署记录
kubectl rollout history deployment/nginx-deployment # 查看特定版本的详细信息,加上revision=<N>参数
kubectl rollout history deployment/nginx-deployment --revision=3 # 回滚到ngin-deploymment上一个部署版本
kubectl rollout undo deployment/nginx-deployment # 使用--to-revision回滚到指定部署版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
3.暂停和恢复Deployment的部署操作
对于一次复杂的Deployment配置修改,为了避免频繁触发Deployment的更新操作,可先暂停Deployment的更新操作,待修改完成后再恢复
# 通过kubectl rollout pause命令暂定deployment更新操作
kubectl rollout pause deployment/nginx-deployment # 做更新image版本和容器资源操作
kubectl set image deployment/nginx-deployment nginx=nginx:1.10.1
kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=768Mi # 恢复Deployment的部署操作
kubectl rollout resume deployment/nginx-deployment
4.RC的滚动升级
使用kubectl rolling-update命令进行RC的滚动升级,升级时系统要求新的RC与旧的RC必须在相同的namespace里
# 使用nginx-rc-rollout-v1.17.yaml升级到1.17版,旧版本时1.15版
apiVersion: v1
kind: ReplicatonController
metadata:
name: nginx-rc-v1.17 # RC的name不能与旧版本相同
labels:
name: nginx-rc
version: v1.17
spec:
replicas: 1
selector: # selector中至少有一个version与旧版中的不同
name: nginx-rc
version: v1.17
template:
metadata:
labels:
name: nginx-rc
version: v1.17
spec:
containers:
- name: nginx
image: nginx:1.17
ports:
- containerPort: 80 # 执行命令滚动升级nginx-rc
kubectl rolling-update nginx-rc -f nginx-rc-rollout-v1.17.yaml
或者
# 直接使用命令更新
kubectl rolling-update nginx-rc --image=nginx:1.17
注:使用命令升级后新RC仍使用旧RC的name # 如果在更新过程中发现配置有误,则可中断更新,执行以下命令回滚
kubectl rolling-update nginx-rc --image=nginx:1.17 --rollback
RC的滚动升级不具有Deployment在应用版本升级过程中的历史记录、新旧版本数量的精细控制等功能。
5.DaemonSet的更新策略
DaemonSet包含两种升级策略:
1)OnDelete:默认的升级策略,使用此策略,在创建好新的DaemonSet配置之后,新的Pod并不会被自动创建,直到用户手动删除旧Pod才会出发新建操作
2)RollingUpdate:使用此策略更新时,旧版的Pod将被自动杀掉,然后自动创建新版的Pod,整改过程与普通Deployment的滚动升级一样可控,但回滚时不能通过kubectl rollback命令完成,必须通过再次提交旧版本配置的方式实现
要启用DaemonSet的滚动更新特性,必须将其spec.updateStrategy.type设置为RollingUpdate。
还可以设置spec.updateStrategy.rollingUpdate.maxUnavailable(默认值为1)和spec.minReadySeconds(默认值为0)
6.StatefulSet的更新策略
更新策略向Deployment和DaemonSet的策略看齐,也可使用RollingUpdate、Paritioned和OnDelete策略。
(K8s学习笔记七)Pod的升级和回滚的更多相关文章
- k8s学习笔记之六:Pod控制器(kube-controller-manager)
第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...
- kubernetes Pod的升级与回滚
一:Deployment的升级 1.通过kubectl set image命令为Deployment设置新的镜像名称kubectl set image deployment/nginx-deploym ...
- k8s学习笔记之五:Pod资源清单spec字段常用字段及含义
第一章.前言 在上一篇博客中,我们大致简述了一般情况下资源清单的格式,以及如何获得清单配置的命令帮助,下面我们再讲解下清单中spec字段中比较常见的字段及其含义 第二章.常用字段讲解 spec.con ...
- K8S学习笔记之Pod的Volume emptyDir和hostPath
0x00 Volume的类型 Volume是Kubernetes Pod中多个容器访问的共享目录. Volume被定义在Pod上,被这个Pod里的多个容器挂在到相同或不同的路径下. Volume的生命 ...
- Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 ...
- 【K8s学习笔记】K8s是如何部署应用的?
本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- k8s学习笔记之三:k8s快速入门
一.前言 kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver上实现各种增删改查等各种操作 kubectl官方使用文档:https://kubernetes.io ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- NLP知识栈
- [转载]python跨文件使用全局变量的实现
python跨文件使用全局变量的实现 更新时间:2022-10-25 14:46:38发布时间:602天前 朗读 Python 定义了全局变量的特性,使用global 关键字修饰 1 global k ...
- KCL 语言和 YAML 字符串的区别是什么?一文完全解答
什么是 YAML YAML 是一种数据序列化语言,通常用于编写配置文件.YAML 代表另一种标记语言或YAML 不是标记语言(递归首字母缩写词),YAML 通常用于数据,而不是文档.YAML 还是一种 ...
- Python安装第三库超时的解决方法
Python安装第三库超时的解决方法 1. 在很多时候使用python的时候需要使用到某些第三方库,比较常规的方法是使用cmd命令使用在线安装的方法(前提是在安装好了python相应版本时候配置好了相 ...
- vue 退出登录页面跳转 浏览器localStorage中的值没有改变
vuex中的loginout方法actions:{ loginout(data:string){ return new Promise(((resolve, reject)=>{ setTime ...
- 通过java代码向mysql数据库插入记录,中文乱码处理
处理步骤 修改mysql配置文件,并重启mysql服务.mysql默认配置文件路径为/etc/my.cnf. 修改配置如下: [mysqld] character-set-server=utf8 [c ...
- uniapp使用百度地图
要使用第三方百度地图,首先要去百度地图官方申请一个密钥,之后引入百度地图的API文件,参考使用文档即可开发使用.而在uniapp中是没法直接引入百度地图API文件的,我们要结合uniapp中的web- ...
- nginx热更新流程记录
已经做过不止一次的nginx热更新了,之前都是按照别人的路子照葫芦画瓢,现在根据我在的项目单独写一个nginx热更新流程备份自用. nginx热升级流程上传新tar到/home/cp命令复制到/usr ...
- 集合(Collection)
前几天做数据结构题碰到了集合,当时并没有学,只是通过做题对此稍微有了了解.今天正好学到了,来做一下学习记录. 一.集合总体框架 由上图可知,集合的实现方式有两大类: (1)线性接口:该集合的顶层接口是 ...
- nginx转发tomcat之https不生效
1.修改tomcat配置server.xml,让它从请求头中的X-Forwarded-Proto读取 <!-- xpath://Server/Service/Engine/Value --> ...