简介:OLM(Operator Lifecycle Manager)作为Operator Framework的一部分,旨在提供自动安装、升级及生命周期管理Operator的工具。同时,OLM以Operator形式进行部署。本文将深入探讨OLM的基本架构和安装使用方法。
OLM组件模型定义OLM的目标是使无特定专业知识的用户能够自助部署并管理复杂的分布式应用,如etcd、大数据分析或监控服务。其设计旨在提供以下通用管理能力:
自动安装和管理Operator
提供面向云原生应用的通用管理能力
基于上述目标,OLM定义了组件模型和架构,包括OLM Operator和Catalog Operator。
OLM包含两个核心Operator:OLM Operator和Catalog Operator。OLM Operator负责创建Deployment、Serviceaccount、RBAC等角色和角色绑定,而Catalog Operator则负责CRDs和CSVs等资源的创建。
在介绍OLM Operator和Catalog Operator之前,我们先了解ClusterServiceVersion的定义。它是OLM工作流程的基础元素,包含了用户业务应用的元数据和运行时刻信息,包括依赖资源等。
OLM Operator基于ClusterServiceVersion安装对应的应用实例,而不会关注CSV中声明的依赖资源对应的CRD模型的创建注册工作。这为用户提供了逐步适应OLM架构并最终应用起来的熟悉过程。OLM Operator对依赖资源的监听可以是全局all namespaces的,也可以只限定在指定namespace下。
Catalog Operator主要负责解析CSV中声明的依赖资源定义,并通过监听catalog中安装包对应channels的版本定义完成CSV对应的版本更新。用户通过创建Subscription模型设置channel所需安装包和更新的拉取源,当可用更新被发现时,一个InstallPlan模型会在相应namespace中创建。用户也可手动创建InstallPlan,其中包含目标CSV定义和相关审批策略,Catalog Operator创建执行计划以创建CSV所需的依赖资源模型。一旦用户完成审批,Catalog Operator创建InstallPlan中的资源,此时OLM Operator关注的依赖资源条件得到满足,CSV定义的Operator实例由OLM Operator创建。
OLM结构介绍
OLM的基础架构包括Operator Framework中的两个重要元Operator和扩展资源,用于进行用户应用Operator的生命周期管理。在自定义CSV模型中,定义了用户部署Operator的资源组合,包括Operator如何部署、管理的自定义资源类型以及使用的K8s原生资源等。
OLM Operator在安装对应的Operator实例前要求其管理的自定义资源模型已经在目标安装集群中注册,此动作可以由集群管理员手动kubectl方式完成,也可以利用Catalog Operator完成。Catalog Operator除了完成目标CRD模型的注册,还负责资源模型版本的自动升级工作。其工作流程包括:
监听CSV模板中安装所需依赖资源的注册或变更
启动应用Operator的安装和升级工作
最终创建和管理Kubernetes集群中的自定义资源实例模型
OLM的安装
了解了OLM的基础架构后,我们探讨其安装方法。社区代码中提供了各项部署资源对应的模板,用户可以方便地通过修改相应部署参数完成定制化的OLM安装。
在官方发布的公告中,可以找到最新发布版本和各版本对应的安装说明。以0.13.0版本为例,用户可以执行自动化安装脚本。手动安装OLM所需的部署模板命令包括:
克隆OLM代码仓库到本地
执行`make run-local`命令启动minikube,并通过minikube自带docker daemon在本地构建OLM镜像。同时,该命令基于仓库deploy目录下的local-values.yaml作为配置文件构建运行本地OLM。通过`kubectl -n local get deployments`验证OLM组件是否已成功安装运行。
针对用户的定制化安装需求,OLM支持通过配置模板指定参数来生成定制化的部署模板并安装。以下是支持配置的模板参数示例。
用户可以通过以下方式进行模板的定制化开发和在指定集群中的安装。
最后,用户可以通过环境变量`GLOBAL_CATALOG_NAMESPACE`定义catalog operator监听全局catalogs的指定namespace,默认情况下,安装过程会创建`olm`命名空间并部署catalog operator。
依赖解析和升级管理
OLM在管理Operator版本时,会遇到依赖解析和正在运行的operator实例的升级管理问题。为了保证所有operators在运行时刻的可用性,OLM在依赖解析和升级管理流程中需要确保:
依赖解析的正确性
确保在升级过程中不会导致任何依赖冲突
支持快速回滚和错误恢复
OLM通过实现依赖解析逻辑来解决版本迭代中的问题。假设在某个namespace下运行一组operator,当需要进行版本迭代时,OLM将根据依赖关系构建一个有向无环图(DAG),从而确保所有operator都升级到最新版本。
依赖解析和升级管理的工作流程如下:
OLM监控CSV、CatalogSource和Subscription等扩展模型的变化
通过CatalogSource存储Operator元数据
OLM使用Operator仓库相关API查询可用或可升级的operator版本
在CatalogSource中,operators通过channels标识封装好的不同版本安装包
用户希望升级某个operator时,可通过Subscription订阅具体需要安装的channel中的指定版本软件包。如果订阅中的包尚未安装在目标集群中,OLM将安装catalog/package/channel等下载源的最新版本operator。
CSV定义中,用户可通过`replaces`字段声明需要替换的operator。OLM收到请求后,从不同channels寻找可升级的CSV定义,构建一个DAG。在升级过程中,如果存在未安装的中间版本,系统将自动构建升级路径并确保路径上中间版本的安装。
依赖解析和升级管理示例
在版本迭代中,OLM的依赖解析逻辑确保了依赖关系的正确性,避免了版本升级过程中的冲突。以下示例展示了OLM在依赖解析和升级管理中的应用:
多个CRD版本的升级
多自定义API版本的升级
OLM通过依赖解析逻辑确保所有operator和API在升级过程中保持兼容性,避免了因版本不匹配导致的系统故障。
总结
本文介绍了OLM的基本架构、使用方法以及安装流程。通过本章的学习,读者对OLM的工作原理、架构设计有了清晰的认识,并通过示例代码加深了对OLM应用实践的理解。本文旨在为在工作实战中通过Operator Framework实现产品能力扩展提供指导基础。