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: ...
随机推荐
- C#中的datatable类型作为参数传入SQL的存储空间
SQL中首先建立一个结构一样的自定义类型的表格,在存储空间中申明一个此类型的变量,此处注意此时后面必须有readonly,如: @paravalue_insert MaterialStruct rea ...
- kvm简介及创建虚拟化安装(1)
kvm虚拟化介绍 一.虚拟化分类 1.虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...
- Spring Data JPA 介绍
Spring-data-jpa的基本介绍:JPA诞生的缘由是为了整合第三方ORM框架,建立一种标准的方式,百度百科说是JDK为了实现ORM的天下归一,目前也是在按照这个方向发展,但是还没能完全实现.在 ...
- debian系统安装vsftpd服务端和ftp客户端
一.服务器安装和配置 1.安装vsftpd.(此处切换到su权限下了.其它用户请使用sudo权限,没有sudo权限的看前面的教程进行安装) apt-get install vsftpd 2.配置vsf ...
- [Python]机器学习:Tensorflow实现线性回归
源码 #> tutorial:https://www.cnblogs.com/xianhan/p/9090426.html # 步骤一:构建模型 # 1.TensorFlow 中的线性模型 ## ...
- SQL常见面试题(学生表_课程表_成绩表_教师表)
表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师 ...
- IDEA 控制台中文乱码的问题
-Dfile.encoding=UTF-8
- icon.css
.icon-blank{ background:url('icons/blank.gif') no-repeat; } .icon-add{ background:url('icons/edit_ad ...
- ssl安全验证
#ssl验证 r=requests.get('https://www.12306.cn',verify=False) print(r.content.decode('utf-8')) 结果:
- 面向服务架构之RPC原理与实例
1.RPC概述 RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样.主要是为了应对当前互 ...