OCP的operator——(1)概述

news2024/11/30 12:39:08

文章目录

  • 概述
  • 了解Operator
    • 什么是Operator
      • 为何使用Operator
      • Operator Framework
      • Operator成熟度模型
    • Operator Framework 打包格式
      • Bundle格式
        • Manifest
        • 注解
        • 依赖
        • 关于opm CLI
      • 基于文件的目录
      • RukPak
    • Operator Framework常用术语表
      • 常见Operator Framework术语
        • Bundle
        • Bundle image
        • Catalog source
        • Channel
        • Channel head
        • Cluster service version(CSV)
        • Dependency
        • Index image
        • Install plan
        • Multitenancy
        • Operator group
        • Package
        • Registry
        • Subscription
        • Update graph
  • 参考

概述

Operator是OpenShift Container Platform(OCP)中最重要的组件之一。Operator是control plane上打包、部署和管理服务的首选方法。它们还可为用户运行的应用提供优势。

Operator集成了Kubernetes API和CLI工具(比如 kubectloc 命令)。它们提供方法来监控应用、执行健康检查、管理无线(over-the-air,OTA)更新,并确保应用保持在指定状态。

虽然遵循类似的Operator概念和目标,但OCP中的Operator取决于其用途,可被两个不同的系统管理:

  • 集群Operator,由Cluster Version Operator(CVO)管理,被默认安装,用来执行集群功能。
  • 可选的附加Operator,由Operator Lifecycle Manager(OLM)管理,供用户在其应用程序中运行。

通过Operator,可以创建应用来监控集群中运行的服务。Operator是专为应用而设计的。Operator实现并自动化了常见的“第1天操作”(比如安装和配置)以及“第2天操作”(如自动缩放和缩减并创建备份)。这些活动都处于一个在集群里运行的软件中。

了解Operator

什么是Operator

概念上,Operator把人工的操作知识编码为软件,这样更容易给消费者共享。

Operator是一组软件,用于降低运行其它软件的操作复杂性。它是软件厂商的工程团队的扩展,可以监控Kubernetes环境(比如OCP),并根据当前状态实时做出决策。Advanced Operator被设计为用来无缝地处理升级过程,自动对失败做出反应,而且不会采取“捷径”(比如为了节省时间而跳过软件备份过程)。

从技术上讲,Operator是一种打包、部署和管理Kubernetes应用的方法。

Kubernetes应用可在Kubernetes上部署,也可使用Kubernetes API和 kubectl / oc 工具来管理。要充分利用Kubernetes,需要一组结合的API来扩展,以便服务和管理Kubernetes上运行的应用。可把Operator看作管理Kubernetes中这类应用的运行时。

为何使用Operator

Operator提供一下功能:

  • 安装和升级的可重复性。
  • 对每个系统组件的持续健康检查。
  • 无线(Over-the-air,OTA)更新OpenShift组件和ISV内容。
  • 封装领域工程师的知识,并传播给所有用户,而非一两个。

为何在Kubernetes上部署?Kubernetes(扩展至OCP)包含构建复杂分布式系统所需的所有原语(primitive),包括secret处理、负载均衡、service发现、自动扩展。它们可跨on-premise和云提供商工作。

为何使用Kubernetes API和 kubectl 工具来管理应用?这些API功能丰富,针对所有平台均有客户端,并可插入到集群的访问控制/审计中。Operator使用Kubernetes扩展机制,定制资源定义(Custom Resource Definition,CRD),所以定制对象,比如 MongoDB ,其外观和行为就像内建的、原生的Kubernetes对象。

Operator与Service Broker比较?
服务代理(service broker)是实现应用的编程发现和部署的一步。但它并非一个长时间运行的进程,所以无法执行“第2天操作”,如升级、故障转移、扩展。它在安装时对可调性(tunable)提供定制化和参数化,而Operator则持续监控集群的当前状态。非集群的服务非常适合于service broker,不过也有适合它们的Operator。

