菜鸟科技网

Saltstack命令有哪些常用操作?

SaltStack 核心概念

在深入命令之前,必须理解 Salt 的几个核心概念:

Saltstack命令有哪些常用操作?-图1
(图片来源网络,侵删)
  1. Master: 控制节点,负责向 Minion 发送指令和配置。
  2. Minion: 被控节点,运行在需要管理的服务器上,接收并执行来自 Master 的指令。
  3. Target (目标): 指定命令要发送给哪些 Minion,这是 Salt 强大功能的核心,可以通过多种方式精确定位目标机器。
  4. State (状态): 使用 YAML 文件(SLS 文件)定义系统应有的状态(如安装软件、创建文件、运行服务等),然后让 Salt 将系统驱动到该状态。

Salt 命令基本语法

所有 Salt 命令都遵循一个基本格式:

salt [目标表达式] [模块] [函数] [参数]
  • 目标表达式: 指定要操作的 Minion。
  • 模块: Salt 内置了大量的模块(如 cmd, pkg, service, file 等),用于执行特定任务。
  • 函数: 模块下的具体功能。
  • 参数: 传递给函数的参数。

核心 salt 命令详解

目标

这是最常用的部分,决定了命令作用于哪些机器。

目标表达式 示例 说明
通配符 salt '*' test.ping 匹配所有 Minion
salt 'web*' test.ping 匹配所有 ID 以 'web' 开头的 Minion
salt '*server*' test.ping 匹配所有 ID 中包含 'server' 的 Minion
列表 salt -L 'minion1,minion2,web01' test.ping 匹配指定 ID 列表中的 Minion
正则表达式 salt -E '^db.*' test.ping 匹配所有 ID 符合正则表达式 ^db.* 的 Minion
Grains salt -G 'os:Ubuntu' test.ping 匹配所有 Grains 中 os 值为 Ubuntu 的 Minion
salt -G 'kernel:Linux' cmd.run 'uname -a' 匹配所有内核为 Linux 的机器并执行命令
Pillar salt -I 'environment:production' test.ping 匹配所有 Pillar 中 environment 值为 production 的 Minion
复合目标 salt -C 'G@os:Ubuntu and L@web01,web02' test.ping 使用 -Cand, or, not 组合多个目标,匹配所有 Ubuntu 机器,ID 是 web01 或 web02 的机器。

常用模块及函数

a. 测试和状态检查模块

  • test.ping (或 test.true)

    • 作用: 检查 Minion 是否在线并能与 Master 通信,返回 True 表示成功。
    • 示例:
      salt '*' test.ping
  • cmd.run

    Saltstack命令有哪些常用操作?-图2
    (图片来源网络,侵删)
    • 作用: 在 Minion 上执行任意 shell 命令,这是最强大的模块之一,但应谨慎使用。

    • 示例:

      # 在所有 web 服务器上检查内存使用情况
      salt 'web*' cmd.run 'free -m'
      # 在特定机器上创建一个目录
      salt 'db01' cmd.run 'mkdir -p /tmp/salt_test'
  • grains.items

    • 作用: 获取指定 Minion 的所有 Grains 信息,Grains 是 Minion 启动时收集的静态信息,如操作系统、内核版本、IP 地址、CPU 架构等。

      Saltstack命令有哪些常用操作?-图3
      (图片来源网络,侵删)
    • 示例:

      # 获取所有 Minion 的所有 Grains
      salt '*' grains.items
      # 获取特定 Minion 的操作系统信息
      salt 'web01' grains.get os

b. 文件管理模块

  • file.copy

    • 作用: 从 Master 的文件服务器复制文件到 Minion。
    • 示例:
      # 将 Master /srv/salt/nginx.conf 复制到 Minion 的 /etc/nginx/
      salt 'web*' file.copy source='/srv/salt/nginx.conf' dest='/etc/nginx/nginx.conf'
  • file.managed

    • 作用: 强大的文件管理功能,如果源文件被修改,它会自动将更新同步到 Minion,这是状态管理中最常用的函数。
    • 示例:
      # 管理 Minion 上的 /etc/motd 文件,内容来自 Master 的 /srv/salt/motd.jinja
      salt 'web*' file.managed source='salt://motd.jinja' dest='/etc/motd' mode='0644'
  • file.directory

    • 作用: 确保目录存在,并可以设置权限和所有者。
    • 示例:
      # 确保 /opt/myapp/logs 目录存在,并设置所有者为 root
      salt '*' file.directory name='/opt/myapp/logs' user=root group=root mode=755

