022.掌握Pod-Pod升级和回滚
一 deploymentPod升级和回滚
1.1 deployment升级
1 [root@uk8s-m-01 study]# vi nginx-deployment.yaml
2 apiVersion: apps/v1beta1
3 kind: Deployment
4 metadata:
5 name: nginx-deployment
6 spec:
7 replicas: 3
8 template:
9 metadata:
10 labels:
11 app: nginx
12 spec:
13 containers:
14 - name: nginx
15 image: nginx:1.7.9
16 ports:
17 - containerPort: 80
18
19 [root@uk8s-m-01 study]# kubectl create -f nginx-deployment.yaml
20 [root@uk8s-m-01 study]# kubectl get pods

1 [root@uk8s-m-01 study]# kubectl get deployment #查看deployment
2 [root@uk8s-m-01 study]# kubectl set image deployment/nginx-deployment nginx=nginx:1.8.1 #命令更新
3 [root@uk8s-m-01 study]# kubectl get pods #查看升级后的pod

1 [root@uk8s-m-01 study]# kubectl edit deployment/nginx-deployment #直接编辑deployment

1 [root@uk8s-m-01 study]# kubectl rollout status deployment/nginx-deployment #查看升级情况

1 [root@uk8s-m-01 study]# kubectl get pods
2 [root@uk8s-m-01 study]# kubectl describe pod nginx-deployment-7448597cd5-8sng2 | grep Image

1.2 deployment升级原理
1 [root@uk8s-m-01 study]# kubectl describe deployments/nginx-deployment #观察Deployment的更新过程
1 [root@uk8s-m-01 study]# kubectl get rs #查看多次升级的结果

1.3 deployment升级策略
- Recreate:设置spec.strategy.type=Recreate,表示Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod。
- RollingUpdate:设置spec.strategy.type=RollingUpdate,表示Deployment会以滚动更新的方式来逐个更新Pod。同时,可以通过设置spec.strategy.rollingUpdate下的两个参数(maxUnavailable和maxSurge)来控制滚动更新的过程。
- spec.strategy.rollingUpdate.maxUnavailable:用于指定Deployment在更新过程中不可用状态的Pod数量的上限。 该maxUnavailable的数值可以是绝对值(例如5)或Pod期望的副本数的百分比(例如10%),如果被设置为百分比,那么系统会先以向下取整的方式计算出绝对值(整数)。而当另一个参数maxSurge被设置为0时,maxUnavailable则必须被设置为绝对数值大于0。举例来说,当maxUnavailable被设置为30%时,旧的ReplicaSet可以在滚动更新开始时立即将副本数缩小到所需副本总数的70%。一旦新的Pod创建并准备好,旧的ReplicaSet会进一步缩容,新的ReplicaSet又继续扩容。整个过程中系统在任意时刻都可以确保可用状态的Pod总数至少占Pod期望副本总数的70%。
- spec.strategy.rollingUpdate.maxSurge:用于指定在Deployment更新Pod的过程中Pod总数超过Pod期望副本数部分的最大值。该maxSurge的数值可以是绝对值(例如5)或Pod期望副本数的百分比(例
- 如10%)。如果设置为百分比,那么系统会先按照向上取整的方式计算出绝对数值(整数)。举例来说,当maxSurge的值被设置为30%时,新的ReplicaSet可以在滚动更新开始时立即进行副本数扩容,只需要保证新旧ReplicaSet的Pod副本数之和不超过期望副本数的130%即可。一旦旧的Pod被杀掉,新的ReplicaSet就会进一步扩容。在整个过程中系统在任意时刻都能确保新旧ReplicaSet的Pod副本总数之和不超过所需副本数的130%。
1.4 deployment回滚
1 [root@uk8s-m-01 study]# kubectl rollout history deployment/nginx-deployment #查看部署历史
2 [root@uk8s-m-01 study]# kubectl rollout history deployment/nginx-deployment --revision=3 #查看对应的部署历史版本
3 [root@uk8s-m-01 study]# kubectl rollout history deployment/nginx-deployment --revision=2 #查看对应的部署历史版本

