这里将介绍Kubernetes工作负载资源中的RC、RS
RC:ReplicationController
ReplicationController,简称RC。作为K8s中的一种资源,其可确保在任何时候都有指定数量的Pod副本处于运行状态。当Pod 数量过多时,ReplicationController会终止多余的Pod;当Pod数量太少时,ReplicationController将会启动新的Pod
创建RC
我们可以通过Yaml配置文件创建RC,如下所示
1 | apiVersion: v1 |
利用kubectl create命令创建RC资源,并可以利用下述命令查看
1 | # 查看RC资源 |
效果如下所示,可以看到该RC会根据配置文件自动创建3个Pod副本
RC创建的Pod并不是直接绑定到RC上的。RC是通过标签选择器来管理其下所属的Pod。故在RC的配置文件中,必须保证selector标签选择器与Pod模板中的标签信息相匹配,否则会导致RC无休止的创建Pod。下面我们将名为my-kubia-rc-1-2fs96的Pod的标签信息修改为app=my-foo。此时由于满足app=my-kubia标签的Pod数 少于 RC所期望的Pod副本数。故RC会再次自动创建一个Pod。如下名为my-kubia-rc-1-q9fwm的Pod所示
水平缩放
可以通过修改RC中replicas字段的值,实现动态调整Pod副本的数量。具体地,执行下述命令,打开Vim编辑器后修改spec.replicas字段值为5
1 | kubectl edit rc <RC的名称> |
效果如下所示,Pod的数量已经扩容为5个
此外,还可以通过kubectl scale命令实现对RC中replicas字段的值修改
1 | # 将指定RC期望的Pod副本数 设置为 指定值 |
效果如下所示
删除RC
当我们直接删除RC时,其相应的Pod也会全部被自动删除。事实上,kubectl会先将RC缩放为0并等待,以便在删除RC自身之前先删除全部Pod
1 | # 删除RC |
效果如下所示
如果期望只删除RC自身,而不删除相应的Pod。可在删除时使用 —cascade=orphan 选项
1 | # 只删除RC自身,而不删除相应的Pod |
效果如下所示
RS:ReplicaSet
ReplicaSet简称RS。其与RC的功能基本一致,可以将其视为对RC的升级
创建RS
我们可以通过Yaml配置文件创建RS,如下所示
1 | # API组、版本 |
效果如下所示,可以看到该RS会根据配置文件自动创建5个Pod副本
标签选择器
RS相比较于RC,主要的改进是它更具表现力的标签选择器。上文的示例我们使用了等值条件的matchLabels选择器。这里我们介绍下RS的matchExpressions标签选择器,其支持更丰富的运算符
1. Exists
1 | spec: |
2. DoesNotExist
1 | spec: |
3. In
1 | spec: |
4. NotIn
1 | spec: |
此外如果使用matchExpressions选择器指定了多个表达式时,则各表达式间的关系为and与。即所有表达式的结果都必须为true,才能使标签选择器与Pod匹配。类似地,如果同时使用matchExpressions选择器、matchLabels选择器,则二者的关系也是and与
参考文献
- Kubernetes in Action中文版 Marko Luksa著
- 深入剖析Kubernetes 张磊著