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
  2. 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}'

2.3. 其他注意事项

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

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

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

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

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

3. 使用 Salt 捆绑包执行 SSH 推送

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

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

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

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

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

  • SSH 推送使用 /var/tmp 在安装了捆绑 Python 的客户端上部署 Salt 捆绑包和执行 Salt 命令。因此,切勿使用 noexec 选项挂载 /var/tmp。无法通过 Web UI 引导使用 noexec 选项挂载 /var/tmp 的客户端,因为引导过程使用 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 状态的情况下安装这些软件包。