K8s系列之:解释Kubernetes Operators

news2024/11/15 17:52:46

K8s系列之:解释Kubernetes Operators

  • 什么是控制器循环?
  • Kubernetes Operator是如何工作的?
  • 如何添加自定义资源
  • 自定义资源定义
  • Kubernetes Operators:案例研究

你是否曾想过,Site Reliability Engineering(SRE)团队如何成功地管理复杂应用程序?在Kubernetes生态系统中,答案只有一个:Kubernetes Operators!在本文中,我们将探讨什么是Operators以及它们的工作原理。

Kubernetes Operator的概念是由CoreOS的工程师在2016年开发的,作为在Kubernetes集群上构建和驱动每个应用程序的高级和本地化方式,需要领域特定的知识。它提供了一种一致的方法来自动处理所有应用程序的运行过程,通过与Kubernetes API的密切协作,无需人工干预。换句话说,Operator是一种打包、运行和管理Kubernetes应用程序的方式。

Kubernetes Operator模式遵循了Kubernetes的核心原则之一:控制理论。在机器人技术和自动化中,控制理论是一种连续操作动态系统的机制。它依赖于将工作负载需求尽可能准确地适应可用资源的能力。其目标是开发一个带有必要逻辑的控制模型,以帮助应用程序或系统保持稳定。在Kubernetes世界中,这一部分由控制器来处理。

控制器是一种特殊的软件,在循环中响应变化并在集群中执行适应性操作。第一个Kubernetes控制器是kube-controller-manager。它被视为后来构建的所有Operator的祖先。

什么是控制器循环?

简单来说,控制器循环是控制器操作的基础。想象一下,有一个不终止的过程(在Kubernetes中称为调谐循环)一遍又一遍地进行,如下图所示:

在这里插入图片描述
该过程观察至少一个Kubernetes对象,该对象包含有关期望状态的信息。诸如

  • 部署
  • 服务
  • 密钥
  • 入口
  • 配置映射
    等对象由JSON或YAML格式的配置文件定义。然后,控制器通过Kubernetes API进行持续调整,以模拟期望状态,直到当前状态变为期望状态,根据内置的逻辑进行操作。

通过这种方式,Kubernetes处理了云原生系统的动态特性,处理不断变化的情况。实现期望状态的修改示例包括:

  • 当节点下线时发出新节点的需求
  • 检查是否需要复制Pod
  • 根据请求创建新的负载均衡器。

Kubernetes Operator是如何工作的?

Operator是一个特定于应用程序的控制器。它扩展了Kubernetes API,代表人类(操作工程师或站点可靠性工程师)创建、配置和管理复杂的应用程序。让我们看看Kubernetes文档对此的解释。

“Operator是Kubernetes的软件扩展,利用自定义资源来管理应用程序及其组件。Operator遵循Kubernetes的原则,特别是控制循环。”

到目前为止,你已经知道Operator利用控制器观察Kubernetes对象。这些控制器有些不同,因为它们跟踪自定义对象,通常称为自定义资源(CR)。CR是Kubernetes API的扩展,提供了一个存储和检索结构化数据(即应用程序的期望状态)的位置。整个操作原理如下图所示。

在这里插入图片描述
Operator不断跟踪与特定类型的自定义资源相关的集群事件。可以跟踪的自定义资源上的事件类型包括:

  • 添加
  • 更新
  • 删除

当Operator接收到任何信息时,它将采取行动,在自定义控制器的调谐循环中调整Kubernetes集群或外部系统以达到期望状态。

如何添加自定义资源

自定义资源通过添加新类型的对象来扩展Kubernetes的功能,这些对象对于您的应用程序可能很有帮助。Kubernetes提供了两种将自定义资源添加到集群的方法:

  • 通过API聚合(API Aggregation):这是一种高级方法,需要您构建自己的API服务器,但可以给您更多的控制权。
  • 通过自定义资源定义(Custom Resource Definitions,CRD):这是一种简单的方式,可以在不需要任何编程知识的情况下创建,作为对原始Kubernetes API服务器的扩展。

这两个选项满足了不同用户的需求,用户可以在灵活性和易用性之间进行选择。Kubernetes社区创建了一个指南,将帮助您决定哪种方法适合您,但最受欢迎的选择是CRD。

自定义资源定义

自定义资源定义已经存在一段时间了;第一个主要的API规范是在Kubernetes 1.16.0版本发布时引入的。下面的示例展示了一个清单:

