Kubernetes-ReplicationController

作者: Hughman | 来源:发表于2020-01-10 14:21 被阅读0次

    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不受管理

    相关文章

      网友评论

        本文标题:Kubernetes-ReplicationController

        本文链接:https://www.haomeiwen.com/subject/spruactx.html