Python中的ops库

2025年3月5日 | 阅读6分钟

引言

Python 的 ops 库旨在简化事件驱动程序的创建和控制,特别是那些在 Juju 环境中运行的 charm。它使开发人员无需担心观察事件、响应环境变化以及在编写 charm 时与其他应用程序或服务进行通信的复杂性。

Juju 通常用于在任何给定的云上部署、集成和管理应用程序,而 ops 使开发 charm 的过程更加容易,尤其是在使用 Python 进行开发时。ops 框架消除了响应生命周期事件的许多复杂性,从而促进了应用程序在其整个生命周期中的管理。

ops 库中的关键概念

CharmBase

CharmBase 是一个抽象类,是系统中所有 charm 的根。它包含使生成的 charm 与 Juju 交互所需的最低代码量,并了解 charm 的生命周期、服务之间的关系以及任何配置的提供。通过这种形式的扩展,可以定义 charm 在部署的各种状态下的行为,从而构建事件驱动的应用程序。

框架

在 ops 库中,有一个处理 charm 事件的框架,其形式为一种架构。它是将事件(安装、启动、停止)链接到处理这些事件的函数的核心系统。该框架有助于使这些事件的观察和管理变得更加简单,并使 charm 的开发更加直接。

事件处理

事件处理是 ops 库的主要关注点。每个 charm 都可以响应许多生命周期事件,包括安装、启动、停止等等。这些事件实际上是 charm 的不同生命周期,并解释了何时应该或不应该采取某些操作。因此,ops 库中的事件处理是声明式的,这使得 charm 开发人员更容易编写事件处理逻辑。

如何使用 ops 库?

设置环境

在使用 ops 库之前,您需要设置好环境并安装必要的工具:在使用 ops 库之前,您需要设置好环境并安装必要的工具

此命令安装了用于打包和管理 charm 的 charmcraft。

创建一个基本的 charm

创建 charm 有多种方法,其中一种是通过 charmcraft。一旦结构搭建完成,您的 charm 将继承自 CharmBase 类,并在 ops 框架和事件下运行。

以下是如何使用 ops 库构建 charm 的简单示例:以下是如何使用 ops 库构建 charm 的简单示例

输出

 
Installing the charm...
Starting the service...

处理事件

ops 库采用事件驱动的方法,其中 charm 的操作由反映应用程序生命周期的事件触发。通过管理这些事件,charm 可以指定如何处理各种操作,包括安装、启动、停止、配置修改等。

以下是使用 ops 库处理事件的结构化视图

安装事件

  • 安装事件是基本类型的 charm 事件之一,在 said charm 安装到系统时发生。这通常应该放置需要设置任何初始条件、应用程序或服务的逻辑的地方。

启动事件

  • 安装事件发生在 charm 安装期间,而启动事件发生在 charm 服务初始化时。这是一个重要的事件,因为大多数时候它表明应用程序已完全安装并准备好执行。您可以在这里启动主服务或执行启动应用程序所需的任何操作。

停止事件

  • 如果服务被用户或系统自动关闭,则会发生停止事件。这是清理资源、正确关闭服务并确保 charm 不会留下混乱状态的好时机。

打包和部署 charm

编写完 charm 后,您可以使用 charmcraft 进行打包

这将创建一个 .charm 文件,您可以使用 Juju 进行部署

ops 库的应用

ops 库在 charm 开发中起着举足轻重的作用,这对于事件、云和 MLOps 应用具有重要意义。以下是 ops 库的一些关键应用:

  1. 简化的 charm 开发
    ops 库隐藏了大多数实现细节,但这意味着开发人员在创建 charm 时可以专注于 charm 的关键元素。ops 库避免了执行操作并将高级事件生命周期转换为 Juju 模型的需求,因为高级模型已由框架提供。这种简化的开发模型允许
    • 高效的事件管理:可以提供安装、启动和停止等一系列事件,开发人员可以不必关心这些事件是如何广播的。
  2. 事件驱动的应用程序
    这很重要,因为当今的许多应用程序,尤其是微服务,都是事件驱动的。ops 库对于创建事件 charm 最有帮助,这些 charm 基于生命周期事件或其他事件运行。使用 ops 库构建的 charm 可以轻松
    • 响应变化:处理配置、服务关系或环境的动态条件,例如根据资源可用性缩放服务,或服务故障的场景。
  3. 与 Juju 集成
    ops 库与 Juju 紧密集成,Juju 是 Canonical 用于在不同云上运行应用程序的应用程序建模工具。这种集成提供了
    • 跨云兼容性:使用 ops 构建的 charm 可以部署在任何云上,您可以使用 AWS 或 Azure 等公共云或私有基础设施。Juju 消除了 charm 工作云的实现细节。
  4. MLOps 和数据平台
    在创建处理 MLOps 工具和数据平台等平台的 charm 时,通常需要 ops 库。这些系统通常涉及需要相互交互的多个组件,例如
    • MLOps:常见的 charm 可以是 ML 框架,其中像 Kubeflow 这样的工具用于 ML 工作流的部署和管理很容易集成。例如,ops 库有助于简化模型训练服务、管道和推理引擎等一系列元素的生命周期管理。

结论

ops 库为创建 charm 提供了开箱即用的连贯且干净的 Python 架构,其中包括用于正确处理生命周期和事件的更高级别的抽象,用于云原生特性的应用程序。当与 Juju 良好集成时,它有助于开发人员轻松地在任何云上开发、部署和管理服务。从实现程序自动化、处理事件驱动程序、编排进程到集成 MLOps 和数据平台等系统;ops 库有助于最大限度地减少工作量并提高可扩展性。由于其高效的事件处理机制,它被认为是对于试图设计有效且易于维护的基础设施解决方案的开发人员来说是一个卓越的工具。


下一主题Orm-for-python