apiVersion: apiextensions.k8s.io/v1beta1 
kind: CustomResourceDefinition
metadata:
  name: application.stable.example.com 
spec:
  group: stable.example.com 
  version: v1 
  scope: Namespaced 
  names:
    plural: application 
    singular: applications 
    kind: Application 
    shortNames:
    - app 

这个CRD将允许您创建一个名为"Application"的CR(我们将在下一节中使用它)。前两行定义了您要创建的对象的apiVersion apiextensions.k8s.io/v1beta1和kind CustomResourceDefinition。

元数据描述了资源的名称,但在这里最重要的地方是"spec"字段。它允许您指定组和版本以及可见性的范围 - 命名空间范围或集群范围。

然后,您可以以多种格式定义名称,并创建一个方便的缩写名称,这样您就可以执行"kubectl get app"命令来获取现有的CR。

Kubernetes Operators:案例研究

为了全面了解Kubernetes Operators,让我们来研究一个案例,即Prometheus Operator,它是最早也是最受欢迎的Operator之一。它简化了Prometheus、Alertmanager和相关监控组件的部署和配置。

Prometheus Operator的核心功能是监视Kubernetes API服务器对特定对象的更改,并确保当前的Prometheus部署与这些对象匹配。Operator对以下自定义资源定义(CRD)进行操作:

  • Prometheus:定义了所需的Prometheus部署。
  • Alertmanager:定义了所需的Alertmanager部署。
  • ServiceMonitor:以声明方式指定应如何监控一组Kubernetes服务。Operator根据API服务器中对象的当前状态自动生成Prometheus抓取配置。
  • PodMonitor:以声明方式指定应如何监控一组Pod。Operator根据API服务器中对象的当前状态自动生成Prometheus抓取配置。
  • PrometheusRule:定义了一组所需的Prometheus警报和/或记录规则。Operator生成一个规则文件,可以供Prometheus实例使用。

Prometheus Operator会自动检测Kubernetes API服务器对上述任何对象的更改,并确保匹配的部署和配置保持同步。

在这里插入图片描述
致力于通过创建java-operator-sdk来简化使用Java创建Operator的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【优化】Nginx 配置页面请求不走缓存 浏览器页面禁用缓存

【优化】Nginx 配置页面请求不走缓存 禁用缓存 目录 【优化】Nginx 配置页面请求不走缓存 禁用缓存 对所有请求禁用缓存 对特定location禁用缓存 注意事项 全局禁用缓存 要配置Nginx使其不缓存内容,通常是指禁止浏览器缓存响应的内容,或者是在代理…

Qt 模仿企业微信图标实现按钮图片文字上下结构

简述 实现类似企业微信左侧导航栏的上下结构的按钮 效果图 可以用2种方案实现,2种最终效果图如下: 方案1 QToolButton 实现 ui.toolButton->setFixedSize(50, 50);ui.toolButton->setCheckable(true);ui.toolButton->setAutoExclusive(true);…

电源测试设备功能篇:测试仪器的灵活兼容与扩展

依托ATECLOUD智能云测试平台打造的电源ate自动测试设备,相较于传统的自动化测试系统,其突出特点在于提供了灵活的系统操作。这种操作灵活性不仅表现在自动化测试的便捷性、报告模板的多样化以及数据分析的灵活性上,还表现在电源测试仪器设备配…

覃嘉仪,艺人经纪人、经纪人、影视经纪人。2002.7.9出生于四川省遂宁市射洪县

覃嘉仪,艺人经纪人、经纪人、影视经纪人。2002.7.9出生于四川省遂宁市射洪县 2020年开始从事宣传工作,2023成为“WP经纪工作室”艺人经纪,现担任孙亦欣、魏逸熙等艺人的经纪人。 2024年涉足于影视行业,并加入嘉林娱乐。2024年在由…

部标JT808标准下的视频汇聚新方案:EasyCVR平台助力推动车辆监管智能化进程