1 [root@uk8s-m-01 study]# kubectl rollout undo deployment/nginx-deployment --to-revision=2 #回滚版本
2 [root@uk8s-m-01 study]# kubectl describe deployment/nginx-deployment
1.5 暂停和恢复deployment
1 [root@uk8s-m-01 study]# kubectl get deployments #查看deployment
2 [root@uk8s-m-01 study]# kubectl get rs #查看rs
3 [root@uk8s-m-01 study]# kubectl rollout pause deployment/nginx-deployment #暂停deployment
4 [root@uk8s-m-01 study]# kubectl set image deployment/nginx-deployment nginx=nginx:1.10.3 #升级操作,但由于暂停deployment,因此不会触发更新
5 [root@uk8s-m-01 study]# kubectl rollout history deployment/nginx-deployment #查看历史版本
6 [root@uk8s-m-01 study]# kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
7 [root@uk8s-m-01 study]# kubectl rollout resume deployment/nginx-deployment #恢复deployment
8 [root@uk8s-m-01 study]# kubectl get rs
9 NAME DESIRED CURRENT READY AGE
10 nginx-deployment-7448597cd5 0 0 0 52m
11 nginx-deployment-84bc94dcb7 1 1 0 6s
12 nginx-deployment-b5f766d54 3 3 3 55m
1 [root@uk8s-m-01 study]# kubectl describe deployment/nginx-deployment
2 [root@uk8s-m-01 study]# kubectl describe pods nginx-deployment-84bc94dcb7-hqxkk | grep Image
3 Image: nginx:1.10.3
二 RC升级和回滚
2.1 RC滚动升级
1 [root@uk8s-m-01 study]# vi redis-master-controller-v1.yaml
2 apiVersion: v1
3 kind: ReplicationController
4 metadata:
5 name: redis-master-v1
6 labels:
7 name: redis-master
8 spec:
9 replicas: 1
10 selector:
11 name: redis-master
12 template:
13 metadata:
14 labels:
15 name: redis-master
16 spec:
17 containers:
18 - name: master
19 image: kubeguide/redis-master:1.0
20 ports:
21 - containerPort: 6379
22
23 [root@uk8s-m-01 study]# kubectl create -f redis-master-controller-v1.yaml
1 [root@uk8s-m-01 study]# vi redis-master-controller-v2.yaml #RC升级配置文件
2 apiVersion: v1
3 kind: ReplicationController
4 metadata:
5 name: redis-master-v2
6 labels:
7 name: redis-master
8 version: v2
9 spec:
10 replicas: 1
11 selector:
12 name: redis-master
13 version: v2
14 template:
15 metadata:
16 labels:
17 name: redis-master
18 version: v2
19 spec:
20 containers:
21 - name: master
22 image: kubeguide/redis-master:2.0
23 ports:
24 - containerPort: 6379
- RC的名字(name) 不能与旧RC的名字相同。
- 在selector中应至少有一个Label与旧RC的Label不同, 以标识其为新RC。如上所示新增了一个名为version的Label,以与旧RC进行区分。
1 [root@uk8s-m-01 study]# kubectl rolling-update redis-master-v1 -f redis-master-controller-v2.yaml
2 [root@uk8s-m-01 study]# kubectl rolling-update redis-master-v1 --image=kubeguide/redis-master:2.0 #也可直接命令中升级
2.2 RC回滚
1 [root@uk8s-m-01 study]# kubectl rolling-update redis-master-v1 --rollback
022.掌握Pod-Pod升级和回滚的更多相关文章
- kubernetes Pod的升级与回滚
一:Deployment的升级 1.通过kubectl set image命令为Deployment设置新的镜像名称kubectl set image deployment/nginx-deploym ...
- 浅入Kubernetes(12):Deployment 的升级、回滚
目录 更新 上线 会滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 本篇内容讨论 Pod 的更新和回滚,内容不多. 更新 打开 https: ...
- Hadoop HDFS概念学习系列之HDFS升级和回滚机制(十二)
不多说,直接上干货! HDFS升级和回滚机制 作为一个大型的分布式系统,Hadoop内部实现了一套升级机制,当在一个集群上升级Hadoop时,像其他的软件升级一样,可能会有新的bug或一些会影响现有应 ...
- 9.1 k8s pod版本更新流程及命令行实现升级与回滚
1.创建 Deployment root@k8-deploy:~/k8s-yaml/controllers/deployments# vim nginx-deployment.yaml apiVers ...
- Kubernetes:Pod 升级、回滚
本篇主要讨论如何实现滚动更新和回滚,任意更换版本并且回滚以前的版本(版本更新),而下一章会讨论到 Pod 缩放,根据机器资源自动拓展和收缩应用(自动扩容实例). 本文为作者的 Kubernetes 系 ...
- kubernetes deployment升级和回滚
a.创建deployment pod kubectl run mynginx --image=docker.io/nginx: --record 准备svc文件 apiVersion: v1 kind ...
- Docker & Kubenetes 系列四:集群,扩容,升级,回滚
本篇将会讲解应用部署到Kubenetes集群,集群副本集查看,集群自愈能力演示,集群扩容,滚动升级,以及回滚. 本篇是Docker&Kubenetes系列的第四篇,在前面的篇幅中,我们向Kub ...
- k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用
前言:上一篇通过rancher管理k8s,部署服务应用扩容,高可用,本篇介绍kubectl命令行部署高可用集群节点,测试升级.扩容等 1.测试环境:3节点k3s,使用其中2节点(ubuntunode1 ...
- 原创|1分钟搞定 Nginx 版本的平滑升级与回滚
Nginx无论是对于运维.开发.还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于Nginx相关的文章: Nginx服务介绍与安装 Nginx服务配置文件介绍 Nginx配置虚拟主机 ...
随机推荐
- [BZOJ3550] [Sdoi2014]数数
Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3 ...
- LeetCode初级算法--树02:验证二叉搜索树
LeetCode初级算法--树02:验证二叉搜索树 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- Open vSwitch系列之一 Open vSwitch诞生
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs 2006年,SDN诞生于美国GENI项目资助的斯坦福大学Clean Slate课题 ...
- HTTP使用get,post方式连接
在项目中使用了http的get和post方式连接,发送传输数据: public static String doGet(String httpUrl) { HttpURLConnection conn ...
- ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明
1.前言 在介绍Arduino Core For ESP8266的时候,博主着重讲解了WIFI库的使用,但是并没有涉及到ESP8266硬件本身的一些特有API.所以,这一章我们将讲解ESP82 ...
- Class constructor FileManager cannot be invoked without 'new'
bug:今天项目重新安装依赖打包的时候出现错误:Class constructor FileManager cannot be invoked without 'new' 解决:尝试了很多种解决方案, ...
- Java学习笔记五--String(二)String其他方法
第一节课 // 清除单位字符串开始和结尾空白的副本 String.trim(); 字符串每次更改都会创建新的对象,而不会覆盖原来的字符串,每次拼接都会产生新的String对象,耗时耗内存. java. ...
- Kafka常用操作备忘
启动nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties &nohup ./bin/kafka-server-st ...
- Mysql数据库(六)视图
一.视图是由数据库中的一个表或多个表导出的虚拟表.其作用是方便用户对数据的操作. 1.视图的概念 2.视图的作用 二.创建视图 创建视图是指在已经存在的数据表上建立视图.视图可以建立在一张表中,也可以 ...
- .NET手撸2048小游戏
.NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...