天天看点

使用k8s operator发布复杂的软件系统

作者:SuperOps
使用k8s operator发布复杂的软件系统

软件部署形态越来越复杂

随着微服务的普及和软件架构的拆解,组件和组件的关联关系,配置依赖,启动顺序控制,发布策略,缓存策略,路由策略,流量策略越来越定制化和复杂化,然而这些复杂度经过云原生改造后到一股脑从业务端或者中间件端抛到了op端。

使用k8s operator发布复杂的软件系统

在云原生领域我们使用operator来治理复杂组件

使用k8s operator发布复杂的软件系统

本文推荐基于kubebuilder做operator的开发

kubebuilder基础

Kubebuilder 是一个使用 CRDs 构建 K8s API 的 SDK,主要是:

  • 提供脚手架工具初始化 CRDs 工程,自动生成 boilerplate 代码和配置;
  • 提供代码库封装底层的 K8s go-client;
  • 方便用户从零开始开发 CRDs,Controllers 和 Admission Webhooks 来扩展 K8s。

自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubernetes 高级玩家的必备技能,本文将介绍 CRD 和 Controller 的概念,并对 CRD 编写框架 Kubebuilder 进行深入分析,让您真正理解并能快速开发 CRD。

  • kubebuilder核心架构
使用k8s operator发布复杂的软件系统
  • 工作队列: controller 的核心组件。它会监控集群内的资源变化,并把相关的对象,包括它的动作与 key,例如 Pod 的一个 Create 动作,作为一个事件存储于该队列中;
  • controller :它会循环地处理上述工作队列,按照各自的逻辑把集群状态向预期状态推动。不同的 controller 处理的类型不同,比如 replicaset controller 关注的是副本数,会处理一些 Pod 相关的事件;
  • operator: operator 是描述、部署和管理 kubernetes 应用的一套机制,从实现上来说,可以将其理解为 CRD 配合可选的 webhook 与 controller 来实现用户业务逻辑,即 operator = CRD + webhook + controller。

kubebuilder的核心函数reconcile

使用k8s operator发布复杂的软件系统
  • 负责运行所有的 Controllers;
  • 初始化共享 caches,包含 listAndWatch 功能;
  • 初始化 clients 用于与 Api Server 通信。
  • kubebuilder的本质是简化controller的开发
使用k8s operator发布复杂的软件系统

本质的执行流程

下一篇预告:基于kubebuilder构建一个完整的operator实例

  • 会包含kubebuilder的工具介绍
  • kubebuilder的使用
  • kubebuilder的项目结构介绍
  • kubebuilder的开发流程