Operator生命周期管理
01 背景
随着 Kubernetes 成为云原生时代容器编排的事实标准,社区统一使用 CRD + Controller 的方式来扩展 Kubernetes 的能力,开发云原生应用程序。这也就是 Operator 的实现。而构建 Operator 的门槛相对比较高,开发者需要了解 Kubernetes 的知识并具备相关的经验。
Operator Framework 的出现为开发制定了一整套框架,它整合了很多 Kubernetes 的专业知识,提供了一整套标准化工具方便在 Kubernetes 上轻松地创建应用程序。 其中 Operator Lifecycle Manager,简称 OLM,用来管理 Operator 的生命周期。 OLM 扩展了 Kubernetes 的能力,遵循 Kubernetes 交互设计理念,提供声明式的方式来安装、更新和管理 Operator 及其在集群中的依赖。
Operator 和 OLM 的关系,就如同在操作系统里,通过软件包管理去安装更新软件。OLM 在设计时,自身组件也是用 Operator 方式进行部署。接下来着重介绍 OLM 的模型定义、组件和安装使用。 02 模型
OLM 主要定义了以下资源对象模型:
2.1 CatalogSource
目录源可以理解成 Operator 仓库 ,它用来存储 Operator 的元数据信息,包括了集群服务版本信息、自定义资源信息、软件包信息。可以查询该目录源下有哪些 Operator 可以提供使用。以下示例是 OLM 默认安装提供的目录源,利用社区 Operator 这个 repo 构建出的镜像。该 repo 存放了大量社区 Operator 的元数据信息,并且各个 Operator 的开发者也会不定期地更新该仓库,保证最新开发的 Operator 能够提供给社区使用。官方 OperatorHub 也使用了这个 Operator 仓库。
2.2 Subscription
订阅表示要在某个目录源下,安装指定版本的 Operator。 通过订阅某个频道,获取 Operator 的版本更新信息,以及在安装时指定自动或者手动的批准策略。不同的批准策略会影响 Operator 的安装升级。另外在订阅信息里可以添加一些配置,如环境变量、文件挂载等,用于最终 Operator 控制器的部署。
2.3. InstallPlan
在安装 Operator 时,会创建一个如上所述的订阅对象,然后会创建安装计划。 安装计划表示安装 Operator 或者升级 Operator 到特定版本时,需要创建的一组资源。安装版本就是 ClusterServiceVersion 的对应版本。这里会根据上面订阅对象里定义的不同批准策略,进行以下操作: 当设置为自动批准策略,则安装计划会自动执行,OLM 会自动管理并升级 Operator,确保集群始终运行最新版本。 当设置为手动批准策略,需要由管理员或者拥有批准权限的用户进行批准,方可执行。
安装计划会创建指定的资源,这里主要包括 ClusterServiceVersion、CRD 和 Operator SDK 打包 Bundle 里的其他一些依赖资源,并在订阅所在的命名空间下安装 Operator。 这里需要特别注意,当有一个 Operator 正在进行审批时,其他的 Operator 无法直接安装。
2.4. OperatorGroup
Operator 组为 Operator 的安装提供多租户支持。 当开发 Operator 时,可以设置该 Operator 部署集群后的作用范围,也就是通常说 watch 哪些命名空间。可以在 ClusterServiceVersion 里设置具体的安装模式。OLM 默认会在 operators 命名空间下安装一个 global-operators 的 Operator 组,该组定义安装在所有命名空间。当选择安装某个 Operator 时,根据不同的安装模式,来确定是否创建 Operator 组。分为以下几种情形: 可以将全局作用范围的 Operator 安装在 operators 命名空间下。 可以在其他命名空间下创建一个全局的 Operator 组,然后进行 Operator 安装。 针对只作用于某些命名空间的 Operator,可以创建 Operator 组,定义好要选择安装 Operator 的命名空间列表。OLM 会在这些命名空间下创建 Operator 所需要的 RBAC 权限。
2.5. ClusterServiceVersion
集群服务版本,简称 CSV,记录了某个 Operator 具体的版本信息。 它提供了 Operator 元数据清单信息,主要包括了 Operator 的名称、版本、图标、描述、安装模式、能力级别、维护者信息、安装所需资源并提供 Operator 使用的一些 sample。在发布新版本 Operator 时会提供版本更新策略。
03 架构
如图所示,OLM 的组件包括 Package Server、Operator Registry、Catalog Operator、OLM Operator。
Package Server: 会在集群上注册 packagemanifest 的 APIService,通过 gRPC 协议调用 operator registry 服务,获取 package 信息,并生成一个个 packagemanifest 对象。
Operator Registry: 上面 catalogsource 创建后,运行的 pod 其实就是 registry 服务。该服务存储了 CSV、CRD、软件包和频道的元数据信息。package manifest 是 registry 中的一个实体对象,软件包里会包含多个频道,每个频道会指向特定的 CSV 版本。各个 CSV 版本之间会明确替换关系以及升级规则,这样可以完成 Operator 每个中间版本的替换和安装,最终达到运行频道中最新版本的目的。
Catalog Operator: 负责目录源的创建,并负责完成 Operator 部分资源的安装。主要包括以下步骤:
1. 监听目录源,可以定义不同类型的 catalogsource 资源对象。
2. 当目录源是 gRPC 类型时,可以使用 catalogsource 镜像去运行 registry server 的 pod 或者直接指定一个已存在 registry server 的 gRPC 地址。当目录源是 configmap 或 internal 类型时,会创建 configmap server。
3. 由上述 Package Server 组件完成相应的功能。
4. 安装 Operator 时,会创建订阅,订阅信息里会指定需要安装 Operator 的版本。此时 Catalog Operator 控制器会运行 bundleUnpack job,该 job 会运行 pod 去解压指定 Operator 的 bundle 镜像,将 bundle 镜像里Operator 的元数据信息,写入到 configmap 资源对象里。
5. 控制器会为订阅创建相对应的 installplan 资源对象。
6. 基于 configmap 里提供的 Operator 元数据信息,调和 installplan 对象,添加需要安装的资源信息。包括 CSV 资源、CSV 里定义的依赖资源如 CRD、APIService 和 webhook、RBAC 相关资源以及 Operator 运行依赖的其他资源对象。
7. 根据 installplan 对象里的安装内容,进行资源对象的创建。
另外控制器会监听目录源中,安装包对应的频道版本是否有更新,当有更新时,同样会创建出新版本的 CSV 资源和 installplan 对象,以便进行更新升级。
OLM Operator: 在 Catalog Operator 控制器完成一些资源对象创建后,OLM Operator 的控制器主要调和 CSV 资源和 Operator 组资源,执行以下逻辑:
8. OLM Operator 控制器会处理 CSV 的版本升级,并保持使用最新的版本。
9. 当 Operator 作用在所有命名空间时,会将安装命名空间下的 role、rolebinding 提升到 clusterrole 和 clusterrolebinding,这样可以拥有集群管理的权限。
10. Operator 作用在指定多个命名空间或所有命名空间时,根据 olmconfig 里 disableCopiedCSVs 的功能配置,在其他命名空间下拷贝安装的源 CSV 去创建新的 CSV。
11. 根据不同的安装模式会选择创建 Operator 组,当 Operator 作用在指定多个命名空间时,会到这些命名空间下创建 Operator 运行需要的 RBAC 权限。
12. 根据订阅信息里的 config 配置和 CSV 里定义的 deployment 的安装信息,由 OLM Operator 完成每个 Operator 控制器部署。 04 安装
在了解 OLM 的功能和基础架构后,可以看一下 OLM 的安装。这里以 0.21.2 版本为例,提供脚本和命令行安装两种方式。
4.1. 脚本
通过执行以下命令来安装 OLM。
4.2. 命令行
大概的安装过程如下:
1. 部署 OLM 资源对象模型,即各个自定义资源对象 CRD;
2. 部署 OLM olm-operator 和 catalog-operator 组件,创建名为 olm-operator 和 catalog-operator 的 deployment ;
3. 部署 OLM package-server 组件,先创建名为 packageserver 的 CSV,CSV 创建后会部署一个名为 packageserver 的 deployment;
4. 部署一个 operator-registry组件,先创建名为 operatorhubio-catalog 的 catalogsource CR,catalog-operator 组件 watch 该资源并使用 catalogsource CR 里指定镜像生成 pod,该 pod 提供50051端口的 gRPC 服务;
安装完后,可以调用 packagemanifest 的 API,获取到目录源提供了哪些 Operator。
05 使用
在完成 OLM 默认安装后,用户可以去安装自己需要的 Operator。如安装Elasticsearch Operator,去创建一个订阅信息。
创建一个 Operator 组,只在 eck1 和 eck2 命名空间下安装Elasticsearch Operator。
订阅创建后,会创建安装计划,并进行 CSV 等资源的创建。
安装成功后,会在集群上安装 CRDs,并在 eck1 命名空间下运行 elastic-operator 的deployment,此时就可以在 eck1 和 eck2 命名空间下,创建 CR 使用 ECK 的功能。
06 总结
目前 Operator 技术已经成为扩展 Kubernetes 能力的标准方式 ,Operator 的开发从像使用原生资源对象一样扩展应用,发展到了封装自己的组件,开发一些有状态的、持久化的中间件,将能力以标准的方式暴露出来。在开发过程中,OLM 会提供软件的打包、安装和升级,并实现一些监控告警能力,更加高效地进行 Operator 的生命周期管理,简化运维的复杂度。目前官方 OperatorHub 上提供的 Operator 已经有 297 个,涉及应用运行时、数据库、可观测性、消息中间件、开发工具等众多类别。随着像红帽、亚马逊、腾讯云等巨头公司的使用,Operator 的技术发展也会更加地成熟稳定。
参考资料
[1] https://operatorhub.io/
[2] https://github.com/k8s-operatorhub/community-operators
[3] https://operatorframework.io/operator-capabilities/
[4]https://github.com/operator-framework/operator-sdk
[5] https://github.com/operator-framework/operator-lifecycle-manager
[6] https://github.com/operator-framework/operator-registry
[7] https://github.com/operator-framework/community-operators
[8] https://olm.operatorframework.io/docs/getting-started/#installing-olm-in-your-cluster
本文作者 : 潘桂才
云原生高级后端开发工程师
热门推荐: 快来 0 成本体验云原生数字底座。
https://docs.daocloud.io/download/dce5/
复古传奇自古以来法师血量最少?脆皮法师实现血量自由每次玩传奇的时候都非常纠结职业的选择战士的话血量多适合PK但是缺点是刷怪贼慢法师是刷怪最爽的按道理来说装备等级都是最全缺点是血量少得可怜啊道士是最平稳的血量中等技能也是比较中庸的最
炉石传说新手与回归玩家可获得的免费套牌更新新手玩家与回归玩家可获得的免费套牌已经更新!现在可以更轻松地领取免费套牌。只要你连续120天未登录过游戏,在登录时便会获得免费套牌通知!在此提醒,新玩家获取免费套牌的方式如下登录炉
乒乓球冠军王楠的传奇人生日本奥运会期间,乒乓健儿们取得了优异的成绩。这时候王楠夫妇做出一个决定,奖励奥运会上获得乒乓球金牌和银牌的运动员每人一套住房。当时有很多人会问王楠怎么有钱。她以前也是乒乓球冠军,乒
最不像专属的宝可梦招式,下个世代或加入技能学习机1。神奇蒸汽威力不错的妖精系特攻(90),有时会让对方混乱(20)。伽勒尔双弹瓦斯的专属招式。这招是伽勒尔双弹瓦斯重要输出技能,毕竟它不会月爆,不过双弹瓦斯85特攻也别指望打多少伤
1。76传奇传奇运九套项链之最,真让人大开眼界热血传奇中运九套的作用不用老道多赘述大家都知道。关于运九套那些稀奇古怪的搭配多数玩家就不一定知道了。咱们今天就说说原始三根幸运项链搭配而成的那些运九套之最,全都见过的必须是资深老玩
热血传奇十大家族之一霸气家族你听说过他们的事迹吗霸气家族是05年的家族,曾经的布联盟中的小弟,在热血传奇十大家族中排名第三。家族人气一直是霸气法宝,王者师从未掉下1000,加上天浪师一直以复古第一师的自居,论战斗力或许比布拉格强
热血传奇新冰雪传奇侠客冰雪技能升级及获取方式新冰雪传奇侠客冰雪内测第五天,开服的火爆画面现在已经不见了,大部分玩家都已经熟悉了玩法,静等开服了,现在只有部分玩家再继续玩,这是一群真正热爱玩的玩家。等公测人数肯定会变多,那么侠
传奇世界群英版金装裁决新手玩法详解哈喽!大家好,我是动若。传奇世界群英版之金装裁决的火热程度在各个平台都有了彰显,新老玩家都在此有了自己的属地。这款还原度极高的传世手游已经深深打动各位玩家,现在就和小编一起进入游戏
国际乒联新加坡总决赛,第一轮就看点满满12月47号,国际乒联新加坡总决赛,男女各16位高手巅峰对决华山论剑,梁决出年度男女单冠军。刚看了比赛赛程,12月4号第一天就看点满满,绝对会很好看很精彩。看点一,冤家路窄两大美女
插混十年前画下的饼,终于兑现了日常通勤用电,自驾烧油!十一年以前,随着这样一句宣传语,史上第一种插电式混合动力汽车(PHEV),双模混动的比亚迪F3DM上市。采用混动系统,同时安装了较一般混动汽车更大的电池包,
美韩巨头瓜分94全球市场,国产存储芯片还有机会吗?本文来源时代周报作者杨玲玲缺芯潮持续,何时缓解仍未有定论。5G带动半导体需求增加,加上地缘政治和疫情驱动恐慌性备货,晶圆代工产能供不应求的情况依然存在。近日,在TrendForce