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.总结
PS:文中服务器使用的是国内某☁️的机器
欢迎大家留言讨论哦,欢迎大家和我一起学习Kubernetes~~~
转载于:https://www.cnblogs.com/jason007/p/10718358.html
Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩相关推荐
- Kubernetes基础学习(一)
Kubernetes基础学习 Kubernetes核心组件 Kubernetes核心组件如下: Kubernetes Master部分: etcd保存了整个集群的状态: apiserver提供了资源操 ...
- Kubernetes的学习笔记总结之k8s集群安装部署
kubernets 集群安装部署. 安装 Docker 所有节点都需要安装 Docker. apt-get update && apt-get install docker.io 安装 ...
- 微软出品 Kubernetes 最新学习指南 v3.0
概述 Kubernetes 正在席卷应用开发世界,这是一个不争的事实.预计到 2022 年,全球有超过 75% 的组织将在生产环境中运行容器化应用程序. Kubernetes 正在塑造应用程序开发和管 ...
- 小程序 移植 云开发_使用Kubernetes探索跨云的应用程序可移植性
小程序 移植 云开发 本文与Lindsey Tulloch共同撰写. 在一个快速迁移到云的世界中,投资者,客户和开发人员正在屏息地注视着"云战争". 随着云巨头的崛起以及新型基础架 ...
- kubernetes完整学习笔记
markdown文档笔记下载地址:https://install-data.oss-cn-hongkong.aliyuncs.com/%E7%AC%94%E8%AE%B0/kubernetes%E5% ...
- Kubernetes Ingress with AWS ALB Ingress Controller
Kubernetes Ingress with AWS ALB Ingress Controller by Nishi Davidson | on 20 NOV 2018 | in Amazon El ...
- kubernetes 部署_用于Kubernetes部署的10种反模式
kubernetes 部署 As container adoption and usage continues to rise, Kubernetes (K8s) has become the lea ...
- Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战
kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...
- Kubernetes 笔记 01 初识 Kubernetes 新时代的领航者
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 大明王朝时期, ...
最新文章
- ChipScope Pro内核插入器
- C/C++中退出线程的四种解决方法
- Android IOS WebRTC 音视频开发总结(十一)-- stunturn部署
- Nginx重要结构request_t解析之http请求的获取
- Swift基础之方法实战
- 【翻译】Go 1.1 交叉编译
- Shiro Spring 集成xml配置
- lambda表达式的语法精简
- BZOJ2563 阿狸和桃子的游戏
- Leetcode之最长回文子串
- LINUX下载编译libssh2
- appuim+python自动化测试计算器实例
- oracle密码过期修改
- python去掉左边的空格_Python去除字符串左边空格
- 计算机蓝屏代码0x0000007b,win7系统开机蓝屏提示STOP:0X0000007B错误代码怎么办
- 标准盒模型和怪异盒模型的区别
- 苹果ID申请开发者 双重认证问题?
- Redux:优点和缺点
- 解密秒杀系统架构:不是所有的秒杀都是秒杀
- 算法设计与分析: 4-3 磁带最优存储问题
热门文章
- C++基础知识(三)—— 常量
- Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇
- C++类模板的三种特化类型
- [Linux C]递归遍历指定目录下的子目录和文件
- 父盒子高度为子盒子总高度自动撑满 height: fit-content; //设置内容高度
- 2016我的程序员总结
- [react-router] React-Router的<Link>标签和<a>标签有什么区别
- 前端学习(2931):vue里面的虚拟dom和算法
- [html] 在HTML5中,用于获得用户的当前位置是哪个方法?
- [vue] vue组件里的定时器要怎么销毁?