Operator Framework

Operator Framework是基于上述客户体验提供的一套工具和能力。不仅仅是编写代码,测试、交付和更新Operator也同样重要。Operator Framework组件包含了解决这些问题的开源工具:

Operator SDK:Operator SDK辅助Operator作者基于其自身专长,来启动、构建、测试和打包其Operator,而无需了解Kubernetes API复杂性知识。

Operator Lifecycle Manager(OLM):OLM控制Operator的安装、升级和基于角色的访问控制(role-based access control,RBAC)。它默认部署在OpenShift Container Platform 4.14中。

Operator Registry:Operator Registry存储Cluster Service Version(CSV)和Custom Resource Definition(CRD)以便在集群中创建,并存储有关包和频道的Operator元数据。它运行在Kubernetes或OpenShift集群中,向OLM提供这些Operator目录数据。

OperatorHub:OperatorHub是一个web console,集群管理员用它来发现并选择Operator来安装。它在OCP中被默认部署。

这些工具可组合使用,因此可自由选择有用的工具。

Operator成熟度模型

Operator封装的管理逻辑的复杂度可以变化。该逻辑通常也会高度依赖于Operator所代表的服务类型。

不过,对于大部分Operator可能包含的特定功能集,可以概括出Operator的封装操作的成熟度等级。就此而言,以下Operator成熟度模型针对Operator的通用的“第2天操作”,定义了五个成熟度阶段:

在这里插入图片描述

该模型还显示了如何最好地通过Operator SDK的Helm、Go和Ansible功能来开发这些功能。

Operator Framework 打包格式

本指南概述了OCP中OLM所支持的Operator打包格式。

Bundle格式

Operator的Bundle格式是Operator Framework引入的打包格式。为提高可伸缩性,并更好地支持上游用户托管自己的目录,bundle格式规格简化了Operator元数据的发布。

Operator bundle代表Operator的一个版本。磁盘上的bundle manifest是容器化的,并作为bundle image提供,该image是一个不可运行的容器image,其中存储了Kubernetes manifest和Operator元数据。然后,使用已有的容器工具(比如 podmandocker )和容器registry(比如 Quay )来管理bundle image的存储和发布。

Operator元数据可以包括:

  • 标识Operator的信息,比如名称和版本。
  • 驱动UI的额外信息,比如其图标和示例CR。
  • 所需的和所提供的API。
  • 相关image。

把manifest加载到Operator Registry数据库中时,会验证以下需求:

  • 该bundle必须在注解中定义至少一个频道。
  • 每个bundle都有一个CSV。
  • 如果CSV拥有CRD,则该CRD必须存在于bundle中。
Manifest

Bundle manifest指的是一组Kubernetes manifest,用于定义Operator的部署和RBAC模型。

Bundle包括每个目录的CSV,一般还包含了CRD,这些CRD在 /manifest 目录中定义CSV所拥有的API。

etcd
├── manifests
│   ├── etcdcluster.crd.yaml
│   └── etcdoperator.clusterserviceversion.yaml
│   └── secret.yaml
│   └── configmap.yaml
└── metadata
    └── annotations.yaml
    └── dependencies.yaml

以下对象类型也可以包括在bundle的 /manifests 目录中:

  • ClusterRole
  • ClusterRoleBinding
  • ConfigMap
  • ConsoleCLIDownload
  • ConsoleLink
  • ConsoleQuickStart
  • ConsoleYamlSample
  • PodDisruptionBudget
  • PriorityClass
  • PrometheusRule
  • Role
  • RoleBinding
  • Secret
  • Service
  • ServiceAccount
  • ServiceMonitor
  • VerticalPodAutoscaler

