kubernetes operator解析

news2024/11/18 1:48:49

您是否想过站点可靠性工程 (SRE) 团队如何有效地成功管理复杂的应用程序? 在 Kubernetes 生态中,只有一个答案:Kubernetes Operators! 在本文中,我们将研究它们是什么以及它们是如何工作的。

image0b84e499e441dc38.png

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

Kubernetes Operator 模式根据 Kubernetes 核心原则之一:控制理论行事。 在机器人和自动化领域,它是一种持续运行动态系统的机制。 它依赖于尽可能准确地根据可用资源快速调整工作负载需求的能力。 目标是开发具有必要逻辑的控制模型,以帮助应用程序或系统保持稳定。 在 Kubernetes 世界中,该部分由控制器处理。

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

什么是控制器循环?

简而言之,控制器循环是控制器动作的基础。 想象一下,有一个非终止过程(在 Kubernetes 中称为协调循环)一遍又一遍地发生,如下图所示:

image.png

此过程至少观察一个 Kubernetes 对象,其中包含有关所需状态的信息。 对象如…

  • Deployments
  • Services
  • Secrets
  • Ingress
  • Config Maps

…由配置文件定义,配置文件由 JSON 或 YAML 中的清单组成。 然后控制器根据内置逻辑通过 Kubernetes API 进行持续调整以模仿所需状态,直到当前状态变为所需状态。

通过这种方式,Kubernetes 通过处理不断变化来处理云原生系统的动态特性。 为实现预期状态而执行的修改示例包括:

  1. 注意节点何时出现故障并要求一个新节点。
  2. 检查是否需要复制 pod。
  3. 如果需要,创建一个新的负载平衡器。

Kubernetes Operator如何工作?

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

“Operator 是 Kubernetes 的软件扩展,它利用自定义资源来管理应用程序及其组件。 Operators 遵循 Kubernetes 原则,尤其是控制回路。

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

image13b28fee9282d31c.png

Operator 持续跟踪与特定类型的自定义资源相关的集群事件。 可以跟踪的这些自定义资源上的事件类型是:

添加

更新

删除

当操作员收到任何信息时,它将采取行动将 Kubernetes 集群或外部系统调整到所需状态,作为其在自定义控制器中的协调循环的一部分。

如何添加自定义资源

