8.1 SaltStack的使用
三大主要功能:远程执行、配置管理、云管理
运行方式:local、Master/Minion、Salt SSH
SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信,master可以发送任何指令让minion执行了。
salt-master服务启动后会开启两个端口:4505和4506,minion没有端口,通过“双向密钥交换”(可通过tree /etc/salt/pki命令查看)来实现安全管理。salt-master每执行一条命令,所有minion均可收到。
8.1.1 SaltStack 安装运行
master服务端操作系统:
[root@centos ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@centos ~]# uname -r
3.10.0-862.3.2.el7.x86_64
master服务端安装配置:IP:192.168.31.55/24
额外设置:CentOS安装python3:
yum install zlib* -y
yum install openssl-devel
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar zxvf Python-3.6.5.tgz
cd Python-3.6.5
./configure --with-ssl
make
make install
# 如果是软连接,可以直接删除
mv /usr/bin/python /usr/bin/python2
ln -s /usr/local/bin/python3.6 /usr/bin/python
# 修改Yum,使yum依然有效,yum依靠老版本的python
vi /usr/bin/yum
# 将上面文件中的第一行修改:
#!/usr/bin/python 修改为#!/usr/bin/python2
vi /usr/libexec/urlgrabber-ext-down
# 将上面文件中的第一行修改:
#!/usr/bin/python 修改为#!/usr/bin/python2
saltstack的安装可以参阅官方文档:https://repo.saltstack.com/
通常安装方式为:
sudo apt-get install salt-master
sudo apt-get install salt-minion
sudo apt-get install salt-ssh
sudo apt-get install salt-syndic
sudo apt-get install salt-cloud
sudo apt-get install salt-api
或:
sudo yum install salt-master
sudo yum install salt-minion
sudo yum install salt-ssh
sudo yum install salt-syndic
sudo yum install salt-cloud
sudo yum install salt-api
安装后修改配置文件:
cd /etc/salt/master.d/
# 修改文件
vi eauth.conf
external_auth:
pam:
saltapi:
- .*
- '@wheel'
- '@runner'
# 创建文件
vi api.conf
rest_cherrypy:
port: 8000
# 修改minion中master的IP地址
sed -i 's/#master: salt/master: 192.168.31.55/g' /etc/salt/minion
# 启动
systemctl start salt-master
systemctl start salt-minion
systemctl start salt-api
minion客户端操作系统:IP:192.168.31.55/24
root@liu-ubuntu:~# cat /etc/issue
Ubuntu 16.04.4 LTS \n \l
root@liu-ubuntu:~# uname -r
4.13.0-43-generic
minion客户端安装配置:
apt-get install salt-minion -y
sed -i 's/#master: salt/master: 192.168.31.55/g' /etc/salt/minion
root@liu-ubuntu:~# /etc/init.d/salt-minion start
[ ok ] Starting salt-minion (via systemctl): salt-minion.service.
8.1.2 SaltStack常用命令参数
[root@centos ~]# salt-key -L
Accepted Keys:
centos
Denied Keys:
Unaccepted Keys:
liu-ubuntu
Rejected Keys:
[root@centos ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
liu-ubuntu
Proceed? [n/Y] y
Key for minion liu-ubuntu accepted.
[root@centos ~]# salt-run manage.up
- centos
- liu-ubuntu
[root@centos ~]# salt-run manage.status
down:
up:
- centos
- liu-ubuntu
# 关掉master端的salt-minion服务
[root@centos ~]# systemctl stop salt-minion
[root@centos ~]# salt-run manage.status
down:
- centos
up:
- liu-ubuntu
常用命令参数 | 命令说明 |
---|---|
salt-key -L | 查看minion列表 |
salt-key -A | 同意接管所有的minion |
salt-key -a | 同意接管指定的一个minion |
salt-key -D | 删除所有认证的minion |
salt-key -d | 删除指定的minion |
salt-run manage.up | 查看存活的minion |
salt-run manage.down | 查看死掉的minion |
salt-run manage.status | 查看minion的相关状态 |
salt-run manage.versions | 查看salt的所有master和minion的版本信息 |
salt -d | 查看帮助文档 |
salt '*' sys.doc | 查看帮助文档 |
salt '*' service.get_all | 获取minion所有服务 |
salt '*' service.reload sshd | 重新加载sshd服务 |
salt '*' pkg.list_pkgs | 显示软件包版本列表 |
salt '*' pkg.version python | 显示软件包版本信息 |
salt '*' pkg.install httpd | 安装软件包 |
salt '*' service.status mysql | 查看mysql服务状态 |
salt '*' service.start mysql | 启动mysql服务 |
salt '*' sys.list_modules | 模块列表 |
salt-cp '*' /etc/hosts /etc/hosts | 分发hosts文件到所有minion端 |
salt '*' file.copy /tmp/zabbix.sls /tmp/sls | 把服务端对应文件拷贝到minion端相应目录下 |
salt '*' cp.get_dir salt://zabbix /tmp | 把服务端对应目录拷贝到minion端相应目录下 |
8.1.3 远程执行
cmd.shell远程执行命令
[root@centos ~]# salt 'liu-ubuntu' cmd.shell 'ls -l'
liu-ubuntu:
total 132
-rwxr--r-- 1 root root 64 Jun 4 09:51 01-argv.py
-rwxr-xr-x 1 root root 137 Jun 4 10:47 02-stdinout.py
-rwxr-xr-x 1 root root 232 Jun 4 10:59 03-sysexit.py
-rwxr-xr-x 1 root root 135 Jun 4 11:07 04-getpass.py
-rwxr-xr-x 1 root root 747 Jun 4 11:37 05-configparser.py
-rwxr-xr-x 1 root root 255 Jun 4 13:54 06-argparse.py
-rwxr-xr-x 1 root root 655 Jun 4 14:38 07-log.py
-rwxr-xr-x 1 root root 203 Jun 4 22:03 08-fnmatch.py
-rwxr-xr-x 1 root root 63 Jun 4 23:18 09-glob.py
-rwxr-xr-x 1 root root 193 Jun 4 23:30 10-walk.py
-rwxr-xr-x 1 root root 236 Jun 5 09:33 11-filecmp.py
-rwxr-xr-x 1 root root 155 Jun 5 10:00 12-tarfile.py
-rwxr-xr-x 1 root root 154 Jun 5 10:01 13-tarfile2.py
-rwxr-xr-x 1 root root 136 Jun 5 10:19 14-sprun.py
-rwxr-xr-x 1 root root 176 Jun 5 10:45 15-sppopen.py
-rwxr-xr-x 1 root root 311 Jun 5 15:06 16-psutil.py
-rwxr-xr-x 1 root root 329 Jun 5 15:49 17-pyinofify.py
-rwxr-xr-x 1 root root 949 Jun 5 16:53 18-mysql.py
-rwxr-xr-x 1 root root 523 Jun 17 22:59 19-sendmail.py
-rwxr-xr-x 1 root root 743 Jun 18 10:57 20-sendattmail.py
-rwxr-xr-x 1 root root 978 Jun 18 15:38 21-pop3.py
-rwxr-xr-x 1 root root 290 Jun 24 10:13 22-nmap.py
-rw-r--r-- 1 root root 264 Jun 24 00:23 Dockerfile
drwxr-xr-x 2 root root 4096 Jun 5 09:21 a
drwxr-xr-x 2 root root 4096 Jun 5 10:02 allpy
drwxr-xr-x 2 root root 4096 Jun 5 09:22 b
-rw-r--r-- 1 root root 24 Jun 5 08:41 file1
-rw-r--r-- 1 root root 23 Jun 5 08:41 file2
-rw-r--r-- 1 root root 23 Jun 5 09:16 file3
-rw-r--r-- 1 root root 162 Jun 5 15:04 test.conf
-rwxr--r-- 1 root root 70 Jun 3 10:24 test.py
-rw-r--r-- 1 root root 10 Jun 21 23:42 test.txt
drwxr-xr-x 2 root root 4096 Jun 24 00:31 www
测试到客户端的连通性
[root@centos ~]# salt '*' test.ping
liu-ubuntu:
True
centos:
Minion did not return. [Not connected]