当bundle中包含这些可选对象时,OLM可以从bundle创建它们,并和CSV一起管理其生命周期:

  • 删除CSV时,OLM会删除可选对象。
  • 升级CSV时:
    • 如果可选对象的名称相同,OLM会更新它。
    • 如果可选对象的名称在版本之间发生变化,OLM会删除并重建它。
注解

Bundle还在其 /metadata 目录中包含 annotations.yaml 文件。该文件定义了更高级别的聚合数据,以帮助描述关于如何将bundle添加到bundle索引中的格式和包信息:

annotations:
  operators.operatorframework.io.bundle.mediatype.v1: "registry+v1"
  operators.operatorframework.io.bundle.manifests.v1: "manifests/"
  operators.operatorframework.io.bundle.metadata.v1: "metadata/"
  operators.operatorframework.io.bundle.package.v1: "test-operator"
  operators.operatorframework.io.bundle.channels.v1: "beta,stable"
  operators.operatorframework.io.bundle.channel.default.v1: "stable"

注意:如果出现不匹配的情况,则以 annotations.yaml 文件为准,因为依赖这些注解的集群Operator Registry只能访问此文件。

依赖

Operator的依赖项列在bundle的 metadata/ 目录中的 dependencies.yaml 文件中。此文件是可选的,目前仅用于指明Operator-version依赖项。

依赖项列表中的每一项包含一个 type 字段,用于指定依赖项的类型。支持以下Operator依赖项类型:

  • olm.package
  • olm.gvk
  • olm.constraint

下面的例子中,为Prometheus Operator和etcd CRD指定依赖项:

dependencies:
  - type: olm.package
    value:
      packageName: prometheus
      version: ">0.27.0"
  - type: olm.gvk
    value:
      group: etcd.database.coreos.com
      kind: EtcdCluster
      version: v1beta2
关于opm CLI

opm CLI工具由Operator Framework提供,用于Operator bundle格式。可以通过此工具从与软件存储库类似的Operator bundle列表中创建和维护Operator目录。其结果是一个容器image,它可以存储在容器registry中,然后安装到集群中。

目录包含一个指向Operator manifest内容的指针数据库,可通过在运行容器image时提供的已包含API来查询。在OCP中,OLM可以引用由CatalogSource对象定义的目录源中的image,它会定期轮询image,以对集群上安装的Operator进行频繁更新。

基于文件的目录

略。

RukPak

略。

Operator Framework常用术语表

常见Operator Framework术语

Bundle

在bundle format中,bundle是Operator CSV、manifest和元数据的集合。它们一起构成了可在集群中安装的Operator的唯一版本。

Bundle image

在 bundle format中, bundle image是一个从Operator manifest构建的容器image,其中包含一个bundle。Bundle image由Open Container Initiative(OCI)spec容器registry存储和发布,如 Quay.io 或者DockerHub。

Catalog source

Catalog source代表OLM可查询的元数据存储,以发现和安装Operator及其依赖项。

Channel

频道为Operator定义更新流,用于为订阅者滚动更新(roll out update)。频道头指向该频道的最新版本。例如, stable 频道中会包含Operator的所有稳定版本,按照从旧到新的顺序排列。

Operator可以有几个频道,若订阅与特定频道绑定,则只会在该频道中查找更新。

Channel head

频道头是指特定频道中最新已知的更新。

Cluster service version(CSV)

Cluster service version(CSV)是一个从Operator元数据创建的YAML manifest,可辅助OLM在集群中运行Operator。它是Operator容器image附带的元数据,用于在用户界面填充logo、描述和版本等信息。

CSV也是运行Operator所需的技术信息源,比如其所需的RBAC规则,及其管理或依赖的CR。

Dependency

Operator可能会依赖于集群中另一个Operator的存在。例如,Vault Operator依赖于etcd Operator的数据持久化层。

OLM通过确保在安装过程中,Operator和CRD的所有指定版本都已安装,来解决依赖关系。通过在目录中查找并安装那些“满足所需的CRD API,且与软件包或bundle不相关”的Operator,来解决该依赖关系。