自定义资源通过添加对您的应用程序有帮助的新型对象来扩展 Kubernetes 的功能。 Kubernetes 提供了两种向集群添加自定义资源的方式:

  1. 通过 API 聚合,这是一种高级方法,需要您构建自己的 API 服务器,但会给您更多控制权
  2. 通过自定义资源定义 (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 将允许您创建一个名为“应用程序”的 CR。 (我们将在下一节中使用它。)前两行定义了您要创建的对象类型 CustomResourceDefinition 的 apiVersion apiextensions.k8s.io/v1beta1。

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

之后,您可以定义多种格式的名称并创建一个方便的短名称,这样您就可以执行命令 kubectl get crds 来获取现有的 crd。

自定义资源

上面的 CRD 允许您创建自定义资源的以下清单。


apiVersion: stable.example.com/v1 
kind: Application
metadata:
  name: application-config
spec:
  image: container-registry-image:v1.0.0
  domain: teamx.yoursaas.io
  plan: premium

如您所见,我们可以在此处包含为特定案例运行应用程序所需的所有必要信息。 这个自定义资源将由我们的operator观察——准确地说,由operator的自定义控制器观察。 根据控制器中的内置逻辑,必要的动作将模仿所需的状态。 它可以为我们的应用程序创建 Deployment、Service 和必要的 ConfigMap。 运行它并通过特定域上的入口公开它。 这只是一个用例示例,但它可以做任何设计的事情。

Operators 也可用于配置 Kubernetes 外部的资源。 您可以在不离开 Kubernetes 平台的情况下控制外部路由器的配置或在云中创建数据库。

Kubernetes Operators:案例研究

为了全面了解 Kubernetes Operators,让我们来看看 Prometheus Operator,它是最早也是最受欢迎的 Operators 之一。 它简化了 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 服务器对上述任何对象的更改,并确保匹配的部署和配置保持同步。

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

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

相关文章

STM32 软件模拟SPI

STM32 软件模拟SPI 前言关于 SPISPI 协议软件模拟实现Driver_SPI.hDriver_SPI.c 前言 STM32库:标准函数库 测试环境:STM32F103系列 关于 SPI SPI 协议 SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉…

Python ChatGPT API 新增的函数调用功能演示

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 重磅更新,API 添加函数调用能力,能处理更长上下文,价格又有所降低 … 知乎讨论:https://www.zh…

【超详细教学】Python制作迷宫小游戏教程

文章目录 前言1.首先确定迷宫的大小2. 定义迷宫的墙壁和通道3.定义迷宫的起点和终点4.定义迷宫的方向5. 生成一个空的迷宫6. 在迷宫中随机选择一个起点和终点7. 在迷宫中随机选择一个方向8. 检查一个位置是否在迷宫内9. 检查一个位置是否是墙壁10. 检查一个位置是否是通道11. 检…

工程师卓越之旅:技术文档怎么写

0.意义和价值 当前信息共享长期技术知识传承加深作者的理解和思考交付包括代码和技术文档 1.准备阶段 明确文档需求、受众和内容范围 2.调研阶段 对比有代表性的同类或相似的技术文档,建立大致框架收集相关信息,分析验证进行技术决策在文档中将每个…

HttpServletRequest对象中获取客户端IP地址

什么是HttpServletRequest对象 HttpServletRequest对象是Java Servlet规范中定义的一种接口,它封装了客户端请求的所有信息,例如请求头、请求参数、请求方法、请求URL等。在Java Web开发中,HttpServletRequest对象非常常用,可以用…

关于Java SSM框架的面试题

一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:1、IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,se…

程序替换原理

文章目录 一、程序替换 一、程序替换 程序替换用于将当前进程的用户空间的代码和数据全部替换为新程序的代码和数据,程序替换不会创建新进程,而是用当前进程执行新程序的代码,fork 创建子进程后,子进程默认执行的是父进程的代码&…

信创-大数据平台CPU架构支持

一、CDH和HDP、CDP CDP数据中心类似于CDH和HDP,直接安装在硬件服务器上,目前支持市面上主流的X86服务器,包括国内海光服务器, CDH不支持ARM 以上两种大数据平台都仅支持x86架构,早在几年期RedHat联手cloudera公司发表声明将推出64位ARM版,据…

【备战秋招】每日一题:4月29日美团春招第一题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-选修课 在线评测链接:P1266 题目内容 某大学一共有 n 门课程,编号为 1 ~ n , m 个学院,编号为1 ~ m 。最近开学季,…

剑指 Offer 53 - II: 0~n-1中缺失的数字

看到这道题的第一反应就是二分查找,由于是递增的所以二分查找所需的时间很短 ,设置一个左,一个右,一个中间,如果判断吧不同需要想下前面是否一样,如果是那么就找到,不是再继续二分查找。 我的思…

【redis】redis的5种数据结构及其底层实现原理

文章目录 redis中的数据结构redis数据结构底层实现stringlisthashsetintset字典 zset跳表插入删除过程 redis中的数据结构 Redis支持五种数据类型:string(字符串),hash(哈希),list(…

小波变换之pycwt (python)

小波变换之pycwt PyCWT是用于连续小波谱分析的Python模块,它包括小波变换和FFT算法统计分析的常规操作的集合。此外,该模块还包括交叉小波变换、小波相干性测试和样例脚本。 该模块需要NumPy和SciPy,matplotlib模块。 pip安装:…

SSMP整合案例(1) 构建 Spring Boot Vue MySql项目环境

前面 我们通过 java springboot整合MyBatis做数据库查询操作 java springboot整合MyBatis-Plus 多用点Plus支持一下国人开发的东西吧 java springboot整合Druid数据源配置 大体熟悉了springboot正好第三方应用的操作 那么 我们就来写一个 基于springboot的SSMP整合案例 其实就…

MongoDB快速实战与基本原理-1

一、MongoDB介绍 1、什么是MongoDB MongoDB是 一个文档数据库(以 JSON 为数据模型) ,由C语言编写,旨在 为 WEB应用提供可扩展的高性能数据存储解决方案。 文档来自于“ JSON Document”,并非我们一般理解的 PDF&am…

人机交互学习-8 交互设计模型与理论

交互设计模型与理论 预测模型GOMS模型GOMS全称GoalsOperatorsMethodsSelection Rules 举例GOMS方法步骤GOMS模型分析 击键层次模型操作符使用方法放置M操作符的启发规则KLM分析KLM应用 Fitts定律三个指标a,b的确定说明Fitts定律建议Fitts定律应用 动态特性建模状态转移网三态模…

牛客网基础语法61~70题

牛客网基础语法61~70题😘😘😘 💫前言:今天是咱们第七期刷牛客网上的题目。 💫目标:可以掌握循环嵌套,逻辑思维更加清晰,对循环知识掌握熟练。 💫鸡汤&#xf…

dp算法篇Day5

"生予希望,生予微光,生予一切无常" 21、乘积最大子数组 (1) 题目解析 一个正数,需要和正数相乘才能得到一个大的乘积,反之一个负数,需要和一个负数做乘积,才能 得到一个大的乘积。 解决子数组问…

Springboot程序开启远程DEBUG

一、远程debug的原理 Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式,并在调试器中连接到程序所在的调试地址,从而实现对程序的远程调试。 具体步骤如下: 在运行Spring Boot程序时,在启动命令…

强化学习DDPG:Deep Deterministic Policy Gradient解读

1. DDPG DDPG方法相比于传统的PG算法,主要有三点改进: A. off-policy策略 传统PG算法一般是采用on-policy方法,其将整体强化学习过程分为多个epoch,在每个epoch完成一次policy模型和value模型更新,同时在每轮epoch都…

【Java高级语法】(五)字符串操作类String:几乎每天都会用到的String类,你还在踩坑吗?~

Java高级语法详解之字符串操作类String :one: 概念:two: 使用2.1 创建字符串对象2.2 字符串的比较2.3 字符串长度2.4 字符串连接2.5 字符串截取2.6 字符串的查找和替换2.7 字符串的切割和拆分2.8 字符串和其他类型的转换2.9 字符串的格式化2.10 字符串的判断2.11 手动入池2.12 …