带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.1(四)

2.1.2          什么是 Controller

 

从字面意义来说,Controller就是控制器,它是控制 Kubernetes的资源实体。如何控制呢?它通过监听 Kubernetes 资源变化事件来实现,这个事件可能是用户发起的,例如,用户希望把资源从 A状态更新到 B状态,Controller就会捕获这个事件并且响应这个事件, 即更新目标资源。Kubernetes默认内置了很多控制器, 例如 PodController、NamespacesController、ServiceController,它们控制着 Kubernetes 默认资源,如 Pod、Deployment、Service等,它们都包含在组件 ControllerManager中。但如果你的资源是 CRD,因为没有对应默认的控制器,你必须为它编写自己的 Controller逻辑。我们将这种实现自定义资源逻辑的控制器叫作Controller。那么 Controller 是如何完成事件监听的,具体逻辑参考图2-3。

带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.1(四)


图 2—3Controiier 处理逻辑图

 

Controller主要使用 Informer和 Workqueue两个核心组件。Controller可以有一个或多个 Informer来跟踪某一个 Resource。Informter与APIServer保持通信获取资源的最新状态并更新到本地的Cache中,一旦跟踪的资源有变化,Informer就会调用Callback。把变更的 Object放到 Workqueue中。然后Woker执行真正的业务逻辑,计算和比较Workerqueue中 items的当前状态和期望状态的差别,然后通过Client-go向APIServer 发送请求,直到驱动这个集群向用户要求的状态演化。我们将在下面的章节逐步介绍核心代码分析。

上一篇:带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(二)


下一篇:带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(一)