当前位置: 首页 > news >正文

K8s系列之:K8s OPERATOR是什么

K8s系列之:K8s OPERATOR是什么

  • 一、K8s OPERATOR是什么
  • 二、Operator 如何管理 Kubernetes 应用
  • 三、Operator 框架
  • 四、Operator 模式
  • 五、Kubernetes 上的 Operator
  • 六、Operator 示例
  • 七、部署 Operator
  • 八、使用 Operator
  • 九、编写你自己的 Operator
  • 十、java-operator-sdk
  • 十一、使用 JOSDK 的项目

一、K8s OPERATOR是什么

  • Kubernetes Operator 是一种封装、部署和管理 Kubernetes 应用的方法。我们使用 Kubernetes API(应用编程接口)和 kubectl 工具在 Kubernetes 上部署并管理 Kubernetes 应用。
  • Kubernetes Operator 是一种特定于应用的控制器,可扩展 Kubernetes API 的功能,来代表 Kubernetes 用户创建、配置和管理复杂应用的实例。
  • 它基于基本 Kubernetes 资源和控制器概念构建,但又涵盖了特定于域或应用的知识,用于实现其所管理软件的整个生命周期的自动化。
  • 在 Kubernetes 中,控制平面的控制器实施控制循环,反复比较集群的理想状态和实际状态。如果集群的实际状态与理想状态不符,控制器将采取措施解决此问题。
  • Operator 是使用自定义资源(CR)管理应用及其组件的自定义 Kubernetes 控制器。高级配置和设置由用户在 CR 中提供。Kubernetes Operator 基于嵌入在 Operator 逻辑中的最佳实践将高级指令转换为低级操作。
  • 自定义资源是 Kubernetes 中的 API 扩展机制。自定义资源定义(CRD)会明确 CR 并列出 Operator 用户可用的所有配置。
  • Kubernetes Operator 监视 CR 类型并采取特定于应用的操作,确保当前状态与该资源的理想状态相符。
  • Kubernetes Operator 通过自定义资源定义引入新的对象类型。Kubernetes API 可以像处理内置对象一样处理自定义资源定义,包括通过 kubectl 交互以及包含在基于角色的访问权限控制(RBAC)策略中。
  • Kubernetes Operator 会持续监控正在运行的应用,可备份数据,从故障中恢复,以及随着时间的推移自动升级应用。
  • Kubernetes Operator 几乎可执行任何操作:扩展复杂的应用,应用版本升级,甚至使用专用硬件管理计算集群中节点的内核模块。
  • 详细了解 Kubernetes Operator 的工作原理(包括实例),以及如何使用 Operator 框架和软件开发套件构建 Operator。

二、Operator 如何管理 Kubernetes 应用

  • Kubernetes 可管理和扩展无状态应用,如 Web 应用、移动后端和 API 服务,无需掌握关于这些应用的工作原理的任何其他知识。Kubernetes 的内置功能旨在轻松处理这些任务。
  • 但是,数据库和监控系统等无状态应用需要 Kubernetes 以外的其他域特定知识。有了这些知识,才能够扩展、升级和重新配置这些应用。
  • Kubernetes Operator 将这些特定域知识编码了到 Kubernetes 扩展中,从而能够实现应用生命周期的管理和自动化。
  • 通过消除麻烦的手动应用管理任务,Kubernetes Operator 使这些流程可扩展、可重复且标准化。
  • 对于应用开发人员,Operator 使得部署和运行其应用所依赖的基础服务变得更简单。
  • 对于基础架构工程师和供应商,Operator 提供了在 Kubernetes 集群上分发软件的一致方式,并通过识别和纠正应用问题降低了支持成本。
  • 除了 Kubernetes 中提供的基本自动化功能之外,Operator 还允许您编写代码来实现任务自动化。对于采用 DevOps 或站点可靠性工程(SRE)方法的团队,开发了将 SRE 实践应用到 Kubernetes 的 Operator。
  • Operator 模式能够捕捉运维人员如何管理服务的规律。运维人员需要全面了解应用或服务的工作原理、部署方式以及如何解决可能发生的问题。
  • 站点可靠性工程师或运维团队通常编写软件来管理应用,但 Operator 可以获取人类运维知识并将其编码到软件中,用于管理和部署 Kubernetes 工作负载,同时消除手动任务。
  • Operator 最好由安装、运行和升级特定应用的业务逻辑专家来构建。
  • 创建 Operator 一开始要实现应用安装自动化和自助服务部署,接着创建更复杂的自动化功能。
  • Kubernetes Operator 软件开发套件(SDK)也可以帮助您开发自己的 Operator。SDK 提供构建、测试和封装 Operator 的工具,并可选择使用 Helm 图表、Ansible Playbook 或 Golang 创建 Operator

三、Operator 框架