在数字化转型的浪潮中,智慧城市的建设正以前所未有的速度推进,而市政车载设备作为城市运行的重要“神经末梢”,其智能化、联网化水平直接影响着城市管理效率与服务质量。近年来,随着部标协议(即国家行业标准协议&#…

Python学习日志(3)—— 运行

通过python文档辅助学习,规范代码 python文档:3.12.5 Documentation (python.org) 1、python版本之间的差异:新的特性和变化、弃用和新增 2、标准库参考(宝典,用于查询) 3、语法参考 python程序是解释型…

记录工作时的一些错误

1、mobaxterm问题: 解决方案:找不到mottynew.exe 2、虚拟机安装centos7进入不了引导页面 解决方案:检查镜像 虚拟机 192.168.40.128 root/Root yxr/y123x123r123 解决方案: 问题:docker run不起来容器,显…

HTTP 状态码全攻略:快速搞懂服务器的“暗号”

文章目录 HTTP 状态码全攻略:快速搞懂服务器的“暗号”1xx:打个招呼,信息来了 (Informational Responses)2xx:事情办成了! (Successful Responses)3xx:走这边,换个地方吧 (Redirection Response…

音视频——RTSP流媒体传输技术介绍及抓包解析

流式传输 流媒体技术:将声音影像向用户计算机 连续、不间断的进行传送,延时小。 抓包 route add 添加到指定网络的路由规则 route add [-net|-host] [网域或主机] netmask [mask] [gw|dev] route del [-net|-host] [网域或主机] netmask [mask] [gw|dev…

第9章 使用ContentProvider实现数据共享

第9章 使用ContentProvider实现数据共享 本章要点 理解ContentProvider的功能与意义ContentProvider类的作用和常用方法Uri 对 ContentProvider的作用理解ContentProvider与ContentResolver的关系实现自己的ContentProvider配置ContentProvider使用ContentResolver操作数据操…

宝藏!《联盟自控基础班筑基题库》(凤凰篇) 1-8章:甄选部分

本文内容,全部选自自动化考研联盟的:初试《自控基础班筑基题库》(凤凰篇)。 Part1:资料封面&目录 Part2:资料各个章节具体内容 第1章 自动控制的基本概念 第2章 控制系统的数学模型 第3章 控制系统的时域分析 第4章 根轨迹法…

某东东的jdgs算法分析--适合进阶学习

某东东的jdgs算法分析 这个贴主要还是对算法本身结构部分描述会多点,憋问,问就是过去太久了,很多逆向过程不一定能还原(主要是懒,不想原路再走一遍),所以可能有部分跳跃的内容,会给具…

【网络安全】IDOR之敏感数据泄露

未经许可,不得转载。 文章目录 正文正文 在测试“添加到收藏夹”功能时,我拦截了发送到服务器的请求,请求体如下: {“uriTemplate”:“asset/{assetId}/favorite”,“version”:“v2”,“type”:“POST”,“req_service”:“pict”,“url”:“asset/VICTIMS_ASS…

【论文阅读】DivTheft: An Ensemble Model Stealing Attack by Divide-and-Conquer(2023)

摘要 Recently, model stealing attacks(模型窃取攻击) are widely studied(广泛研究) but most of them are focused on stealing a single non-discrete model(窃取单个非离散模型), e.g., neural networks(神经网络). For ensemble models(对于集成模型), these …

分钟快速搭建分班查询系统,支持查班级群二维码

新学期已经开始了,老师们又要忙活起来了。但是,别担心,现在有个超方便的工具,能帮大家快速搞定分班的事情,还能让家长们一键加入班级群,省时又省力! 以前分班可麻烦了,老师们得一个…

集群的调度和策略

集群的调度: 怎么把pod部署到节点的方法。 调度的过程: scheduler是集群的调度器,主要任务就是把pod部署到节点上。 自动调度: 1、公平,保证每个可用的节点都可以部署pod 2、资源的高效利用,集群当中…

C/C++内存详解

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 C/C内存模型C语言动态内存管理mallocrealloccallocfree C动态内存申请new 操作符delete 操作符注意事项用法示例 operator new和operator delete函数内存泄露 C/C内存模型 让我们先来看看这段代码&a…

四、SPI——2、NOR FLASH

一、NOR FLASH介绍 FLASH是常用的用于储存数据的半导体器件,它具有容量大,可重复擦写、按“扇区/块”擦除、掉电后数据可继续保存的特性。 FLASH是有一个物理特性:只能写0,不能写1,写1靠擦除。 FLASH主要有NOR Flash和…

【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收

目录 🌲内存划分 🚩堆(线程共享) 🚩栈 🚩元数据区 🍃类加载过程 🚩双亲委派模型 🎄垃圾回收机制(GC) 🚩找到谁是垃圾(不被继续…

纷享销客CRM渠道分销之多维度数据分析介绍

预设渠道报表驾驶舱 基于渠道分销场景,系统预设了一个全面的渠道订货数据驾驶舱,旨在通过直观的数据分析,为企业提供深度的市场洞察和业务决策支持。该驾驶舱提供渠道订货的概览,快速把握整体订货动态。 渠道订货波动分析&#…