安装和配置

本节描述了如何在控制器节点上安装和配置 Workflow Service,代号为 mistral。

注意

Mistral 可以以独立模式使用,也可以与 OpenStack 协同工作。

如果 Mistral 与 OpenStack 一起使用,您必须已经拥有一个可用的 OpenStack 环境,并且至少安装了以下组件

  • 支持 API v3 的 Keystone

请注意,安装和配置可能因发行版而异。

概述

Workflow service 由以下组件组成

Mistral API 服务

提供一个 REST API,用于操作和监控工作流执行。

Mistral Engine 服务

控制工作流执行并处理其数据流,将完成的任务放入队列,将数据从任务转移到任务,处理条件转换等。

Mistral Executor 服务

执行任务操作,从队列中获取任务,运行操作并将结果发送回引擎。

Mistral Notifier 服务

根据工作流和任务执行的状态发送通知。 此服务是可选的.

Mistral Event Engine 服务

基于外部事件(如 RabbitMQ、HTTP、kafka 等)创建工作流执行。 此服务是可选的.

mistral 项目还提供以下 python 库

mistral-dashboard

Mistral Dashboard 是 Horizon (OpenSack dashboard) 的插件。

python-mistralclient

Python 客户端 API 和命令行界面。

mistral-lib

一个由 mistral 内部使用的库。

mistral-extra

一个额外的动作集合,可以安装以使用 openstack 动作扩展 mistral 标准动作(默认情况下 mistral 没有 OpenStack 相关的动作)。

先决条件

安装以下依赖项

在基于 apt 的发行版上

$ apt-get update
$ apt-get install python3 python3-venv python3-pip git

在基于 dnf 的发行版上

$ dnf update
$ dnf install python3 python3-venv python3-pip git

注意

您可能需要根据您的发行版调整之前的命令。

安装

注意

有关如何使用 devstack 安装 Mistral 的说明,请参阅 Mistral Devstack 安装

克隆仓库并进入仓库目录

$ git clone https://opendev.org/openstack/mistral
$ cd mistral

创建一个 venv

$ python3 -m venv venv
$ source venv/bin/activate

现在安装 mistral

$ pip install \
  -c https://releases.openstack.org/constraints/upper/master \
  -r requirements.txt \
  .

注意

您可能需要根据您正在安装的 mistral 版本调整约束文件

生成配置文件

$ pip install tox
$ tox -egenconfig

创建 mistral 目录并复制示例配置文件

$ mkdir /etc/mistral
$ cp etc/mistral.conf.sample /etc/mistral/mistral.conf

编辑配置文件

$ vi /etc/mistral/mistral.conf

您可能还想安装 mistral-extra 包,以便可以使用 opentack 动作(但这并非强制性的)

$ pip install mistral-extra

配置 Mistral

参阅 配置和策略指南 以查找有关如何配置 Mistral 服务器的一般信息。

首次运行之前

安装后,您将在虚拟环境中看到 mistral-servermistral-db-manage 命令。

可以使用 mistral-db-manage 命令进行数据库迁移。

将数据库更新到最新版本

# For MySQL / MariaDB / PostgreSQL
$ mistral-db-manage upgrade head

# For SQLite - do not use sqlite in production!
# e.g. connection = 'sqlite:////var/lib/mistral.sqlite'
$ python tools/sync_db.py

在启动 Mistral 服务器之前,运行 mistral-db-manage populate 命令。它使用 Mistral 为所有 Mistral 用户提供的所有标准动作和标准工作流创建 DB。

$ mistral-db-manage populate

有关 mistral-db-manage 脚本的更多详细信息,请参阅 Mistral 升级指南

运行 Mistral 服务器

要运行 Mistral 组件,请在 shell 中执行以下命令

$ mistral-server --server all

注意

在这种情况下,API 将仅启动一个 worker! 如果您需要 API 的更多 worker,则应使用 uWSGI 启动 API(如下所示)

单独运行 Mistral 组件

您可以选择在多个服务器上拆分 Mistral 组件的执行,例如仅启动引擎

$ mistral-server --server engine

–server 命令行选项可以是一个逗号分隔的列表,因此您可以构建组件的组合,如下所示

$ mistral-server --server engine,executor

有效选项是

  • all(如果未指定,则默认)

  • api

  • engine

  • executor

  • event-engine

  • notifier

使用 uWSGI 运行 Mistral API

WSGI 应用程序

直接运行 mistral-server --server api 的缺点是它将仅启动一个进程(worker)来处理 HTTP 请求。

虽然这对于小型/开发部署可能足够,但对于生产环境可能不够。

在这种情况下,Mistral 在 mistral.wsgi:application 处提供了一个 WSGI 应用程序,可与任何 WSGI 服务器一起使用。

以下示例使用 uWSGI

使用 uWSGI

安装 uWSGI

$ pip install uwsgi

创建一个 uWSGI 配置文件(例如,/etc/uwsgi/mistral.ini

[uwsgi]
# Listen on port 8989 and start as a full web server
http-socket = 0.0.0.0:8989

# Stats on port 9191
stats = 0.0.0.0:9191

# App to start
virtualenv = /opt/openstack/mistral/
module = mistral.wsgi:application

# load apps in each worker instead of the master
lazy-apps = true

# Number of processes
processes = 4

# Will kill processes that run more that 60s
harakiri = 60

# Enable threads
enable-threads = true

# Gracefully manage processes
master = true

# Thunder-lock - serialize accept() usage (if possible)
thunder-lock = true

启动 uWSGI

$ uwsgi --ini /etc/uwsgi/mistral.ini

传递配置选项

默认情况下,Mistral 将使用其标准配置文件搜索路径

您还可以提供 config-dirconfig-file 选项给 mistral-server 命令行,以提供自定义文件/文件夹

$ mistral-server --config-dir /etc/mycustomdir/

请注意,在使用 uwsgi 时,您将无法提供这些参数。在这种情况下,可以使用 MISTRAL_CONFIG_DIR 和/或 MISTRAL_CONFIG_FILE 环境变量代替

[uwsgi]
...
env = MISTRAL_CONFIG_DIR=/etc/mycustomdir/

使用 OpenStack-Ansible 部署

您还可以使用 OpenStack-Ansible 部署和设置 Mistral,方法是遵循 Mistral role for OpenStack-Ansible,它将 Mistral 安装和配置为您的 OpenStack 部署的一部分。