Operator 框架是提供开发人员和运行时 Kubernetes 工具的开源项目,使您能够加速开发 Operator。

Operator 框架包括:

  • Operator SDK:使开发人员能够利用其专业知识来构建 Operator,无需了解 Kubernetes API 的复杂性。
  • Operator 生命周期管理:监控在 Kubernetes 集群上运行的所有 Operator 的生命周期的安装、更新和管理。
  • Operator 计量:为提供专业服务的 Operator 启用使用情况报告。

四、Operator 模式

Operator 是 Kubernetes 的扩展软件, 它利用定制资源管理应用及其组件。 Operator 遵循 Kubernetes 的理念,特别是在控制器方面。

Operator 模式 旨在记述(正在管理一个或一组服务的)运维人员的关键目标。 这些运维人员负责一些特定的应用和 Service,他们需要清楚地知道系统应该如何运行、如何部署以及出现问题时如何处理。

在 Kubernetes 上运行工作负载的人们都喜欢通过自动化来处理重复的任务。 Operator 模式会封装你编写的(Kubernetes 本身提供功能以外的)任务自动化代码。

五、Kubernetes 上的 Operator

Kubernetes 为自动化而生。无需任何修改,你即可以从 Kubernetes 核心中获得许多内置的自动化功能。 你可以使用 Kubernetes 自动化部署和运行工作负载,甚至 可以自动化 Kubernetes 自身。

Kubernetes 的 Operator 模式概念允许你在不修改 Kubernetes 自身代码的情况下, 通过为一个或多个自定义资源关联控制器来扩展集群的能力。 Operator 是 Kubernetes API 的客户端, 充当自定义资源的控制器。

六、Operator 示例

使用 Operator 可以自动化的事情包括:

  • 按需部署应用
  • 获取/还原应用状态的备份
  • 处理应用代码的升级以及相关改动。例如数据库 Schema 或额外的配置设置
  • 发布一个 Service,要求不支持 Kubernetes API 的应用也能发现它
  • 模拟整个或部分集群中的故障以测试其稳定性
  • 在没有内部成员选举程序的情况下,为分布式应用选择首领角色

想要更详细的了解 Operator?下面是一个示例:

  • 有一个名为 SampleDB 的自定义资源,你可以将其配置到集群中。
  • 一个包含 Operator 控制器部分的 Deployment,用来确保 Pod 处于运行状态。
  • Operator 代码的容器镜像。
  • 控制器代码,负责查询控制平面以找出已配置的 SampleDB 资源。
  • Operator 的核心是告诉 API 服务器,如何使现实与代码里配置的资源匹配。
  • 如果添加新的 SampleDB,Operator 将设置 PersistentVolumeClaims 以提供持久化的数据库存储, 设置 StatefulSet 以运行 SampleDB,并设置 Job 来处理初始配置。
  • 如果你删除它,Operator 将建立快照,然后确保 StatefulSet 和 Volume 已被删除。
  • Operator 也可以管理常规数据库的备份。对于每个 SampleDB 资源,Operator 会确定何时创建(可以连接到数据库并进行备份的)Pod。这些 Pod 将依赖于 ConfigMap 和/或具有数据库连接详细信息和凭据的 Secret。
  • 由于 Operator 旨在为其管理的资源提供强大的自动化功能,因此它还需要一些额外的支持性代码。 在这个示例中,代码将检查数据库是否正运行在旧版本上, 如果是,则创建 Job 对象为你升级数据库。

七、部署 Operator

部署 Operator 最常见的方法是将自定义资源及其关联的控制器添加到你的集群中。 跟运行容器化应用一样,控制器通常会运行在控制平面之外。 例如,你可以在集群中将控制器作为 Deployment 运行。

八、使用 Operator

部署 Operator 后,你可以对 Operator 所使用的资源执行添加、修改或删除操作。 按照上面的示例,你将为 Operator 本身建立一个 Deployment,然后:

kubectl get SampleDB                   # 查找所配置的数据库kubectl edit SampleDB/example-database # 手动修改某些配置

可以了!Operator 会负责应用所作的更改并保持现有服务处于良好的状态。

九、编写你自己的 Operator

如果生态系统中没有可以实现你目标的 Operator,你可以自己编写代码。

你还可以使用任何支持 Kubernetes API 客户端的语言或运行时来实现 Operator(即控制器)。

以下是一些库和工具,你可用于编写自己的云原生 Operator。

  • java-operator-sdk

十、java-operator-sdk

无需麻烦地使用Java构建Kubernetes Operators

  • Java Operator SDK是一个可用于在Java中轻松实现Kubernetes Operators的生产就绪框架。
  • 它提供了控制器运行时,支持测试运算符以及相关工具。除此之外,它还支持实现转换钩子和动态准入控制器作为一个单独的项目。
  • 在底层,它使用了优秀的Fabric8 Kubernetes Client,该客户端提供了额外的功能,例如从源代码生成CRD(和反之亦然)。
  • Java Operator SDK 是一个高级框架和相关工具,用于支持使用 Java 编写 Kubernetes Operators。它使实现 Operator 的最佳实践和模式变得容易。

