前面的文章介绍了 Kubernetes 自带的管理有状态应用的控制器 StatefulSet ,它能够完成应用的拓扑顺序状态管理 (比如,重启时按照顺序重建 Pod)以及结合 PVC 完成应用的存储状态管理。不过在 Kubernetes 生态中还有一种更灵活、编程友好的解决方案 -- Operator, 它能让使用者根据自己应用的特性定义应用对象和管理对象的控制器。

这篇文章都是一些概念性的文字描述,阅读起来比较轻松,后面会再专门写怎么编码自己实现一个Operator。

什么是Operator

Operator 概念是由 CoreOS 的工程师于2016年提出的,它让工程师可以根据应用独有的领域逻辑为应用编写自定义的控制器。这句话说的有点虚空,我们通过一个简单的例子理解一下 Operator 。

假设有一个连接数据库的 Java Web程序。你想将其部署到您的k8s集群。理想情况下,你会希望用 Deployment 部署应用然后暴露给 Service,对于应用服务的后端则是使用 StatuflSet 部署数据库。所以需要完成两部分的部署才能把整个应用服务部署完成:

  • 无状态部分:Java Web 应用。

  • 有状态部分:数据库。

在上面的例子中,我们可以应用我们对应用程序与数据库之间的关系的了解,创建一个控制器,该控制器将以某种特定方式运行时执行某些操作。比如备份、更新、数据还原这些任务该如何完成取决于应用程序本身和业务限制(领域知识)。这些与应用强相关的操作就是 Kubernetes Operator要做的:代替原本需要由SRE(Site Reliability Engineers)和运维工程师来完成操作的执行。

自定义资源和控制器

Operator 模型基于 Kubernetes 中的两个概念结合而成:自定义资源和自定义控制器。

自定义资源

在 Kubernetes中,资源是 Kubernetes API中的一个端点,用于存储一堆特定类型的API对象。它允许我们通过向集群添加更多种类的对象来扩展Kubernetes。添加新种类的对象之后,我们可以像其他任何内置对象一样,使用 kubectl 来访问我们自定义的 API 对象。

以 Pod 或 Deployment 为例。编写清单时,必须在 YAML 文件中指定一种类型(是 Pod 还是 Deployment)。自定义资源就是不由 Kubernetes 原生提供的资源对象。

自定义控制器

Kubernetes 的所有控制器,都有一个控制循环,负责监控集群中特定资源的更改,并确保特定资源在集群里的当前状态与控制器自身定义的期望状态保持一致。

举例来说有一个 Deployment 控制器管控值集群里的一组 Pod ,当你 Kill 掉一个 Pod 。控制器发现定义中期望的Pod数量与当前的数量不匹配,它就会马上创建一个 Pod 让当前状态与期望状态匹配。控制器这种让关联资源的当前状态向期望状态迈进的过程叫做调谐(reconcile)。

图片

那么,像 Deployment 这样的内置控制器也叫做 Operator 吗?其实不是,因为这些控制器不是特定于特定的应用程序的,而是内置类型资源的上游控制器。

什么时候应该用 Operator

重要的是要知道所有的 Operator 都是控制器,但并非所有的控制器都是 Operator。对于被视作 Operator 的控制器,它必须知道应用程序的业务逻辑,才能代表用户(SRE / Ops工程师)执行自动化任务。

  • 当需要封装有状态的应用程序业务逻辑(使用Kubernetes API控制所有内容)时,都可以使用 Operator 。这使围绕 Kubernetes 生态系统内置的应用程序的自动化成为可能。

  • 每当需要创建工具来监视应用程序的更改并在发生某些事情时执行某些SRE / Ops任务时,都应使用 Operator。

关于 Operator 的使用建议

K8S内置控制器用于群集本身,而 Operator 是用于部署有状态应用程序的控制器。

创建 Operator 时,请遵循以下最佳模式实践:

  • 要站在巨人的肩膀上--利用内置资源种类在它们的基础上创建你自定义的资源种类。

  • 确保控制器不需要其他外部代码即可正常工作,只需运行kubectl install即可部署你定义的控制器。

