Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩

1.Kubernetes的controller pattern

需要认识到Kubernetes操作Pod的逻辑,都是由控制器来完成的。

查看之前写过的nginx-deployment的YAML文件
[root@kubernetes01 ~]# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels: app: nginx
spec:replicas: 2selector: matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8.1ports:- containerPort: 80Kubernetes中的kube-controller-manager组件执行了上面的Deployment定义的编排动作。
Deployment定义的template字段,这种字段在Kubernetes中叫做PodTemplate(Pod模版)。
而这个YAML文件描述的就是Deployment这样一个控制器,template以上的部分是对控制器的定义,template以下的部分属于对被控制的对象的定义。

2.Kubernetes Pod 的自动伸缩

Pod水平扩展和水平收缩的能力依赖于Kubernetes中一个非常重要的API对象,ReplicaSet也就是副本集。

2.1.Pod的水平扩展和伸缩

查看例子的YAML文件
[root@kubernetes01 ~]# cat nginx-replicaset.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: nginx-replicasetlabels: app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8.0
上面这个例子中,ReplicaSet对象是由一个Pod模版和副本数目的多少定义组成的。再看这个YAML文件
[root@kubernetes01 ~]# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels: app: nginx
spec:replicas: 3selector: matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.8.1ports:- containerPort: 80
Deployment控制器实际操作的是ReplicaSet对象,而不是Pod对象。
这个定义replicas=3的Deployment与他的ReplicaSet以及Pod的关系可以理解成是一种分层控制层层控制的关系,replicas的值决定是扩展还是收缩,当你去扩展或是收缩的时候还伴随着滚动更新。

2.2.Pod的滚动更新

1.首先修改镜像版本
kubectl edit deployment/nginx-deployment
spec:containers:- image: nginx:1.9.1imagePullPolicy: IfNotPresentname: nginxports:- containerPort: 80protocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30
这块儿直接把image中nginx的版本改成了1.9.1然后保存退出,文件有了新的变动会触发更新。2.查看滚动更新的效果
[root@kubernetes01 ~]# kubectl describe deployment nginx-deployment | tail -n 10
Events:Type    Reason             Age    From                   Message----    ------             ----   ----                   -------Normal  ScalingReplicaSet  30m    deployment-controller  Scaled up replica set nginx-deployment-7f987f7889 to 3Normal  ScalingReplicaSet  8m55s  deployment-controller  Scaled up replica set nginx-deployment-6987cdb55b to 1Normal  ScalingReplicaSet  8m54s  deployment-controller  Scaled down replica set nginx-deployment-7f987f7889 to 2Normal  ScalingReplicaSet  8m54s  deployment-controller  Scaled up replica set nginx-deployment-6987cdb55b to 2Normal  ScalingReplicaSet  8m33s  deployment-controller  Scaled down replica set nginx-deployment-7f987f7889 to 1Normal  ScalingReplicaSet  8m33s  deployment-controller  Scaled up replica set nginx-deployment-6987cdb55b to 3Normal  ScalingReplicaSet  8m12s  deployment-controller  Scaled down replica set nginx-deployment-7f987f7889 to 0
首先通过Events输出的内容我们可以看到这个deployment滚动更新的Message。[root@kubernetes01 ~]# kubectl get rs
NAME                               DESIRED   CURRENT   READY   AGE
nginx-deployment-5c689d88bb        0         0         0       14d
nginx-deployment-5cd6d46846        0         0         0       14d
nginx-deployment-67d57d6df9        0         0         0       9d
nginx-deployment-6987cdb55b        3         3         3       10m
nginx-deployment-7f987f7889        0         0         0       9d
nginx-replicaset                   0         0         0       37m
然后查看这个Deployment控制的ReplicaSet的最终状态,这里等待了一会儿所以已经是最终的状态了,配合前边Events的信息,nginx-deployment-6987cdb55b up to 1,旧的nginx-deployment-7f987f7889 down to 2,通过交替的逐一的升级和降级“滚动更新”,最终
nginx-deployment-6987cdb55b 的DESIRED,CURRENT,READY都变成了期望值3!状态字段的含义:
DESIRED:用户期望的Pod副本个数
CURRENT:当前处于Running状态的Pod的个数
UP-TO-DATE:当前处于最新版本的Pod的个数
READY:处于健康检查正确状态的Pod的个数,Running状态的新版本我们还可以通过 kubectl rollout status deployment/nginx-deployment这条命令实时的查看Deployment对象的状态变化。应用的版本和ReplicaSet是一一对应的,这也是Kubernetes实现对多个应用版本描述的设计思想。

