Salt 捆绑包

1. 什么是 Salt 捆绑包?

Salt 捆绑包是单个二进制软件包,包含 Salt 受控端、Python 3、必需的 Python 模块以及库。

Salt 捆绑包随附 Python 3 以及运行 Salt 所需满足的所有条件。因此 Salt 捆绑包不会将客户端上安装的 Python 版本用作系统软件。Salt 捆绑包可以安装在不满足指定 Salt 版本的要求的客户端上。

此外,还可以在所运行 Salt 受控端连接到 SUSE Manager Salt 主控端以外的 Salt 主控端的系统上使用 Salt 捆绑包。

2. 使用 Salt 捆绑包将客户端注册为受控端

建议的注册方法是使用 Salt 捆绑包进行注册。本节介绍当前实现的优点和局限性。Salt 捆绑包以 venv-salt-minion 的形式提供,其中包含 Salt、Python 3 以及 Salt 依赖的 Python 模块。通过 Web UI 引导时使用的也是 Salt 捆绑包,因此通过 Web UI 引导不依赖 Python 来进行。借助 Salt 捆绑包,客户端不再需要提供任何 Python 解释器或模块。

如果您引导新客户端,默认的注册方法是使用 Salt 捆绑包注册。您可以将现有客户端切换为使用 Salt 捆绑包方法。如果切换,将会安装 salt-minion 软件包及其依赖项。

2.1. 将 Salt 捆绑包与 Salt 受控端结合使用

可以同时使用 Salt 捆绑包与由 SUSE Manager 服务器以外的 Salt 主控端管理的 Salt 受控端。如果将 Salt 捆绑包安装在客户端上,SUSE Manager 服务器将会管理 Salt 捆绑包的配置文件,在此情况下,salt-minion 的配置文件将不会受到管理。有关详细信息,请参见 Salt 捆绑包配置

  • 如果某个客户端的 Salt 受控端由 SUSE Manager 服务器以外的 Salt 主控端进行管理,要引导该客户端,建议在生成引导脚本时使用 mgr-bootstrap --force-bundle,或在引导脚本中将 FORCE_VENV_SALT_MINION 设为 1

  • 要使用 Web UI 进行引导,可以全局指定 mgr_force_venv_salt_minion 设为 true 的 pillar。有关详细信息,请参见 Salt States and Pillars

2.2. 从 Salt 受控端切换到 Salt 捆绑包

可以使用 Salt 状态 util.mgr_switch_to_venv_minionsalt-minion 切换到 venv-salt-minion。建议分两步来切换到 venv-salt-minion,以免在切换过程中出现任何问题:

过程:使用 util.mgr_switch_to_venv_minion 状态切换到 venv-salt-minion
  1. 首先,在不指定任何 pillar 的情况下应用 util.mgr_switch_to_venv_minion。这样会通过复制配置文件等数据切换到 venv-salt-minion。此过程不会清理原始的 salt-minion 配置及其软件包。

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion

    mgr_purge_non_venv_salt 设为 True(用于去除 salt-minion)以及 mgr_purge_non_venv_salt_files 设为 True(用于去除与 salt-minion 相关的所有文件)的情况下应用 util.mgr_switch_to_venv_minion。此第二步用于确保第一步已经处理,然后去除旧配置文件以及现已过时的 salt-minion 软件包。

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion pillar='{"mgr_purge_non_venv_salt_files": True, "mgr_purge_non_venv_salt": True}'

如果切换过程中跳过第一步来运行第二步,状态应用过程可能会失败,因为此过程需要停止用于在客户端执行命令的 salt-minion

反过来,您也可以不安装 Salt 捆绑包,而是继续使用 salt-minion。在此情况下,请指定以下其中一个选项:

  • 指定 --no-bundle 选项来执行 mgr-bootstrap

  • 在生成的引导脚本中,将 AVOID_VENV_SALT_MINION 设为 1

  • 对于引导状态,将 mgr_avoid_venv_salt_minion pillar 设为 True

3. 使用 Salt 捆绑包执行 Salt SSH 操作

在对客户端执行 Salt SSH 操作时,也可使用 Salt 捆绑包。

在执行任何 Salt 命令前,外壳脚本会将 Salt 捆绑包部署到目标系统上,而不会安装 venv-salt-minion。由于 Salt 捆绑包包含整个 Salt 代码库,因此不会部署 salt-thin。Salt SSH(包括使用 Web UI 进行引导)使用捆绑包中的 Python 3 解释器。目标系统上不需要安装任何其他 Python 解释器。

随该捆绑包部署的 Python 3 用于处理客户端上的 Salt SSH 会话,因此 Salt SSH(包括使用 Web UI 进行引导)不依赖于在系统上安装 Python。

可以将 salt-thin 作为一种后备方法,但这种方法需要在客户端上安装 Python 3。不建议也不支持使用此方法,此方法仅用于开发目的。请在 /etc/rhn/rhn.conf 配置文件中将 web.ssh_use_salt_thin 设为 true

  • 使用 Web UI 引导客户端之前必须创建引导储存库。Salt SSH 使用根据检测到的目标操作系统从引导储存库获取的 Salt 捆绑包。有关详细信息,请参见 client-configuration:bootstrap-repository.adoc#_prepare_to_create_a_bootstrap_repository

  • Salt SSH 使用 /var/tmp 在安装了绑定 Python 的客户端上部署 Salt 捆绑包和执行 Salt 命令。因此,切勿使用 noexec 选项挂载 /var/tmp。无法通过 Web UI 引导使用 noexec 选项挂载 /var/tmp 的客户端,因为引导过程是使用 Salt SSH 来访问客户端的。

4. 使用 pip 通过 Python 软件包扩展 Salt 捆绑包

Salt 捆绑包提供了 pip,使用该命令可以通过额外的 Python 软件包扩展绑定 Salt 受控端的功能。

默认情况下,salt <minion_id> pip.install <package-name> 会将 <package_name> 指定的 Python 软件包安装到 /var/lib/venv-salt-minion/local 中。

如果需要,可以通过为 venv-salt-minion.service 设置 VENV_PIP_TARGET 环境变量来覆盖路径 /var/lib/venv-salt-minion/local。建议为该服务使用 systemd 普适性配置文件。可以使用配置文件 /etc/systemd/system/venv-salt-minion.service.d/10-pip-destination.conf 来实现该目的:

[Service]
Environment=VENV_PIP_TARGET=/new/path/local/venv-salt-minion/pip

更新 Salt 捆绑包时,通过 pip 安装的 Python 软件包不会发生变化。为了确保更新后这些软件包可用且可正常运行,建议在 Salt 捆绑包更新后在应用了 Salt 状态的情况下安装这些软件包。