Index image

在bundle格式中,index image是指数据库(数据库快照)image,其中包含关于 Operator bundle(包括所有版本的CSV和CRD)的信息。此索引可以托管集群中Operator的历史记录,并可使用 opm CLI 工具添加或删除Operator来加以维护。

Install plan

安装计划(install plan)是一个资源计算列表,为自动安装或升级CSV而创建。

Multitenancy

OCP中的tenant是指一个用户或一组用户,为一组部署的工作负载(通常由namespace或project表示)共享通用的访问和权限。可以使用租户在不同的组或团队之间提供一定级别的隔离。

当集群由多个用户或组共享时,它被视为多租户(multitenant)集群。

Operator group

Operator group将部署在同一namespace中的所有Operator配置为 OperatorGroup 对象,以便在一系列namspace或集群范围内监视其CR。

Package

在bundle format中,package是一个目录,其中包含每个版本的Operator的发布历史记录。CSV manifest中描述了Operator的发布版本和CRD。

Registry

Registry是一个存储Operator的bundle image的数据库,每个image都包含所有频道的所有最新和历史版本。

Subscription

Subscription通过追踪package中的频道来保持CSV更新。

Update graph

更新图表把CSV的版本关联到一起,与其它打包软件的更新图表类似。可以顺序安装Operator,也可以跳过某些版本。在添加新版本时,更新图表只会在头上增长。

参考

  • https://access.redhat.com/documentation/en-us/openshift_container_platform/4.14/html-single/operators/index

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

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

相关文章

腾讯云4核8G服务器能支持多少人访问?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

Java+SpringBoot+Vue:高校科研管理的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

ubuntu22.04@laptop OpenCV Get Started: 007_color_spaces

ubuntu22.04laptop OpenCV Get Started: 007_color_spaces 1. 源由2. 颜色空间2.1 RGB颜色空间2.2 LAB颜色空间2.3 YCrCb颜色空间2.4 HSV颜色空间 3 代码工程结构3.1 C应用Demo3.2 Python应用Demo 4. 重点分析4.1 interactive_color_detect4.2 interactive_color_segment4.3 da…

docker 2:安装

docker 2:安装 ‍ ubuntu 安装 docker sudo apt install docker.io‍ 把当前用户放进 docker 用户组,避免每次运行 docker 命都要使用 sudo​ 或者 root​ 权限。 sudo usermod -aG docker $USER​id $USER ​看到用户已加入 docker 组 ​​ ‍ …

【深度学习】S2 数学基础 P1 线性代数(上)

目录 基本数学对象标量与变量向量矩阵张量降维求和非降维求和累计求和 点积与向量积点积矩阵-向量积矩阵-矩阵乘法 深度学习的三大数学基础 —— 线性代数、微积分、概率论; 自本篇博文以下几遍博文,将对这三大数学基础进行重点提炼。 本节博文将介绍线…

LeetCode、72. 编辑距离【中等,二维DP】

文章目录 前言LeetCode、72. 编辑距离【中等,二维DP】题目链接与分类二维DP 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容…

C++笔记1:操纵符输入输出

C操纵符用来控制输出控制,一是输出的形式,二是控制补白的数量和位置。本文记录一下,在一些笔试的ACM模式可能有用。其中1-4节的部分是关于格式化输入输出操作,5-6节的部分是关于未格式化输入输出操作。 1. 控制布尔值的格式 一般…

嵌入式Qt 计算器界面设计

一.计算器界面设计 计算机界面程序分析&#xff1a; 需要用到的组件&#xff1a; 界面设计&#xff1a; 界面设计实现&#xff1a; 实验1&#xff1a;计算器界面设计 #include <QtGui/QApplication> #include <QWidget> //主窗口 #include <QLineEdit> //文…

医院排队叫号系统的设计与实践

