一、ReplicaSet概述

简称RS,是pod控制器类型的一种实现,用于确保由其管控的pod对象副本数在任一时刻都能精确满足期望的数量。ReplicaSet控制器资源启动后会查找集群中匹配其标签选择器的pod资源对象,当前活动对象的数量与其期望的数量不吻合时,多则删除,少则通过pod模板创建以补足,等pod资源副本数量符合期望值后即进入下一轮和解循环。

RS的副本数量、标签选择器甚至是pod模板都可以随时按需进行修改,不过仅改动期望的副本数量会对现存的pod副本产生直接影响。修改标签选择器可能会使得现有的pod副本的标签变得不在匹配,此时rs控制器要做的不过是不再计入它们而已。另外,在创建完成后,rs也不再关注pod对象中的实际内容,因此pod模板的改动也只会对后来新建的pod副本产生影响。相比较于手动创建和管理pod资源来说,rs能够实现以下功能:

1、确保pod资源对象的数量反映期望值:rs需要确保由其控制运行的pod副本数量精确吻合配置中定义的期望值,否则就会自动补足所缺或终止所余。

2、确保pod监控运行:探测到由其管控的pod对象因其所在的工作节点故障而不可用时,自动请求由调度器于其他工作节点创建缺失的pod副本。

3、弹性伸缩:业务规模因各种原因经常存在明显波动,在波峰或波谷期间,可以通过rs控制器动态调整相关pod资源对象数量。此外,在必要时还可以通过hpa(HroizontalPodAutoscaler)控制器实现pod资源规模的自动伸缩。

二、创建RS

类似于pod资源,创建rs控制器对象同样可以使用yaml或json格式的清单文件定义其配置,而后使用相关的创建命令来完成资源创建。

replicas:期望的pod对象副本数

selector:当前控制器匹配pod对象副本的标签选择器,支持matchLabels和matchExpressions两种匹配机制。

template:用于补足pod副本数量时使用的pod模板资源。

minReadySeconds:新建的pod对象,在启动后的多长时间内如果其容器未发生崩溃等异常情况即被视为就绪;默认0s,表示一旦就绪性探测成功,即被视作可用。

三、RS管控下的pod对象

实际中存在着不少可能导致pod对象数目与期望值不符合的可能性,如pod对象的意外删除、pod对象标签的变动、控制器的标签选择器变动、甚至是工作节点故障等。rs控制器的和解循环过程能够实时监控到这些异常,并及时启动和解操作。

1、缺少pod副本

任何原因导致的相关pod对象丢失,都会由rs控制器自动补足。另外,强行修改隶属于控制器的某pod资源的标签,会导致它不再被控制器作为副本计数,这也将触发控制器的pod对象副本缺失补足机制。修改后的标签如果又能被其他控制器资源的标签选择器所命中,则此时它又成了隶属于另一控制器的副本。如果修改后的pod对象不再隶属于任何控制器,那么它将成为自主式pod。

2、多出pod副本

一旦被标签选择器匹配到的pod资源数量因任何原因超出期望值,多余的部分都将被控制器自动删除。这就意味着,任何自助式的活本隶属于其他控制器的pod资源,其标签变动的结果一旦匹配到了其他的副本数足额的控制器,就会导致这类pod资源被删除。

3、查看pod资源变动的相关事件

使用kubectl describe replicasets命令可以打印出rs控制器的详细状态。事实上,rs控制器能对pod对象数目的异常及时做出响应,是因为它向api server注册监控了相关资源及其列表的变动信息,于是api server会在变动发生时立即通知给相关的监控客户端。因而节点自身故障而导致的pod对象丢失,rs控制器一样会使用补足资源的方式进行处理。

四、更新rs控制器

rs控制器的核心组成部分是标签选择器、副本数量及pod模板,但更新操作一般是围绕raplicas和template两个字段值进行的,改动pod模板的定义对已经创建完成的活动对象无效,但在用户逐个关闭其旧版本的pod资源后就能以新代旧,实现控制器下应用版本的滚动升级。另外,修改副本数量也就意味着应用规模的扩展或收缩。

1、更改pod模板

