本文只介绍了SaltStack在CentOS上的安装,其它其它有类似的包管理工具可以安装.

CentOS上安装salt-master和salt-minion

安装salt-master

在centos上安装salt-master:

$ sudo rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
$ sudo bash -c 'cat - > /etc/yum.repos.d/saltstack.repo <<"EOF"
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
EOF'
$ sudo yum clean expire-cache
$ sudo yum install -y salt-master
$ sudo systemctl enable salt-master.service
$ sudo systemctl restart salt-master.service

安装salt-minion

在centos上安装salt-minion:

$ sudo rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
$ sudo bash -c 'cat - > /etc/yum.repos.d/saltstack.repo <<"EOF"
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
EOF'
$ sudo yum clean expire-cache
$ sudo yum install -y salt-minion
$ sudo bash -c "echo 'master: $SALT_MASTER' >> /etc/salt/minion" # $SALT_MASTER 替换为salt master主机的IP
$ sudo systemctl enable salt-minion.service
$ sudo systemctl restart salt-minion.service

注: 如果salt-master使用默认配置,请确保salt-master的4505, 4506端口可以被salt-minion访问.

简单测试

salt-minion设置过master IP并重启salt-minion后,应该在salt-master上可以通过下面命令看到minion:

[root@master ~]$ salt-key -L  # 列出所有minion
[root@master ~]$ salt-key -A  # 接受所有minion,也可以通过 -a 接受指定minion

接受minion后,就可以在salt-master上发布命令到minion了。

[root@master ~]$ salt '*' test.ping  # 简单测试master <-> minion是否连通

选择主机

经常会看到 salt '*' test.ping 这里的 '*' 意思是作用于所有主机。

下面介绍 salt 支持的匹配方式。

globbing

[root@master ~]$ salt 'ubuntu*' disk.usage

grains system

[root@master ~]$ salt -G 'os:CentOS' cmd.run 'id'

regular expression

[root@master ~]$ salt -E 'centos[0-9]' test.ping

明确指定一个列表

[root@master ~]$ salt -L 'centos1,centos2' test.ping

multiple target types can be combined in one command

[root@master ~]$ salt -C 'G@os:CentOS and centos* or S@192.168.50.*' test.ping

注: 参考 - https://docs.saltstack.com/en/getstarted/fundamentals/targeting.html

执行命令

执行单个命令,比如:在minion上执行id命令并输出:

[root@master ~]$ salt '*' cmd.run 'id'

执行脚本:

首先要开启/etc/salt/master的如下设置:

file_roots:
  base:
    - /srv/salt

如果salt-master没有/srv/salt/scripts目录请自己创建,然后写个简单脚本:

[root@master ~]$ cat /srv/salt/scripts/get_ip.sh
#!/bin/bash

ifconfig | grep 'inet ' | grep -Ev '127.0.0.1' | awk '{print $2}'

[root@master ~]$ salt '*' cmd.script 'salt://scripts/get_ip.sh'

Tips

以指定用户运行salt-master,避免每次输入salt指令都需要加 sudo;比如以centos用户运行salt-master

[centos@master ~]$ sudo chown -R centos /etc/salt /var/log/salt /var/cache/salt /var/run/salt
[centos@master ~]$ sudo mkdir -p /srv/salt
[centos@master ~]$ sudo chown -R centos /srv/salt
在 /etc/salt/master 中设置 user: centos

注: 理论上salt-minion也可以通过这种方式运行以指定用户运行,但我测试会报错 “Minion did not return. [No response]”

删除无法连接的salt minion

[root@master ~]$ salt-run manage.down removekeys=True