zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/dream397/p/14769107.html
Copyright © 2011-2022 走看看