k8s学习 - 概念 - ReplicationController

我们有了 pod,那么就需要对 pod 进行控制,就是同一个服务的 podv我需要启动几个?如果需要扩容了,怎么办?这里就有个控制器,ReplicationController(简称rc)。

不过我们看官网:

这里告诉我们,ReplicationController 现在已经过时了,现在建议使用 Deployment 配合ReplicaSet。ReplicationController的主要功能是保证Pod的数量、健康,弹性收缩等。但是Deployment除了有这些功能之外,还增加了回滚功能(当升级 pod 镜像或者相关参数的时候,如果有错误,可以回滚到上一个稳定版本),版本记录(每一次对 Deployment 的操作都能保存下来)。暂停和启动(升级的时候,能随时暂停和启动)。

估计不久的将来,ReplicationController 就不会有人用了。不过我们还是基本了解下 ReplicationController 的一些配置。

下面是官方的一份ReplicationController的配置文件:

apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

其中spec.template是spec中必须填写的,它就是一个pod的配置。pod的配置全集在上一篇我们看到了。

其中.spec.replicas表示这个pod需要维持几份。如果没有配置的话,它就是为1。比如上面那个例子,就保持3份nginx服务。

标签选择器

其中的selector我们这里可以好好研究下,这个是我们第一次见到。

标签选择器在很多概念都是会使用到的,比如pod在哪个node上,ReplicationController作用在哪个pod上,service作用在哪个pod上,等等。tag标注的系统化也是k8s应用集群必要的设计之一。

标签选择器理解起来倒是很简单,就是一堆的key:value。比如我可以给pod设置3个label:

metadata:
labels:
key1: value1,
key2: value2,
key3: value3

key1=value1, key2=value2, key3=value3。

然后在ReplicationController的selector里面,有两种写法,一种是简单写法,一种高级写法。(好像网上没有这种说法,但是我理解就是这样的)

简单写法:

selector:
key1: value1

代表这个ReplicationController选择labels有key1标签,且标签值为value1的pod进行控制。

高级写法:(这个高级写法里面的matchExpressions其实ReplicationController是不支持的,ReplicaSet才开始支持。不知道后续会不会支持个正则匹配)

selector:
matchLabels:
key1: value1
matchExpressions:
- {key: key2, operator: In, values: [value2, value4]}

代表这个ReplicationController选择labels有标签和标签值,key1:value1,且key2在value2和value4集合中的pod进行控制。

我们可以在查看资源的时候带上--show-labels来获取labels,比如:

kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
busybox 1/1 Running 26 3d <none>
busybox1 1/1 Running 26 3d name=busybox
busybox2 1/1 Running 26 3d name=busybox
frontend-5c548f4769-l9cts 1/1 Running 0 1h app=guestbook,pod-template-hash=1710490325,tier=frontend
frontend-5c548f4769-nnp2b 1/1 Running 0 1h app=guestbook,pod-template-hash=1710490325,tier=frontend
frontend-5c548f4769-zjwwm 1/1 Running 0 1h app=guestbook,pod-template-hash=1710490325,tier=frontend
redis-master-55db5f7567-929np 1/1 Running 0 1h app=redis,pod-template-hash=1186193123,role=master,tier=backend
redis-slave-584c66c5b5-dsbcc 1/1 Running 0 1h app=redis,pod-template-hash=1407227161,role=slave,tier=backend
redis-slave-584c66c5b5-kfhnq 1/1 Running 0 1h app=redis,pod-template-hash=1407227161,role=slave,tier=backend
task-pv-pod 1/1 Running 0 1d <none>

虽然官网有推荐了一些labels

"release" : "stable", "release" : "canary"
"environment" : "dev", "environment" : "qa", "environment" : "production"
"tier" : "frontend", "tier" : "backend", "tier" : "cache"
"partition" : "customerA", "partition" : "customerB"
"track" : "daily", "track" : "weekly"

但是我感觉大家写集群的时候也并没有按照这些建议的labels。基本上一个集群有自己的一套设计。

总结

最后在总结下,ReplicationController这个已经是被淘汰的了,连k8s官网的demo已经都切换到deployment+replicaset了,所以遇到有用ReplicationController的书和文章,可以弃读了。

-- 当前日期:2019年7月9日

k8s学习 - 概念 - ReplicationController的更多相关文章

  1. k8s学习 - 概念 - ReplicaSet

    k8s学习 - 概念 - ReplicaSet 首先,ReplicaSet 和 ReplicationController 基本上一样,除了上篇说到的selector有不同之外,没有啥区别.(官网也是 ...

  2. k8s学习 - 概念 - master/node

    k8s学习 - 概念 - master/node 在k8s中,有各种各样的概念和术语.这些概念是必须要学习和掌握的.我们先罗列下所有概念,然后再一个个看具体实例. 大概说一下这些概念: Master: ...

  3. k8s学习 - 概念 - Pod

    k8s学习 - 概念 - Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位. 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe ...

  4. k8s学习 - 概念 - Deployment

    k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管 ...

  5. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  6. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  7. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  8. .NET Core on K8S学习实践系列文章索引(Draft版)

    一.关于这个系列 自从去年(2018年)底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发 ...

  9. k8s记录-k8s基本概念和术语

    每次个节点上当然都要运行Docker.Docker来负责所有具体的映像下载和容器运行. Kubernetes主要由以下几个核心组件组成: etcd保存了整个集群的状态: apiserver提供了资源操 ...

随机推荐

  1. .net core api 跨域

    什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: h ...

  2. Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化

    原文:Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化  [函数名称] Wallis图象锐化        WallisSharpen(WriteableBitmap sr ...

  3. SQL Server 2016新特性:DROP IF EXISTS

    原文:SQL Server 2016新特性:DROP IF EXISTS  在我们写T-SQL要删除某个对象(表.存储过程等)时,一般会习惯先用IF语句判断该对象是否存在,然后DROP,比如: 旧 ...

  4. DevExpress的xtraMessageBox汉化

    原文:DevExpress的xtraMessageBox汉化 项目使用的界面库是DevExpress 相当好用,不过里面弹出对话框XtraMessageBox的按钮都是英文的, 可能会对用户造成困扰, ...

  5. 什么是 MEF?

    什么是 MEF? Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用程序的库. 它让应用程序开发人员得以发现和使用扩展且无需配置. 它还让扩展开发人 ...

  6. LINQ查询表达式---------select子句

    LINQ查询表达式---------select子句 1.1常见的select子句查询 class Program { public class PerInfo { public int Id { g ...

  7. 读unp并动手实践

    经过三个月的学习,我发现进度比较慢.照这个进度下去,平均一周花费5-6小时,还不知道读完全书需要多久. 现在做个计划,全书除开简介部分分为 基础 和 高级 套接字编程两部分,其中 基础可以分为 TCP ...

  8. 微信小程序把玩(二十九)video组件

    原文:微信小程序把玩(二十九)video组件 视频播放组件与图片加载组件也没啥差别,使用起来也没啥注意的 重要属性: wxml <!--监听button点击事件--> <button ...

  9. 微信小程序把玩(二十五)loading组件

    原文:微信小程序把玩(二十五)loading组件 loading通常使用在请求网络数据时的一种方式,通过hidden属性设置显示与否 主要属性: wxml <!----> <butt ...

  10. ORA-09925: Unable to create audit trail file

    当我修改ORACLE_SID为新的SID,想进行数据库还原时,用sqlplus报如下错误 [oracle@dbtest ~]$ sqlplus / as sysdba SQL Production : ...