c. 软件包管理模块

  • pkg.install

    • 作用: 安装软件包,Salt 会根据 Minion 的操作系统自动选择正确的包管理器(apt, yum, zypper 等)。

    • 示例:

      # 在所有机器上安装 nginx
      salt '*' pkg.install nginx
      # 在所有 Ubuntu 机器上安装 vim
      salt -G 'os:Ubuntu' pkg.install vim
  • pkg.remove

    • 作用: 卸载软件包。
    • 示例:
      salt '*' pkg.remove apache2
  • pkg.latest

    • 作用: 升级软件包到最新版本。
    • 示例:
      # 升级所有已安装的软件包
      salt '*' pkg.latest

d. 服务管理模块

  • service.start

    • 作用: 启动服务。
    • 示例:
      salt '*' service.start nginx
  • service.stop

    • 作用: 停止服务。
    • 示例:
      salt '*' service.stop nginx
  • service.restart

    • 作用: 重启服务。
    • 示例:
      salt '*' service.restart nginx
  • service.status

    • 作用: 检查服务状态。
    • 示例:
      salt '*' service.status nginx

其他重要 Salt 命令

除了核心的 salt 命令,还有一些其他非常实用的命令。

salt-key - 密钥管理

当新的 Minion 连接到 Master 时,需要被授权。

  • salt-key -L:

    • 作用: 列出所有已接受的和未接受的 Minion 密钥。
    • 示例:
      salt-key -L
  • salt-key -A:

    • 作用: 接受所有待处理的 Minion 密钥。(生产环境慎用,建议先用 -a 单个接受)
    • 示例:
      salt-key -A
  • salt-key -a <minion_id>:

    • 作用: 接受指定的 Minion 密钥。
    • 示例:
      salt-key -a web01
  • salt-key -d <minion_id>:

    • 作用: 删除指定的 Minion 密钥。
    • 示例:
      salt-key -d web01

salt-cp - 文件复制

  • 作用: 快速将单个文件从 Master 复制到一个或多个 Minion,比 file.copy 简单,但功能较少。

  • 语法:

    salt-cp [目标] <源文件> <目标路径>
  • 示例:

    # 将本地的 /tmp/hello.txt 复制到所有 Minion 的 /home/ 目录下
    salt-cp '*' /tmp/hello.txt /home/
    # 复制到特定 Minion
    salt-cp 'web01' /tmp/hello.txt /home/

salt-run - 运行 Runner

  • 作用: Runner 是在 Master 上执行的任务,通常用于跨多个 Minion 的聚合操作或管理任务,如管理 Salt 本身。

  • 示例:

    # 获取所有已连接的 Minion 列表
    salt-run manage.status
    # 清理所有 Minion 的缓存
    salt-run saltutil.sync_all

state.apply (或 salt-call --local state.apply)

  • 作用: 这是 Salt 状态管理的核心命令,用于应用 SLS 文件定义的状态。
    • salt '*' state.apply: 在所有 Minion 上应用状态。
    • salt 'web*' state.apply webserver: 在 ID 为 'web*' 的 Minion 上应用 webserver 状态(通常指 /srv/salt/webserver.sls 文件)。
    • salt-call --local state.apply: 在本地(Master 或任意机器)应用状态,常用于测试或在没有 Minion 的环境中使用。

命令行选项

  • -v--verbose: 显示详细的输出。
  • -b NUM--batch-size=NUM: 分批执行命令,避免同时连接过多机器。-b 10 表示每次只对 10 台机器执行。
  • -t SEC--timeout=SEC: 设置命令超时时间(默认为 5 秒)。
  • --async: 异步执行命令,立即返回一个 Job ID,不等待所有 Minion 执行完成。
  • -l--log-level: 设置日志级别。

实战示例

场景: 部署一个简单的 Web 服务器(Nginx)。

  1. 目标: 在所有 ID 以 web 开头的 Minion 上安装 Nginx,并启动服务。

  2. 命令:

    # 1. 安装 Nginx
    salt 'web*' pkg.install nginx
    # 2. 启动 Nginx 服务并设置为开机自启
    salt 'web*' service.start nginx
    salt 'web*' service.enable nginx

场景: 检查所有生产环境的数据库服务器的内核版本。

  1. 目标: 所有 Pillar 中 environment 标记为 production 且 Grains 中 roles 包含 database 的机器。
  2. 命令:
    salt -C 'I@environment:production and G@roles:database' cmd.run 'uname -r'

希望这份详细的指南能帮助你更好地掌握 SaltStack 命令!

分享:
扫描分享到社交APP
上一篇
下一篇