【问题标题】:SaltStack : is it possible to apply states on the master and if so, how?SaltStack:是否可以在主服务器上应用状态,如果可以,如何?
【发布时间】:2014-05-21 19:18:39
【问题描述】:

我是 SaltStack 的初学者,但我设法在机器上设置了一些状态并在 minion 上运行它们。

我现在拥有的是一个带有 salt-master 的 Debian 机器设置以及另一个作为 salt-minion 的 Debian 设置。

由于我也使用 salt-master 作为开发机器,我想知道我是否可以以某种方式将状态也应用到 master 本身。如果有,怎么做?

我可以运行一个命令来将状态应用到主服务器上吗? (目前还没有找到)

我是否应该在同一台机器上安装 salt-minion 才能做到这一点,并简单地将同一台机器注册为自己的 minion?

谢谢!

【问题讨论】:

    标签: salt-stack


    【解决方案1】:

    由于我也使用 salt-master 作为开发机器,我想知道我是否可以以某种方式将状态应用到 master 本身。如果有,怎么做?

    您可以按照以下步骤进行操作:

    1. 在你的开发机器上安装 salt-minion
    2. 编辑 /etc/salt/minion 以指向您的主服务器(vi /etc/salt/minion 并更改以下内容:master: salt -> master: 127.0.0.1)
      • (可选)将 /etc/salt/minion_id 编辑为对您有意义的内容
    3. 启动你的 salt-minion
    4. 使用 salt-key 接受你的 minion 的密钥
    5. 使用你的 salt-master 来控制你的仆从,就像它是任何其他 salt-minion 一样

    我可以运行一个命令来将状态应用到主服务器上吗?

    salt-master 并不真正运行状态文件,salt-minions 会。如果您按照上述步骤操作,则可以使用以下命令定位您的 salt-master 以运行 highstate:

    salt 'the_value_of_/etc/salt/minion_id' state.highstate
    

    我是否应该在同一台机器上安装 salt-minion 才能做到这一点,并简单地将同一台机器注册为自己的 minion?

    是的。我认为你对你需要做什么有一个想法,只需要朝着正确的方向前进。

    【讨论】:

    • 您的列表编号混乱。在标记中,您有一个“3.5”步骤,但这是不正确的标记。另外,我认为 4、5 和 6 应该是一个项目,不是吗?或者也许 5 和 6 是一个项目,但 5 的一部分被附加到 4。你能修复它,让它看起来像你想要的那样吗?
    • 已修复。感谢@BryanOakley 的提醒
    • 即使是这种设置也无法控制。例如。如果你想在高态之间执行代码。 salt.state.event + reactor + 你的执行代码是当前的方法。你可以在highstate里面放一个state.event,给它一个标签,而reactor会检查这个标签并执行给定的反应。
    • 如果你的开发机器上已经安装了Master,那么就不需要安装minion了。但是你必须在 (~3.) 之后重新启动 minion 服务/守护进程。
    • 感谢您的回答。我也是 salt 新手,是否在 master 上运行 minion 的问题非常简单,但我必须进行大量搜索才能确认。
    【解决方案2】:

    在单个节点上同时安装 Minion 和 Master

    我称这样的节点为 Master Minion。未提供任何步骤 - 您已经根据问题知道了。

    一些概念性信息:

    • 简而言之,Master 从不应用状态。相反,它会触发 Minions(在本例中为本地 Master Minion)。
    • Salt Minion 和 Master 是两个独立的服务,具有独立的运行时和配置
    • 虽然实例使用通用软件,但运行时通过网络交谈(与位置无关)。
    • 如果您可以在远程 Minion 上应用状态,相同的机制也将用于本地 Minion 之一。

    其他信息

    有两种应用状态的方法:

    • 主端salt 命令“推送” 状态到多个远程奴才。

      rpm -qf $(which salt)
      salt-master-2015.5.3-4.fc22.noarch
      
    • Minion 端 salt-call 命令在单个本地 Minion 上“拉” 状态。

      rpm -qf $(which salt-call)
      salt-minion-2015.5.3-4.fc22.noarch
      

    在涉及多个minion之前,最好使用salt-call达到同样的效果:

    salt-call state.highstate
    

    Minion 端 salt-call 提供了优势,尤其是在测试、隔离、故障排除方面:

    • 它使网络问题(如果有)更加明显。
    • 它仅将状态安全地应用于单个本地 Minion(无法指定多个)。
    • 直接在本地终端显示调试输出:

      salt-call -l debug test.ping
      

    最后一点,salt-call--local也可以在masterless setup中使用no network

    【讨论】:

      【解决方案3】:

      现在已经是 2015 年底了。让我们回顾一下盐主自我控制的更多可能性:

      1. 在同一个盒子上安装一个 minion 和 salt master

      这一问题已被广泛讨论,如以上两个答案。

      1. 使用 salt-ssh + salt-run state.orchestrate

      设置步骤:

      第 1 步:安装 salt-ssh

      第 2 步:修改名册文件(例如 CentOS 6 中的 /etc/salt/roster)。默认安装已经为您提供了一些示例。由于您可能 ssh 进入 salt master,当然用户名/密码/私钥设置对您来说应该不是问题。例如控制 salt master vagrant box,这个示例应该这样做:

      localhost:
        host: 127.0.0.1
        user: vagrant
        passwd: vagrant
        sudo: True
      

      现在,稍微扭曲一下从official tutorial 窃取:

      # /srv/salt/orch/cleanfoo.sls
      cmd.run:
        salt.function:
          - tgt: 'localhost'
          - ssh: 'true'
          - arg:
            - touch /tmp/test.txt
      

      然后运行它:

      salt-run state.orchestrate orch.cleanfoo
      

      如果有 test.txt 文件,请检查您的 salt master vagrant box /tmp 目录。

      这种方法也应该适用于状态。无论哪种方式,您都需要安装一些东西。我更喜欢第二种方式,因为总的来说,调用 salt master 自我控制(提供一些工作)只是我实际调用 minion 处理其他状态之前的一步。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        相关资源
        最近更新 更多