OCP的operator——(1)概述

文章目录

  • 概述
  • 了解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.packagevalue:packageName: prometheusversion: ">0.27.0"- type: olm.gvkvalue:group: etcd.database.coreos.comkind: EtcdClusterversion: 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.hqwc.cn/news/467959.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例:使用 VisualVM 监控应用性能8.1.3 拓展案例 1:使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2:使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…

MQTT的学习与应用

文章目录 一、什么是MQTT二、MQTT协议特点三、MQTT应用领域四、安装Mosquitto五、如何学习 MQTT 一、什么是MQTT MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,设计用于在低带宽、不稳定的网络环境中进行高效的通信…

MYSQL学习笔记:MYSQL存储引擎

MYSQL学习笔记:MYSQL存储引擎 MYSQL是插件式的存储引擎 存储引擎影响数据的存储方式 存储引擎是用来干什么的,innodb和myisam的主要区别–数据存储方式----索引 mysql> show engines; ----------------------------------------------------------…

宠物空气净化器适合养猫家庭吗?除猫毛好的猫用空气净化器推荐

宠物掉毛是一个普遍存在的问题,尤其在脱毛季节,毛发似乎无处不在。这给家中的小孩和老人带来了很多麻烦,他们容易流鼻涕、过敏等不适。此外,宠物有时还会不规矩地拉扯和撒尿,这股气味实在是难以忍受。家人们对宠物的存…

耳机壳UV树脂制作私模定制耳塞需要哪些工具和材料呢?

制作私模定制耳塞需要使用到一些工具和材料,包括但不限于以下内容: UV树脂:用于制作耳塞的主体部分,具有高硬度、耐磨、耐高温、环保等优点。耳模材料:用于获取用户的耳型,通常是一些快速固化的材料&#…

编码、理解和实现LLM中的自注意力、多头注意力、交叉注意力和因果注意力

原文链接:understanding-and-coding-self-attention 2024年1月14日 自注意力是 LLM 的一大核心组件。对大模型及相关应用开发者来说,理解自注意力非常重要。近日,Ahead of AI 杂志运营者、机器学习和 AI 研究者 Sebastian Raschka 发布了一篇…

【小赛1】蓝桥杯双周赛第5场(小白)思路回顾

我的成绩:小白(5/6) 完稿时间:2024-2-13 比赛地址:https://www.lanqiao.cn/oj-contest/newbie-5/ 相关资料: 1、出题人题解:“蓝桥杯双周赛第5次强者挑战赛/小白入门赛”出题人题解 - 知乎 (zhihu.com) 2、矩阵快速幂&…

vue三种路由守卫详解

在 Vue 中,可以通过路由守卫来实现路由鉴权。Vue 提供了三种路由守卫:全局前置守卫、全局解析守卫和组件内的守卫。 全局前置守卫 通过 router.beforeEach() 方法实现,可以在路由跳转之前进行权限判断。在这个守卫中,可以根据用…

Decian 12.x基于LNMP安装phpIPAM(IP管理系统)

phpipam是一个开源Web IP地址管理应用程序(IPAM)。其目标是提供轻便,且有用的IP地址管理系统。它是基于PHP的应用程序,具有MySQL数据库后端,使用jQuery库,ajax和HTML5 / CSS3功能。 在Debian 12中&…

学生用的台灯哪种好?推荐央视公认好用的学生护眼台灯

随着太阳的落下,家家户户点亮了灯,孩子的案桌前也备上了台灯,让孩子在明亮的光线下更好学习写作业。但是家长们知道吗?其实孩子学习的台灯也是很有讲究的,不仅仅单看亮度是否充足,如果光线不适合是非常容易…

SpringCloud-Feign:负载均衡(基于服务端)

7.Feign:负载均衡(基于服务端) 7.1 Feign简介 Feign是一个开源的声明式HTTP客户端,它可以简化HTTP API的调用过程。Feign的设计目标是使得使用者可以像调用本地方法一样调用远程服务,使得编写和维护HTTP客户端变得更加简单。类似controller…

MongoDB 与 mongo-express docker 安装

MongoDB 和 mongo-express 与 MySQL 不同,MongoDB 为 NoSQL 数据库,MongoDB 中没有 table ,schema 概念,取而代之的 collection,其中 collection 存储的为 BSON 格式,是一种类似于 JSON 的用于存储 k-v 键…