- 本文是 Kubernetes operator学习 系列的前置知识篇,帮助大家对 Operator 进行初步了解
- Kubernetes operator学习系列 快捷链接
- Kubernetes operator 前置知识篇
- Kubernetes operator(一)client-go篇
- Kubernetes operator(二)CRD篇
- Kubernetes operator(三)code-generator 篇
- Kubernetes operator(四)controller-tools 篇
- Kubernetes operator(五)api 和 apimachinery 篇
- Kubernetes operator(六)CRD控制器 开发实战篇
- Kubernetes operator(七) kubebuilder 的安装及简单使用 篇
- Kubernetes operator(八) controller-runtime 篇
1.Operator模式学习
1.1.Operator是什么
- Operator 是 遵循 Kubernetes 的设计理念的一种扩展模式,它强调利用 定制 CR资源 去管理应用及其组件。
- Operator 通过 将 应用程序的运维知识 转化为 可编程的代码,使我们能够定义和管理应用程序的整个生命周期,包括安装、配置、扩展、监控和升级等方面,进而以自动化的方式管理和运维复杂的应用程序。
- 一个Operator,主要包括两部分:自定义资源(Custom Resource) 和 控制器(Controller)
- Operator核心原理是 声明式配置 和 状态驱动。您可以定义自定义资源的规范(Spec)和状态(Status),Operator会根据这些定义来自动化地管理应用程序。它可以监测资源的变化,识别和处理故障,以及根据配置和策略自动扩展应用程序。
1.2.开发一个Kubernetes Operator的步骤
- 定义自定义资源
- 使用Kubernetes的自定义资源定义语言(CRD),定义一个自定义资源来描述您的应用程序。
- 除了必备的TypeMeta、ObjectMeta,CRD中还应包含 资源规范Spec 和 资源状态Status 字段。
- 创建Operator
- 编写一个自定义的控制器(Controller),用于监控和处理您定义的CR。
- 当用户创建或修改CR时,Controller 能够 获取到用户修改后的CR,并根据CR中Metadata、Spec等字段的变化,执行必要的操作,处理完后还要将CR的状态信息写入Status字段中,供用户查看。
- 部署Operator
- 部署Operator包括两部分:安装CRD,部署Controller
- 安装CRD:将CRD应用到集群中,使kubernetes集群能够识别到该资源
- 部署Controller:Controller 通常会在control plane之外运行,就像运行任何容器化的应用程序一样。例如,将controller打包成镜像,以 Deployment 运行。
- 创建和管理自定义资源实例
- 使用 kubectl 或 编写yaml 创建CR的实例
- 使用 kubectl 或 其他kubernetes客户端工具 管理CR
1.3.Operator开发 与语言无关
- 你可以使用任何语言、任何运行时,开发Operator,只要能够作为kubernetes的客户端就行
- 下面列举一些 库/框架,可以用于开发Operator
- Charmed Operator Framework
- Java Operator SDK
- Kopf (Kubernetes Operator Pythonic Framework)
- kube-rs (Rust)
- kubebuilder
- KubeOps (.NET operator SDK)
- KUDO (Kubernetes Universal Declarative Operator)
- Mast
- Metacontroller along with WebHooks that you implement yourself
- Operator Framework
- shell-operator
1.4.Operator的后续学习路线
- 阅读 CNCF Operator White Paper(Operator 白皮书).
- 深入学习 Custom Resources
- 在 OperatorHub.io 上查找已有的 Operator 练习
- 发布你的Operator 给其他人使用
- 阅读 CoreOS 介绍 Operator 模式的 原始文章 (这是原始文章的存档版本)
- 阅读 Google Cloud 上关于 构建 Operator 的 最佳实践的文章