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伸缩相关推荐

  1. Kubernetes基础学习(一)

    Kubernetes基础学习 Kubernetes核心组件 Kubernetes核心组件如下: Kubernetes Master部分: etcd保存了整个集群的状态: apiserver提供了资源操 ...

  2. Kubernetes的学习笔记总结之k8s集群安装部署

    kubernets 集群安装部署. 安装 Docker 所有节点都需要安装 Docker. apt-get update && apt-get install docker.io 安装 ...

  3. 微软出品 Kubernetes 最新学习指南 v3.0

    概述 Kubernetes 正在席卷应用开发世界,这是一个不争的事实.预计到 2022 年,全球有超过 75% 的组织将在生产环境中运行容器化应用程序. Kubernetes 正在塑造应用程序开发和管 ...

  4. 小程序 移植 云开发_使用Kubernetes探索跨云的应用程序可移植性

    小程序 移植 云开发 本文与Lindsey Tulloch共同撰写. 在一个快速迁移到云的世界中,投资者,客户和开发人员正在屏息地注视着"云战争". 随着云巨头的崛起以及新型基础架 ...

  5. kubernetes完整学习笔记

    markdown文档笔记下载地址:https://install-data.oss-cn-hongkong.aliyuncs.com/%E7%AC%94%E8%AE%B0/kubernetes%E5% ...

  6. Kubernetes Ingress with AWS ALB Ingress Controller

    Kubernetes Ingress with AWS ALB Ingress Controller by Nishi Davidson | on 20 NOV 2018 | in Amazon El ...

  7. kubernetes 部署_用于Kubernetes部署的10种反模式

    kubernetes 部署 As container adoption and usage continues to rise, Kubernetes (K8s) has become the lea ...

  8. Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战

    kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...

  9. Kubernetes 笔记 01 初识 Kubernetes 新时代的领航者

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 大明王朝时期, ...

最新文章

  1. ChipScope Pro内核插入器
  2. C/C++中退出线程的四种解决方法
  3. Android IOS WebRTC 音视频开发总结(十一)-- stunturn部署
  4. Nginx重要结构request_t解析之http请求的获取
  5. Swift基础之方法实战
  6. 【翻译】Go 1.1 交叉编译
  7. Shiro Spring 集成xml配置
  8. lambda表达式的语法精简
  9. BZOJ2563 阿狸和桃子的游戏
  10. Leetcode之最长回文子串
  11. LINUX下载编译libssh2
  12. appuim+python自动化测试计算器实例
  13. oracle密码过期修改
  14. python去掉左边的空格_Python去除字符串左边空格
  15. 计算机蓝屏代码0x0000007b,win7系统开机蓝屏提示STOP:0X0000007B错误代码怎么办
  16. 标准盒模型和怪异盒模型的区别
  17. 苹果ID申请开发者 双重认证问题?
  18. Redux:优点和缺点
  19. 解密秒杀系统架构:不是所有的秒杀都是秒杀
  20. 算法设计与分析: 4-3 磁带最优存储问题

热门文章

  1. C++基础知识(三)—— 常量
  2. Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇
  3. C++类模板的三种特化类型
  4. [Linux C]递归遍历指定目录下的子目录和文件
  5. 父盒子高度为子盒子总高度自动撑满 height: fit-content; //设置内容高度
  6. 2016我的程序员总结
  7. [react-router] React-Router的<Link>标签和<a>标签有什么区别
  8. 前端学习(2931):vue里面的虚拟dom和算法
  9. [html] 在HTML5中,用于获得用户的当前位置是哪个方法?
  10. [vue] vue组件里的定时器要怎么销毁?