deployment控制pod进行滚动更新以及回滚
更新pod镜像两种方式:
方式一:kubectl set image deployment/${deployment name} ${container name}=${image} 例: kubectl set image deployment/nginx-deployment nginx=nginx:1.13 --record
方式二: kubectl edit 修改deployment配置, 将spec.template.spec,containers[0].image 从nginx:1.12 修改成nginx:1.13
查看deployment更新过程:
kubectl rollout status deployment/nginx-deployment
可以通过deployment状态来判断pod更新是否完成, kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting1 如果更新成功, 返回值为0
deployment更新策略: Recreate(重建)杀掉所有的pod, 然后创建新的pod 和 RollingUpdate(滚动更新) 通过参数maxUnavailable与maxSurge来控制滚动更新过程
滚动更新策略:
deployment.spec.strategy.rollingUpdate.maxUnavailable:不可用状态的pod数量,该值可以是绝对值, 也可以是pod期望的副本数的百分比
deployment.spec.strategy.rollingUpdate.maxSurge: 超过pod期望副本数的最大值
当maxSurge设置为30% 和 maxUnavailable设置为30% : 生成一个新的ReplicaSet立即进行副本数扩容, 扩容的数量为不超过期望副本数的130%即可, 旧的ReplicaSet立即缩容到所需副本数的70%
pod回滚: 建议deployment滚动更新的时候加上--record参数, 这样在change-cause看个每个版本使用的命令
kubectl rollout history deployment/nginx-deployment 检查deployment升级的历史记录
kubectl rollout history deployment/nginx-deployment --revision=2 查看单个revision 的详细信息
kubectl rollout undo deployment/nginx-deployment 回退到上一个版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2 根据--revision参数指定某个历史版本
spec.revisonHistoryLimit项来指定 deployment 最多保留多少 revision 历史记录
注意: deployment的pod模板被更改时才会创建新的修订版本,例如更新模板标签或者容器镜像可以触发滚动更新, 其它操作例如扩展副本数将不会触发deployment的更新操作
暂停和恢复deployment: 对于一次复杂的deployment更新操作,为了避免频繁触发deployment的更新操作,可以先暂停deployment的更新操作, 然后进行配置修改,在恢复deployment,一次性触发完整的更新操作
kubectl rollout pause deployment/nginx-deployment #暂停deployment , 不影响pod正常运行, 可以修改的deployment资源, 不会触发滚动更新
kubectl set image deploy/nginx nginx=nginx:1.9.1
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
kubectl rollout resume deployment/nginx-deployment #恢复deployment, 如果有变动, 马上进行滚动更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 10
strategy:
rollingUpdate:
maxSurge: 30%
maxUnavailable: 30%
template:
metadata:
labels:
app: nginx
spec:
initContainers:
- name: install
image: busybox
imagePullPolicy: IfNotPresent
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://kubernetes.io
volumeMounts:
- name: workdir
mountPath: "/work-dir"
containers:
- name: nginx
image: nginx:1.12
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: "/usr/share/nginx/html"
volumes:
- name: workdir
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
labels:
app: nginx
spec:
type: NodePort
selector:
app: nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
deployment控制pod进行滚动更新以及回滚的更多相关文章
- Docker Swarm(八)滚动更新、回滚服务
滚动更新.回滚服务 默认情况下, swarm一次只更新一个副本,并且两个副本之间没有等待时间,我们可以通过: # 定义并行更新的副本数量--update-parallelism# 定义滚动更新的时间间 ...
- linux运维、架构之路-K8s滚动更新及回滚
一.滚动更新 应用程序一次只更新一小部分副本,更新成功后,再更新更多的副本,最终完成所有副本的更新. 滚动更新的优点:零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 1. ...
- Docker Kubernetes 容器更新与回滚
Docker Kubernetes 容器更新与回滚 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...
- Kubernetes:更新与回滚
Blog:博客园 个人 除了创建,Deployment 提供的另一个重要的功能就是更新应用,这是一个比创建复杂很多的过程.想象一下在日常交付中,在线升级是一个很常见的需求,同时应该尽量保证不能因为升级 ...
- 0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚
@Transactianal注解有一些属性,见Spring-Framework-Reference Table17.3 Transactional-settings @Transactional(pr ...
- docker swarm实现java项目的发布/滚动更新/回滚/镜像管理
使用docker swarm滚动更新java项目,部署集群,这一切的前提是使用Jenkins+maven进行项目打包,分发等功能 具体可以参考我的另外三篇文章 https://www.cnblogs. ...
- Kubernetes:Pod 升级、回滚
本篇主要讨论如何实现滚动更新和回滚,任意更换版本并且回滚以前的版本(版本更新),而下一章会讨论到 Pod 缩放,根据机器资源自动拓展和收缩应用(自动扩容实例). 本文为作者的 Kubernetes 系 ...
- 9.1 k8s pod版本更新流程及命令行实现升级与回滚
1.创建 Deployment root@k8-deploy:~/k8s-yaml/controllers/deployments# vim nginx-deployment.yaml apiVers ...
- 浅入Kubernetes(12):Deployment 的升级、回滚
目录 更新 上线 会滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 本篇内容讨论 Pod 的更新和回滚,内容不多. 更新 打开 https: ...
随机推荐
- OpenStack Blazar 架构解析与功能实践
目录 文章目录 目录 Blazar Blazar 的安装部署 Blazar 的软件架构 Blazar 的资源模型与状态机 Blazar 的主机资源预留功能(Host Reservation) 代码实现 ...
- phpstrom--------config php interpreter
phpstrom是一款比较好用的php代码编辑器,使用phpstrom进行代码编辑时我可能会需要看一下在网页上的实际效果,但是PHPstrom本身只是一款编辑器,不具备运行功能,我们需要自己安装一个服 ...
- kill-9 kill-15
kill -9 PID 是操作系统从内核级别强制杀死一个进程. kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭. kill -15 PID 效果是正常退出进程,退出前可以被阻 ...
- 谷歌云服务器XShell登录
一,谷歌云服务器,默认用浏览器进行SSH链接,而且也不告知密码.以Centos为例,先使用浏览器连接 1,给root修改密码 sudo passwd root 2,编辑ssh配置文件 sudo nan ...
- tween.js的API实践
看了网上多篇关于tween的使用教程,基本上千篇一律,大多数的写法都是像下面这样: function initTween(geometry) { }; tween = }, ); tween.easi ...
- Jmeter实现WebSocket协议的接口
1.下载websocket插件的jar包 网盘链接:https://pan.baidu.com/s/1FDcTHdQcDo6izgROMgB96w 密码:uags 该包下载完成后直接放在jmeter的 ...
- laravel 5.8 实现消息推送
以下教程是基于5.6 的,在使用5.8实现时遇到一些问题,做一下记录 在我看来,实时通信才是 APP 应用的将来. Socket 服务通常不是那么容易实现,但是 Laravel Echo 服务改变了这 ...
- HCL试验六
交换机R1: syssysname R1interface loopback 0ip add 192.168.10.1 24quinterface g0/0ip address 10.1.1.1 30 ...
- 【VS开发】PCIe体系结构的组成部件
PCIe总线作为处理器系统的局部总线,其作用与PCI总线类似,主要目的是为了连接处理器系统中的外部设备,当然PCIe总线也可以连接其他处理器系统.在不同的处理器系统中,PCIe体系结构的实现方法略有不 ...
- C++学习笔记-new与delete
C++新增了new和delete关键字,用来开辟内存,对应的就是C语言的malloc和free 对比new/delete和malloc/free malloc和free是库函数,以字节为单位申请堆内存 ...