Kubernetes-ReplicationController(RC)

1 介绍

1.1 概念

  ReplicationController(副本控制器)是一种k8s资源,确保它的pod始终保持运行状态。它是用于复制和在异常情况下重新调度节点的k8s组件。

1.2 优点

1)RC可以确保一个pod(或多个pod副本)持续运行,在现有pod丢失时可以启动新的pod;
2)集群节点发生故障时,RC为其上面的pod(受RC控制的节点上的pod)创建替代副本;
3)轻松实现pod的水平伸缩。

2 RC工作原理

2.1 RC工作图

RC对pod数目处理的流程
  RC会持续监控正在运行的pod列表,并保证相应的“类型”的(标签选择器)pod数目与期望的相符。如果正在运行的pod数目小于期望值,则RC会根据pod模板创建新的副本;若正在运行的pod太多,RC将会删除多余的副本。

2.2 RC组成

RC组成部分

1)label selector(标签选择器),用于确定RC作用域中有哪些pod;(其更改后,RC会停止关注这些现有的pod)
2)replica count(副本个数),指定应运行的pod数目;(其更改后会影响到现有的pod)
3)pod template(pod模板),用于创建新的pod副本。(其更改后,只会影响新创建的pod)

3 RC使用

3.1 创建RC

写好yaml文件:

  • 版本号:apiVersion为v1
  • RC定义:kind配置为ReplicationController;
  • RC名字:metadata.name
  • pod实例数:spec.replicas
  • pod选择器:spec.selector中配置pod选择器,来决定RC的操作对象;
  • pod模板:spec.template
    RC的yaml模板

by k8s in action

创建RC命令
$ kubectl create -f xxx.yaml

RC对pod数量不足时(API Server允许客户端监听资源和资源列表的更改),产生响应:通过创建一个新的替代pod来响应pod的删除操作,

3.2 查看RC

查看RC命令
$ kubectl get rc
rc是replicationcontroller的简写;
查看RC附加信息
$ kubectl describe rc rc_name

3.3 更改已托管的pod标签

更改pod选择器
$ kubectl label pod pod_name app=app_new_name --overwrite
通过--overwrite覆盖原标签信息

查看pod指定标签信息
$ kubectl get pods -L app
通过-L app选项在列表中显示app标签

注意
若更改了RC的标签选择器(而不是更改pod的标签),则会造成所有的原RC控制的pod脱离RC管理,RC会创建新的pod来匹配新的标签选择器。

3.4 修改RC的pod模板

  更改RC的pod模板只会影响之后创建的pod,并且不会影响现有的pod。
RC扩容
方法1:
$ kubectl scale rc rc_name --replicas=5
方法2:
$ kubectl edit rc rc_name
更改spec.replicas键的值
第一种是命令式,第二种是声明式。
声明式
声明式是指定了期望的状态,相比较于命令式而言。
1)命令式是指需要step-by-step的编写命令或脚本,需要设想目标环境的各种情况,处理各种边缘问题,脚本在不同的环境里运行可能会产生不同的结果。不具备事务性,脚本执行过程中出现意外时,可能就会出现中间状态。
2)声明式是使用配置文件直接描述最终状态,不必考虑流程和目标环境的各种细节,这种方式便于文档化和版本管理,重复部署不会产生不一致的结果,在不同的目标环境下也是可以产生一致的部署结果。具备事务性,要么成功,要么失败。

3.5 删除RC

删除RC及其管理的pod
$ kubectl delete rc rc_name

删除RC,保留pod
$ kubectl delete rc rc_name --cascade=false
通过--cascade=false保证RC的pod不受管理

原文地址:https://www.cnblogs.com/Andya/p/12434497.html