一、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. php composer 开发自己的包

    以往都是在项目直接写自己的包文件,并没有把他放在packagist上面,以composer来管理使用. 今天没事来整一下,供大家一起学习 一,在github和packagist分别注册自己的账号,这里 ...

  2. matlab多图排列

    代码如下: clear; img = imread('C:\\Users\\admin\\Desktop\\original_img3\\testimg\\messi.jpg'); subplot(2 ...

  3. Java传统IO流和NIO流的简单对比介绍

    通过对文件的拷贝来对比传统IO流和NIO流 将底层流封装成处理流以后进行分段读取. /*将本身源代码拷贝到TXT文件*/ public class TraditionIO { public stati ...

  4. 【VS开发】static、extern分析总结

    引用请注明出处:http://blog.csdn.net/int64ago/article/details/7396325 对于写了很多小程序的人,可能static和extern都用的很少,因为sta ...

  5. Centos 安装k8s 集群(单master开发环境)

    本教程是在VM中搭建K8s 所以第一步骤先配置虚拟机的ip 和上网情况详细参考https://www.cnblogs.com/chongyao/p/9209527.html 开始搭建K8s集群 两台机 ...

  6. elasticsearch 查询所有文档

    0.添加一个索引 curl -i -XPUT http://172.31.250.16:10004/test_index/user/1 -d '{ "name": "小明 ...

  7. String和ByteBuffer互转

    String 转换 ByteBuffer: public static ByteBuffer getByteBuffer(String str) { return ByteBuffer.wrap(st ...

  8. 【数据库】Redis/MongoDB/MySQL/Oracle随笔索引

    数据库体系 [思维导图]数据库体系 密码: a8ni Redis JPA

  9. dual Oracle兼容

    CREATE OR REPLACE VIEW dual ASSELECT NULL::"unknown"WHERE 1 = 1;

  10. # 模乘(解决乘法取模爆long long)

    模乘(解决乘法取模爆long long) 二进制思想,变乘法为多次加法,具体思想跟着代码手算一遍就理解了,挺简单的 ll qmul(ll a,ll b,ll m) { ll ans=0; while( ...