其功能包括:

  • 最优处理 Kubernetes API 事件
  • 处理依赖资源、相关事件和缓存。
  • 自动重试- 智能事件调度
  • 自动处理观察到的生成- 易于使用的错误处理- ……以及一个含电池的框架所需的一切。

十一、使用 JOSDK 的项目

虽然我们知道有多个项目在生产中使用 JOSDK,但我们不想假设这些项目想要在此处宣传这一事实。因此,如果您希望您的项目在此部分中展示,请提交一个 PR,添加一个链接和项目的简短描述,如下所示:

  • ExposedApp operator: 一个示例运算符,用于说明 JOSDK 的概念和其在 . 上的 Quarkus 扩展。
  • Keycloak operator: 官方的 Keycloak 运算符,使用 Quarkus 和 JOSDK 构建。
  • Apache Flink Kubernetes operator: 在 Flink 运算符中市场领先。
  • Strimzi Access operator:虽然核心的 Strimzi 运算符开发早于 JOSDK,但新的组件如 Access 运算符正在使用该框架。
  • EureKubeOperator: 使用该框架集成了 Eureka 和 Kubernetes 的服务发现,由 11street 开发。尽管它尚未作为开源发布,但通过使用 JOSDK 编写的运算符解决了这个问题,非常有趣。
  • Locust k8s operator: 在任何 Kubernetes 集群上运行性能测试的云原生解决方案。
  • Strimzi Schema Registry Operator: 基于 JOSDK 的模式注册表运算符,用于在基于 Strimzi 的 Kafka 集群上运行 Confluent 模式注册表。
  • Airflow Dag Operator: 使用 JOSDK(Quarkus 扩展)替代 Airflow Git 同步策略。该项目的主要思想是在每个 Airflow Pod 上启动一个同步容器,将 DAG/文件同步到 DAG 文件夹中。
  • Glasskube Operator: 简化流行的开源业务工具的部署、维护和升级。它使用 Kotlin 编写,并使用基于 Kotlin 的 DSL 的 JOSDK 和 fabric8 Kubernetes 客户端。
  • Debezium Operator: Debezium 运算符为您的 Kubernetes 或 Openshift 集群增加了 Change-Data-Capture 功能,通过提供一种简单的方式来运行和管理 实例。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python matplotlib绘图 plt.barh 水平条形图调整顺序逆序排列
  • Docker 的安全优化
  • Git版本控制策略:Rebase还是Merge?详解优缺点与适用场景
  • 【 OpenHarmony 系统应用源码魔改 】-- Launcher 之「桌面布局定制」
  • 012 MPLS技术在企业网络中的应用
  • 深度学习100问42:什么是GNMT
  • 每天五分钟计算机视觉:人脸识别网络FaceNet
  • adb大全指令(持续更新)
  • python 安装
  • LabVIEW水泵机组监控系统
  • 智能体与在线实用工具:协同并进,提升生活效率
  • 获取指定类的所有成员属性上的指定注解的属性值
  • 大数据技术之HBase 快速入门(2)
  • Parallels Desktop 19发布,无需重启即可在 Mac 上运行 Windows
  • VSCode设置复制 Ctrl+D想下复制
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • AWS实战 - 利用IAM对S3做访问控制
  • Java 内存分配及垃圾回收机制初探
  • Lucene解析 - 基本概念
  • MySQL用户中的%到底包不包括localhost?
  • Python学习笔记 字符串拼接
  • Vue官网教程学习过程中值得记录的一些事情
  • 从零开始的无人驾驶 1
  • 多线程 start 和 run 方法到底有什么区别?
  • 计算机常识 - 收藏集 - 掘金
  • 前端工程化(Gulp、Webpack)-webpack
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 一个JAVA程序员成长之路分享
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​字​节​一​面​
  • #162 (Div. 2)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (7)STL算法之交换赋值
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (安卓)跳转应用市场APP详情页的方式
  • (二十四)Flask之flask-session组件
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)LINQ之路
  • (转载)虚函数剖析
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET WPF 抖动动画
  • .NET 药厂业务系统 CPU爆高分析
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @RequestBody与@ResponseBody的使用
  • @Transaction注解失效的几种场景(附有示例代码)
  • [BZOJ1008][HNOI2008]越狱
  • [C/C++]数据结构 堆的详解
  • [C][栈帧]详细讲解
  • [C++][opencv]基于opencv实现photoshop算法可选颜色调整
  • [C++]——继承 深继承
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [FT]chatglm2微调