随着医疗服务需求的增加&#xff0c;医院排队叫号系统成为了现代医院管理的必备工具。它不仅可以提高医院服务效率&#xff0c;减少患者等待时间&#xff0c;还可以优化医院资源利用&#xff0c;提升患者就诊体验。本文将介绍医院排队叫号系统的设计与实践&#xff0c;包括系统…

autojs通过正则表达式获取带有数字的text内容

视频连接 视频连接 参考 参考 var ctextMatches(/\d/).findOne()console.log("当前金币"c.text()) // 获取当前金币UiSelector.textMatches(reg) reg {string} | {Regex} 要满足的正则表达式。 为当前选择器附加控件"text需要满足正则表达式reg"的条件。 …

三分钟教你如何把不要钱的ChatGPT3.5用出花钱4.0的效果!

三分钟教你如何把不要钱的ChatGPT3.5用出花钱4.0的效果&#xff01; 关注微信公众号 DeepGo 计算机杂谈及深度学习记录&分享 上一期我们聊到 ChatGPT4.0确实在各方面都优于3.5 花了钱的就是不一样 但我们有没有办法去弥补这一差距呢&#xff1f; 今天我就来教你 转发出去让…

海量数据处理商用短链接生成器平台 - 4

第六章 架构核心技术-池化思想-异步结合 性能优化最佳实践 第1集 RestTemplate里面的存在的问题你知道多少- Broken pipe错误 项目就更新到第六章了&#xff0c;剩下的内容 放百度网盘里面了&#xff0c;需要的来取。 链接&#xff1a;https://pan.baidu.com/s/19LHPw36dsxPB7…

推荐一门 MIT 的计算机入门课

你好&#xff0c;我是坚持分享干货的 EarlGrey&#xff0c;翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助&#xff0c;请关注我&#xff0c;一起向上进击。 计算机科学及编程导论在MIT的课程编号是6.00.1&#xff0c;是计算机…

Pytorch学习03_TensorBoard使用02

Opencv读取图片&#xff0c;获得numpy型数据类型 复制图片的相对路径 目前这种type不适用&#xff0c;考虑用numpy类型 安装opencv&#xff0c;在pytorch环境下 pip install opencv-python 导入numpy import numpy as np 将PIL类型的img转换为 NumPy 数组 img_arraynp.array…

VC++ 绘制折线学习

win32 有三个绘制折线的函数&#xff1b; Polyline&#xff0c;根据给定点数组绘制折线&#xff1b; PolylineTo&#xff0c;除了绘制也更新当前位置&#xff1b; PolyPolyline&#xff0c;绘制多条折线&#xff0c;第一个参数是点数组&#xff0c;第二个参数是一个数组、指…

【教学类-48-04】202402013“天干地支 六十一甲子”.

背景需求&#xff1a; 2024年是甲辰龙年。 “辛亥革命”“甲午海战”"戊戌变法”都有天干地支的身影。 参观历史建筑&#xff0c;不少书法碑刻上都是用天干地支进行年代记名 所以我用Python来制作60一甲子的所有天干地支组合 60一甲子 天干地支的排序 作者&#xff1a;阿…

【教程】Kotlin语言学习笔记(一)——认识Kotlin(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 文章目录 【Kotlin语言学习】系列文章一、Kotlin介绍二、学习路径 一、…

片上网络NoC(4)——直连拓扑

目录 一、前言 二、直连拓扑 三、总结 一、前言 本文中&#xff0c;我们将继续介绍片上网络中拓扑相关的内容&#xff0c;主要介绍直连拓扑&#xff0c;在此之前&#xff0c;我们已经介绍过了拓扑的指标&#xff0c;这将是继续阅读本文的基础&#xff0c;还没有了解相关内容…

GEE:CART(Classification and Regression Trees)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…

Spring Boot 笔记 012 创建接口_添加文章分类

1.1.1 实体类添加校验 package com.geji.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称NotEmptypriva…