You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Puppet 6中替代mco命令,按需针对多台远程Linux节点执行Puppet?

在Puppet 6中替代MCollective mco puppet runonce 的方案

MCollective被弃用后,Puppet 6提供了几种官方或灵活的替代方案来实现批量触发节点的Puppet agent按需运行,以下是针对你的Ubuntu 20环境(Puppet 6.19.1/Server 6.14.1)的具体实现方法:

1. 官方推荐:使用Puppet Orchestrator(puppet job命令)

这是MCollective的官方替代工具,依托PuppetDB进行节点筛选,无需额外安装组件(已集成在Puppet Server中):

步骤:

  • 确保Puppet Server上的Orchestrator服务运行:
    sudo systemctl start puppetserver-orchestrator
    sudo systemctl enable puppetserver-orchestrator
    
  • 直接通过节点查询语句批量触发puppet agent -t:
    sudo puppet job run --nodes 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' --command 'puppet agent -t'
    
    • 若节点的证书名(certname)与主机名不一致,可改用主机名字段筛选:
      sudo puppet job run --nodes 'nodes { facts.hostname ~ "hostname-pattern-1" or facts.hostname ~ "hostname-pattern-2" }' --command 'puppet agent -t'
      
  • 查看任务执行状态:
    sudo puppet job show <job-id>
    

2. 灵活远程执行:使用Puppet Bolt

Bolt是Puppet推出的轻量远程执行工具,支持多种节点数据源,适合需要更灵活执行逻辑的场景:

步骤:

  • 安装Bolt:
    sudo apt update && sudo apt install puppet-bolt
    
  • 直接基于PuppetDB查询执行命令:
    bolt command run 'sudo puppet agent -t' \
      --query 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' \
      --transport ssh \
      --user root \
      --private-key /root/.ssh/id_rsa
    
    • 若需要重复使用节点分组,可编写inventory.yaml配置文件,将节点查询逻辑固化:
      groups:
        - name: target_nodes
          query: "nodes { certname ~ 'hostname-pattern-1' or certname ~ 'hostname-pattern-2' }"
          config:
            transport: ssh
            ssh:
              user: root
              private-key: /root/.ssh/id_rsa
      
      然后通过分组执行:
      bolt command run 'sudo puppet agent -t' --inventoryfile inventory.yaml --group target_nodes
      

3. 轻量脚本方案:PuppetDB查询 + SSH批量执行

如果不想依赖官方工具,可结合PuppetDB查询与批量SSH工具实现:

步骤:

  • 安装pssh(批量SSH工具):
    sudo apt install pssh
    
  • 筛选目标节点并执行命令:
    # 导出符合条件的节点列表
    sudo puppet query 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' --format=json | jq -r '.[].certname' > target_nodes.txt
    # 批量执行puppet agent -t
    pssh -i -h target_nodes.txt 'sudo puppet agent -t'
    
    • 若无pssh,也可使用xargs配合SSH:
      sudo puppet query 'nodes { certname ~ "hostname-pattern-1" or certname ~ "hostname-pattern-2" }' --format=json | jq -r '.[].certname' | xargs -I {} ssh {} 'sudo puppet agent -t'
      
    注意:需确保Puppet Server能无密码SSH到所有目标节点(可通过SSH密钥对实现)

注意事项

  • 所有方案均需确保目标节点的Puppet Agent正常运行,且Puppet Server与节点网络连通(Orchestrator需开放8143端口,SSH需开放22端口)
  • 使用Orchestrator时,需确保节点已注册到Orchestrator,且执行用户拥有足够的RBAC权限
  • 节点筛选条件可根据实际需求调整,比如按环境、角色等字段查询

内容的提问来源于stack exchange,提问作者stockunderflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:55:15