zoukankan      html  css  js  c++  java
  • controller-manager

    controller-manager
    controller-manager是这些controller的管理者,控制器有很多,如:
    replication controller
    node controller
    resourceQuota controller
    namespace controller
    serviceAccount controller
    token controller
    service controller
    endpoint controller
    deployment controller
    router controller
    volume controller
    等等,每种controller都负责一种特定资源的控制流程。

    replication controller

    rc的作用是 确保与rc关联的pod数量在任何时候都保持预设值。

    pod的重启策略是always的情况下,rc才会动态调整pod。
    pod被创建后都不会消失,只有异常情况下,比如长时间处于failed状态(超时参数由系统设定),rc会回收这个pod,并在其他节点上创建pod副本。
    rc创建完pod后,即使rc的yaml文件变更了,已创建出来的pod也不会更新,但是如果rc重新创建了pod副本,则新的pod是基于更改后的yaml创建的。
    pod只需要修改标签就可以脱离rc的管控。

    deployment controller
    随着k8s发展,旧的rc已无法满足使用需求,所以有了deployment,旧有的rc已不再升级、维护。

    deployment controller实际控制两类相关的资源对象:deployment和replicaSet。
    创建deployment之后,deployment controller会自动创建replicaSet
    deployment的滚动升级,也是deployment自动创建新的rs来实现的。

    deployment作用
    确保当前集群中有且只有N个pod实例,N是在rc中定义的pod副本数量
    通过调整spec.relicas属性的值来实现系统扩容或者缩容。
    通过改变pod模板(主要是镜像版本)来实现系统的滚动升级。

    使用场景
    重新调度。比如pod异常终止,deployment会自动回收pod并重新调度使pod达到预设值。
    弹性伸缩。手动或者自动扩容代理修改副本控制器spec.replicas属性值,实现弹性伸缩。
    滚动更新。deployment被设计成逐个替换pod来辅助服务的滚动更新。

    node controller
    通过api实时获取node状态,并尝试修改nodeStatusMap中节点状态信息。
    controller manager在启动时设置了--cluster-cidr参数,为每个没有设置Spec.PodCIDR的Node都生成一个CIDR地址,并用该CIDR地址设置节点的SpecPodCIDR属性,防止不同节点的CIDR地址冲突。
    逐个读取node信息,并将该节点的信息和nodeStatusMap中节点的状态比较;
    1)以下情况,都会使用node controller所在节点的系统时间作为探测时间和节点状态变化时间:
    1、判断没有收到kubelet发送的信息。
    2、第一次收到节点kubelet发送的信息。
    3、node controller处理过程中节点状态变成非健康状态。
    4、在指定时间内收到节点信息且状态发生变化。
    2)以下情况使用node controller所在节点的系统时间作为探测时间,将上次节点信息中的节点状态变化时间作为该节点的状态变化时间:
    1、在指定时间内收到节点信息且节点状态无变化。
    3)逐个读取节点信息,
    1、如果节点状态变为非就绪状态,则将节点加入待删除队列,否则将节点从该队列中删除。
    2、如果节点状态为非就绪状态,且系统指定了Cloud Provider,则node controller调用Cloud Provider查看节点,若发现节点故障,则删除etcd中的节点信息,并删除与该节点相关的pod等资源信息。

    resourceQuota controller
    作用:防止某些业务进程有缺陷占用过多的系统物理资源,从而导致其他的进程出现异常。
    目前k8s有三个层次的资源配额管理
    1)容器级别,对CPU、memory进行限制。
    2)pod级别,对一个pod内所有的容器进行资源限制。
    3)namespace级别,为namespace(多租户)级别的资源限制,包括:pod数量,rc数量,svc数量,resourceQuota数量,secret数量以及可持有的PV数量。

    如果pod定义中声明了limitRanger,则通过api创建或修改pod资源时,admission control会计算当前配额的使用情况,如果不符合配额或者约束,则创建对象失败。
    对于定义了resourceQuota的namespce,resourceQuota controller会定期统计和生成该namespace下各类对象的资源使用总量,统计包括pod、svc、rc、secret和pv等对象的实例个数,以及该ns下所有container实例的资源使用量,然后将这些结果写入etcd的resourceQuotaStatusStorage目录(resourceQuotas/status)下。

    namespace controller
    用户通过api 创建ns并保存在etcd中,ns controller定时通过api读取这些ns信息,如果ns被api标识为优雅删除(通过设置删除期限实现,即设置DeletionTimestamp属性),则将该ns的状态设置为Terminating并保存在etcd中。同时ns会删除其下的所有资源。

    ns被设为Terminating后,由admission controller的nsLifecycle插件来阻止为该ns创建新的资源。同时ns controller 删除该ns所有资源后,ns controller会对该ns执行finalize操作,删除ns的spec.finalizers域中的信息。
    如果ns controller观察到ns设置了删除期限,同时ns的spec.finalizers阈值是空的,那么ns controller将通过api删除该ns资源。

    service controller / endpoints controller

    endpoints controller
    endpoints表示一个service对应的所有pod副本的访问地址,endpoints controller就是负责生成和维护所有endpoints对象的的控制器。

    ep controller负责监听svc和对应pod副本变化,如果监测到svc被删除,则删除和该svc同名的endpoints对象。
    如果监听到新的svc被创建或者被修改,则根据svc信息获取相关pod列表,然后创建或更新svc对应的endpoints对象。
    如果监听到pod事件,则更新它所对应的svc的endpoints对象(增加、删除、修改对应endpoint条目)
    每个node上的kube-proxy会获取每个svc的endpoints,实现了svc的负载均衡功能。

    service controller
    service controller 是k8s集群和外部的云平台之间的一个接口管理器,监听svc的变化,来调整对应资源的创建、删除以及更新路由转发表(根据endpoints的条目)。

    原文作者:大鹏SP
    版权声明:本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请标明作者及原文链接。
  • 相关阅读:
    leetcode 29-> Divide Two Integers without using multiplication, division and mod operator
    ros topic 发布一次可能会接收不到数据
    python中的print()、str()和repr()的区别
    python 部分函数
    uiautomatorviewer错误 unable toconnect to adb
    pyqt 不规则形状窗口显示
    appium 计算器demo
    Spring 3.0 注解注入详解
    Spring Autowire自动装配
    restful 学习地址
  • 原文地址:https://www.cnblogs.com/sunpong/p/15000590.html
Copyright © 2011-2022 走看看