3.Kubernetes Deployment对应用的版本控制

1.首先通过命令直接这个Deployment的镜像修改成错误的
[root@kubernetes01 ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.99
deployment.extensions/nginx-deployment image updated2.查看Deployment的状态
[root@kubernetes01 ~]# kubectl get rs
NAME                               DESIRED   CURRENT   READY   AGE
nginx-deployment-5476c5bdd         1         1         0       12s
nginx-deployment-5c689d88bb        0         0         0       15d
nginx-deployment-5cd6d46846        0         0         0       14d
nginx-deployment-67d57d6df9        0         0         0       10d
nginx-deployment-6987cdb55b        3         3         3       46m
nginx-deployment-7f987f7889        0         0         0       10d
nginx-replicaset                   0         0         0       73m
nginx-staticwebsite-648bc64544     2         2         2       9d
nginx-staticwebsite-8479f8997f     0         0         0       9d
tomcat-deployment-001-84d957dc97   2         2         2       6d1h
tomcat-test-6cc4d85cf6             2         2         2       6d18h
可以看到nginx-deployment-5476c5bdd这个有问题的Deployment的状态。3.回退到上个版本
[root@kubernetes01 ~]# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment4.回退之后查看Deployment的状态
[root@kubernetes01 ~]# kubectl get rs
NAME                               DESIRED   CURRENT   READY   AGE
nginx-deployment-5476c5bdd         0         0         0       90s
nginx-deployment-5c689d88bb        0         0         0       15d
nginx-deployment-5cd6d46846        0         0         0       14d
nginx-deployment-67d57d6df9        0         0         0       10d
nginx-deployment-6987cdb55b        3         3         3       47m
nginx-deployment-7f987f7889        0         0         0       10d
nginx-replicaset                   0         0         0       74m
nginx-staticwebsite-648bc64544     2         2         2       9d
nginx-staticwebsite-8479f8997f     0         0         0       9d
tomcat-deployment-001-84d957dc97   2         2         2       6d1h
tomcat-test-6cc4d85cf6             2         2         2       6d18h5.查看这个Deployment的历史版本记录
[root@kubernetes01 ~]# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>
4         <none>
6         <none>
7         <none>6.查看第一个版本的信息
[root@kubernetes01 ~]# kubectl rollout history deployment/nginx-deployment --revision=1
deployment.extensions/nginx-deployment with revision #1
Pod Template:Labels:       app=nginxpod-template-hash=5c689d88bbContainers:nginx:Image:      nginx:1.7.9Port:       80/TCPHost Port:  0/TCPEnvironment:        <none>Mounts:     <none>Volumes:      <none>7.切换到第一个版本
[root@kubernetes01 ~]# kubectl rollout undo deployment/nginx-deployment --to-revision=1
deployment.extensions/nginx-deployment8.查看Deployment的状态
[root@kubernetes01 ~]# kubectl get rs
NAME                               DESIRED   CURRENT   READY   AGE
nginx-deployment-5476c5bdd         0         0         0       19m
nginx-deployment-5c689d88bb        3         3         3       15d
nginx-deployment-5cd6d46846        0         0         0       14d
nginx-deployment-67d57d6df9        0         0         0       10d
nginx-deployment-6987cdb55b        0         0         0       65m
nginx-deployment-7f987f7889        0         0         0       10d
nginx-replicaset                   0         0         0       92m
nginx-staticwebsite-648bc64544     2         2         2       9d
nginx-staticwebsite-8479f8997f     0         0         0       9d
tomcat-deployment-001-84d957dc97   2         2         2       6d1h
tomcat-test-6cc4d85cf6             2         2         2       6d18h
这块儿可以看到副本集nginx-deployment-5c689d88bb已经变成了我们期望的状态。

4.总结

Deployment是一个俩层控制器,首先通过控制ReplicaSet来控制版本,ReplicaSet则控制Pod。我们可以通过使用kubectl rollout命令控制应用的版本。
PS:文中服务器使用的是国内某☁️的机器
欢迎大家留言讨论哦,欢迎大家和我一起学习Kubernetes~~~

转载于:https://www.cnblogs.com/jason007/p/10718358.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 索引实战

mysql 索引实战 之前有个项目,已经充分用MYSQL的调优调了&#xff0c;速度感觉还可以.但发现索引没用上.于是调整之.首先,数据库中有date字段,是int类型的,入库时用php的time()入库的,现在的需求是要求1天之内的记录,我们来看具体的写法,先看原来的$query "select * from…

[html] 你对标签语义化的理解是什么?

[html] 你对标签语义化的理解是什么&#xff1f; 标签语义化的初衷是让正确的标签做正确的事情&#xff0c;但对于人来说&#xff0c;标签的语义除了在 tag 上体现&#xff0c;还可以从 id, class 上体现出来。而每个人对于标签的理解都会存在不同&#xff0c;因此强制规定哪个…

中医移动医疗_中医之极简移动医疗

来源&#xff1a;爱捣鼓网移动医疗是时尚名词。未来也必将初进医疗改革&#xff0c;其也将走进我们每一个人的生活&#xff0c;将来更是我们健康的贴身卫士和高效的个人预警机。移动医疗必将和手机融合。未来的手机不仅仅是娱乐&#xff0c;更是智慧生活的高级助手。现在&#…

编程语言

语言的分类 高级语言&#xff1a;python、Java、PHP...... ----->字节码 低级语言&#xff1a;C、汇编 ----->机器码 区别&#xff1a;高级语言有回收内存的机制&#xff0c;…

[html] 写H5和小程序有什么相同及不同的地方吗?

[html] 写H5和小程序有什么相同及不同的地方吗&#xff1f; 第一条是运行环境的不同。传统的HTML5的运行环境是浏览器&#xff0c;包括webview&#xff0c;而微信小程序的运行环境并非完整的浏览器&#xff0c;大家注意&#xff0c;我这里写的是“非完整的浏览器”&#xff0c…

javascript文字旋转效果

展开 | 隐藏 | 停止 | 旋转 | 改变旋转方向网页特效库背景特效整站模板导航特效时间特效图象特效文本特效代码&#xff1a;<html> <body> <style type"text/css"> BODY { background : #efefef; font : 12px Verdana; } A { color : #e70 } …

python的创始人、特点应用领域_python学习笔记(python发展介绍)

一、python介绍python的创始人为吉多・范罗苏姆(Guido van Rossum)目前python主要应用领域&#xff1a;・云计算・WEB开发・科学运算、人工智能・系统运维・金融&#xff1a;量化交易&#xff0c;金融分析等&#xff0c;作为动态语言的python&#xff0c;语言结构清晰简单&…

kubernetes ui 搭建

1、部署Kubernetes云计算平台&#xff0c;至少准备两台服务器&#xff0c;此处为3台 Kubernetes Master节点&#xff1a;192.168.0.111 Kubernetes Node1节点&#xff1a;192.168.0.112 Kubernetes Node2节点&#xff1a;192.168.0.113 2、每台服务器主机都运行如下命令 system…

[html] 你喜欢哪种布局风格?说说你的理由

[html] 你喜欢哪种布局风格&#xff1f;说说你的理由 flex个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...

异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值 原因&#xff1a; 如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法&#xff0c;将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。 Response.End 方法终…

[html] 移动端如何让页面强制横屏显示?

[html] 移动端如何让页面强制横屏显示&#xff1f; 说个想法 不一定能实现web端的话 通过判断页面屏幕宽度&#xff08;这个得开陀螺仪权限吧&#xff09; 然后经行div旋转个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷…

多项目加载顺序修改_React推出并发模式:可中断渲染、指定加载顺序、并行处理多状态...

警告&#xff1a;本文档介绍的实验功能在稳定版本中尚不可用。不要在生产应用程序中依赖 React 的实验性构建。这些功能可能会发生重大更改&#xff0c;而且直到功能成为 React 的一部分之前这类更改都不会发出警告。本文档面向早期使用者和对此感兴趣的用户。如果你不熟悉 Rea…

[html] 制作一个多选的下拉框

[html] 制作一个多选的下拉框 定义盒子 a标签 绑定事件个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

好东西仿Vista窗体

这是在网上看到的&#xff0c;然后改了一下&#xff01; 很好调用&#xff01;&#xff01;&#xff01;&#xff01; <SCRIPT src"_Window.js" typetext/javascript></SCRIPT> 窗体类 <SCRIPT src"index.js" typetext/javascript> /…

同步考勤数据 钉钉_作为学校,我为何选择微校wxiao考勤打卡?

随着移动互联网的兴起&#xff0c;越来越多的中小学摒弃了传统纸质考勤方式&#xff0c;采用智能考勤。目前&#xff0c;最常用的智能考勤方式可分为基于非移动端和移动端两种。其中&#xff0c;基于非移动端的包括人脸识别、指纹识别、虹膜识别考勤方式&#xff0c;基于移动端…

Guitar Por如何演奏刮弦

每当我们听到吉他现场演出的时候&#xff0c;看到吉他手在激烈的刮弦时&#xff0c;都觉得很酷&#xff0c;非常有感染力。刮弦在我们弹吉他或编曲时&#xff0c;会经常用到&#xff0c;虽然时间很短&#xff0c;但会为你加分不少。 那么我们应该如何演奏刮弦呢&#xff0c;我们…

[html] HTML全局属性(global attribute)有哪些(包含H5)?

[html] HTML全局属性(global attribute)有哪些&#xff08;包含H5&#xff09;&#xff1f; classiddatatypehrefstylewidthheighttargecheckeddisabledrequierefalttitlenamemulitp...多选valuereplaceholdersrc个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。…

3.6-3.8 分布式环境启动、测试

一、HDFS1、初始化文件系统#master上 [rootmaster hadoop-2.5.0]# pwd /opt/app/hadoop-2.5.0[rootmaster hadoop-2.5.0]# bin/hdfs namenode -format #最后几行看到successfully&#xff0c;代表成功2、启动#启动 [rootmaster hadoop-2.5.0]# sbin/start-dfs.sh集群批量命令…

unity 日志级别_【Unity】通用的Debugger日志模块

usingSystem;usingSystem.IO;namespaceUnityEngine{/// ///系统日志模块/// public classDebugger{public static bool EnableLog; //是否启用日志&#xff0c;仅可控制普通级别的日志的启用与关闭&#xff0c;LogError和LogWarn都是始终启用的。public static bool EnableTime…

[html] html的元素有哪些(包含H5)?

[html] html的元素有哪些&#xff08;包含H5&#xff09;&#xff1f; 块级元素&#xff1a;head -meat - 申明页面的诸多属性title - 窗口标题style - 样式body - 文本内容header - 头部块section - 内容块footer - 底部块article - 文章标签asidenavmenubirhr - 下划线h1-h6…