当你准备好为特定应用程序创建自定义资源,该资源可以与自定义控制器进行协调,从而可以扩展 Kubernetes 的正常行为时,就是时候开始使用 Operator了。

来了解一下K8S的Operator模式相关推荐

  1. Kubernetes operator 模式开发实践

    0. 前言 近日我们在开发符合我们业务自身需求的微服务平台时,使用了 Kubernetes 的 Operator Pattern 来实现其中的运维系统,在本文,我们将实现过程中积累的主要知识点和技术细 ...

  2. 2022-03-16 k8s的operator的Reconcile执行追踪

    目录 摘要: 调用堆栈: 核心函数: sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go Controller:: ...

  3. 【Kubernetes】K8s集群operator模式安装minio

    尝试过使用网上分享的minio.yaml安装minio集群,但是结果都失败了,主要原因是访问不了minio的管理页面.下面的yaml就是网上各类技术文章使用的最多的一个,有些yaml连nodePort ...

  4. Spark On K8S(Standalone模式部署)

    Spark on K8S 的几种模式 Standalone:在 K8S 启动一个长期运行的集群,所有 Job 都通过 spark-submit 向这个集群提交 Kubernetes Native:通过 ...

  5. K8S 使用 SideCar 模式部署 Filebeat 收集容器日志

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  6. k8s使用ipvs模式

    k8s的kube-proxy支持iptables.ipvs 模式,默认是iptables 模式 1.加载内核模快,内核支持: 查看当前系统支持的ip_vs : [root@node1 ~]# lsmo ...

  7. k8s开启IPVS模式

    在部署k8s时,默认不是开启的ipvs模式,在已经部署完成后,如果想更改为ipvs,操作如下: 在所有节点安装ipvs软件(Master跟所有的Node节点) yum -y install ipvsa ...

  8. k8s、控制器模式解析、定义多少个副本、卷挂载、滚动更新、版本回滚

    文章目录 控制器模式解析 项目:Nginx使用卷挂载 滚动更新 第一种方法: 第二种方法 版本回滚 第一种方法版本升级 第二种方法 第三种方法 控制器模式解析 创建一个pod,有俩个副本,最简单的 例 ...

  9. 21 年总结:文章的盘点和写作背景

    今天已经到了二月底,才来写上年的总结... 妥妥的拖延症晚期患者.其实春节前后这两周都在赶项目加班,包括春节假期有两天也在处理的工作的事儿,时间少,加上干活期间学到的东西想优先记下,所以就把总结类的文 ...

最新文章

  1. 5G:这次中国说了算!
  2. 7.Spring Security 退出登录
  3. 深入理解 SVG 系列(一) —— SVG 基础
  4. 全球及中国商用电饭煲行业现状调研及投资决策建议报告2021-2027年版
  5. 高校数字化建设到底该如何推进?这篇方案值得一看
  6. vmware安装mac
  7. Asp.net 2.0 发送电子邮件
  8. win10+ubuntu18.04双系统配置深度学习环境
  9. ML Pipeline原理
  10. Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
  11. Liunx安装 jemalloc == 内存管理工具
  12. 登录界面html源代码_网页制作:一个简易美观的登录界面
  13. 货币金融学(4): 商业银行业务/央行
  14. 有哪些大型网站是用 Python 开发的
  15. 瑞星微RK3288 开发板
  16. 卧槽,ChatGPT 太强了吧!
  17. 电脑突然开机无反应,怎么办
  18. 【逗老师的小技巧】群晖Synology更改存储池和存储空间编号
  19. EN 14351-1门窗及配件—CE认证
  20. 《软件研发效能度量规范》的解读与实践(文末附有下载)

热门文章

  1. Angular学习笔记第一节 基本概念
  2. OpenStack实践系列②认证服务Keystone
  3. libvirt- Virsh 所有命令详单
  4. 【Hibernate】性能优化之缓存管理
  5. MOSS 2007 系列学习之安装篇(一)
  6. 程序清单4.1_talkback.c程序_《C Primer Plus》P60
  7. NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?...
  8. nginx开发(二)配置mp4文件在线播放
  9. 给枚举值增加扩展数据
  10. CSS从大图中抠取小图完整教程(background-position应用) (转)