rs控制器的pod模板可随时按需修改,但它仅影响这之后由其新建的pod对象,对已有的副本不会产生作用。对新版本的清单文件执行kubectl apply或kubectl replace命令即可完成控制器资源的修改操作。不过控制器管控的现存pod对象仍未改变。此时,手动删除控制器现有的pod对象,并由控制器基于新的pod模板自动创建出足额的pod副本即可完成一次应用的升级。实际使用时,还需要更完善的机制,即便是仅执行了一到多次删除操作,手动执行更替操作也并非一项轻松任务。更高级别的pod控制器deployment能够实现更完善的滚动更新和回滚,并为用户提供自定义更新策略的接口。而且,还可以实现蓝绿部署、金丝雀部署和灰度部署等。

2、扩容和缩容

改动rs对象配置中期望的pod副本数量会由控制器实时做出响应,从而实现应用规模的水平伸缩。replicas的修改及应用方式同pod模板,不过,kubectl还提供了一个专用的子命令scale用于实现应用规模的伸缩,它支持从清单文件中获取新的目标副本数量,也可以直接在命令行通过“--replicas”选项进行读取。

五、删除rs控制器资源

使用kubectl delete命令删除rs对象时默认会一并删除其管控的各pod对象。又是,考虑到这些pod资源未必由其创建,或者即使由其创建却也并非其自身的组成部分。故而使用“--cascade=false”选项,取消级联删除相关的pod对象。尽管rs控制器功能强大,但在实践中,它却并非时用户直接使用的控制器,而是deployment。

k8sReplicaSet控制器的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. ABP文档 - Mvc 控制器

    文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...

  3. 关于VS2015 ASP.NET MVC添加控制器的时候报错

    调试环境:VS2015 数据库Mysql  WIN10 在调试过程中出现类似下两图的同学们,注意啦. 其实也是在学习的过程中遇到这个问题的,找了很多资料都没有正面的解决添加控制器的时候报错的问题,还是 ...

  4. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  5. ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑

    原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...

  6. ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器

    原文: Dependency Injection and Controllers 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core MVC 控制器应通过 ...

  7. AngularJS 第四天----控制器

    控制器的作用 今天和大家学习AngularJS中控制器方面的知识,本文会给出一些例子来说明如何使用AngularJS的控制器.在开始我们的例子之前,首先说说AngularJS控制器的作用.简单的来说A ...

  8. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  9. ASP.NET Web API 控制器创建过程(二)

    ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...

随机推荐

  1. python高级 之(二) --- 类装饰器

    装饰器-初级 在不改变原有函数逻辑功能的基础上,为函数添加新的逻辑功能.使代码可读性更高.结构更加清晰.冗余度更低 简介 """ 闭包: 函数嵌套的格式就是闭包.写装饰器 ...

  2. PI膜应变片试样制备

    一.选取基板 1.喷涂在玻璃基板上PI膜 2.正面用记号笔标记PI膜工艺参数——转速.厚度 3.玻璃板背面为PI膜 二.贴防护膜 1.事先画好二维图,以dxf格式存放 2.裁减合适的大小,并将其贴在打 ...

  3. 【Qt开发】QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent

    建了一个对话框,我不想把边框去掉,只想去掉关闭按钮, setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::Wind ...

  4. 网站性能优化(website performance optimization)

    提高代码运行速度,或许我们从来没有优化这些页面来提高速度 想要开发优秀的网站,你必须了解你的用户,知道他们想要达到什么目的,同时还要明白浏览器的工作原理,从而能够打造快速良好的体验,我最近在PageS ...

  5. 用IDEA开发Spring程序

    操作步骤 https://www.cnblogs.com/zyx110/p/11023218.html

  6. 【Spring 源码】ApplicationContext源码

    ApplicationConetxt体系

  7. Redhat更换Centos源

    redhat默认自带的yum源需要注册,才能更新,报错: This system is not registered to Red Hat Subscription Management. You c ...

  8. [转帖]微软 SQL Server 2008/R2 停止支持

    微软 SQL Server 2008/R2 停止支持 微软停止支持 SQLSERVER 2008R2 https://t.cj.sina.com.cn/articles/view/3172142827 ...

  9. CSP-J 2019 T3 纪念品

    \(\mathfrak{a}\).反思: 通过这道题成功发现自己的背包还是很差\(w\): 可能这是我\(gu\)了好久好久博客的报应叭 就在做这个题的时候,自己连背包\(dp\)的思想都忘了 背包可 ...

  10. codeforces 842C Ilya And The Tree (01背包+dfs)

    (点击此处查看原题) 题目分析 题意:在一个树中,有n个结点,记为 1~n ,其中根结点编号为1,每个结点都有一个值val[i],问从根结点到各个结点的路径中所有结点的值的gcd(最大公约数)最大是多 ...