• k8s controller


     

    Controller是什么

    也就是「控制器」,控制Kubernetes的资源实体。怎么控制呢?通过监听资源变化事件。这个事件可能是用户发起的(他希望把资源从A状态更新到B状态),Controller就会获取这个事件并处理事件,即更新目标资源。Kubernetes默认有很多控制器,他们控制着Kubernetes默认资源,如Pod、Deployment、Service等,他们都包含在Controller Manager中。但如果你的资源是个CRD,因为没有对应的控制器,你就得为它自己写Controller了。

    controller  整体工作流程

     

    (1) 创建一个控制器

     

    • 为控制器创建 workqueue

    • 创建 informer, 为 informer 添加 callback 函数,创建 lister

     

    (2) 启动控制器

     

    • 启动 informer

    • 等待本地 cache sync 完成后, 启动 workers

     

    (3) 当收到变更事件后,执行 callback

     

    • 等待事件触发

    • 从事件中获取变更的 Object

    • 做一些必要的检查

    • 生成 object key,一般是 namespace/name 的形式

    • 将 key 放入 workqueue 中

     

    (4) worker loop

     

    • 等待从 workqueue 中获取到 item,一般为 object key

    • object key 通过 lister 从本地 cache 中获取到真正的 object 对象

    • 做一些检查

    • 执行真正的业务逻辑

    • 处理下一个 item

    在编写Controller之前需要了解client-go中的informer机制:

    informer

      

  • 相关阅读:
    前端
    前端
    数据库
    代码块
    装饰器
    函数 初识函数
    相识python --------文件操作
    相识python --------str字符串 int整形 bool布尔值 tu元祖 set()集合 dict 字典的数据补充
    【openstack报错】【因更新包而致】IncompatibleObjectVersion: Version 1.9 of Instance is not supported
    开博第一篇
  • 原文地址:https://www.cnblogs.com/dream397/p/14769107.html
Copyright © 2020-2023  润新知