SaltStack基本架构
- 第一种: master-minion,这种架构master和所有minion都直接连接,minion接受来自master的指令,完成命令执行或配置管理。
- 第二种: master-syndic-minion,这种架构中master通过sydic对minion进行管理,可以进行多级扩展。
- 第三种: 无master的minion,这种架构中minion不受任何master控制,通过本地运行即可完成相关工作。
安装Saltstack
1 | ~]# yum install -y salt-master |
2 | ~}# yum install -y salt-minion |
Salt master启动默认会监听两个端口,4505(publish port)提供远程执行命令发送功能,4506( ret port)为Salt Master Ret接口,支持认证,文件服务,结果收集等功能。
Salt master的配置文件是/etc/salt/master,Salt minion的配置文件是/etc/salt/minion
配置salt-master和salt-minion,在/etc/salt/minion的配置中master: master和id: minion-one
启动minion在启动后连接master会请求master为其签发证书,证书签发完毕后,代表master可以信任minion,并且salt-master和salt-minion之间的通信是加密的。
salt-master
1 | ~]# salt-key -L #查看key |
2 | ~]# salt-key -f minion- one #查看秘钥的指纹码,确保与minion相互匹配 |
salt-minion
1 | ~]# salt-call --local key.finger #查看秘钥指纹码 |
salt-master
1 | ~]# salt-key -a monion-one #master接受该秘钥 |
2 | ~]# salt-key -L |
对于很多minion的情况下,可以在/etc/salt/master配置文件中自动接受key:
1 | auto_accept: True |
相关命令
1 | ~]# salt '*' test.ping #探测主机是否存活 |
2 | ~]# salt '*' sys.list_functions test #列出test模块包含的其他函数 |
3 | ~]# salt '*' sys.doc test.echo #获得函数的用法 |
4 | ~]# salt '*' sys.list_modules #列出所以模块 |
目标定位字符串:
- 正则匹配: salt -E “^minion-.*” test.ping
- 列表匹配: salt -L ‘minion-one,minion-two’ test.ping
- 分组匹配: salt -N minions test.ping minions写在master的配置文件中
- Grains匹配: salt -G ‘os:CentOS’ test.ping
- Pillars匹配: salt -I ‘role:web’ test.ping
- 复合匹配: salt -C ‘minion-* and G@os:CentOS not E@.*-two$’ test.ping
- Grains PCRE: salt -P ‘os:(RedHat|Fedora|CentOS)’ test.ping
- subnet address: salt -S ‘192.168.1.0/24’ test.ping
自定义granins:
1 | ~]# salt 'minion-one' grains.setval cpu_num 8 |
2 | ~]# salt 'minion-one' grains.items # 查看全部grains的值 |
3 | ~]# salt 'minion-one' grains.item os # 查看特定grains的值 |
4 | ~]# vim /etc/salt/grains #写在minion的服务器,重启也将生效 |
5 | cpu_num: 8 |
6 | ~]# salt 'minion-one' grains.delval cpu_num |
7 | ``` |
8 | |
9 | 自定义pillars: |
10 | ```bash |
11 | ~]# salt 'minion-one' pillar.items #查看全部pillars的值 |
12 | ~]# salt 'minion-one' pillar.item role #查看单个数据的命令 |
- 远程命令执行模块
1~]# salt '*' cmd.run "ps aux|wc -l"2~]# salt '*' cmd.run_all "ps aux|wc -l" #更详细的信息 - 安装包管理
1~]# salt '*' pkg.install "httpd"2~]# salt '*' pkg.version "httpd"3~]# salt '*' pkg.remove "httpd" - 管理服务模块
1~]# salt '*' service.status httpd2~]# salt '*' service.start httpd3~]# salt '*' service.stop httpd - 文件管理模块
1~]# salt '*' file.stats /etc/fstab2~]# salt '*' file.chown /etc/fstab root root - 用户管理模块
1~]# salt '*' user.add name <uid> <gid> <groups> <home> <shell>2~]# salt '*' user.delete name3~}# salt '*' user.info root
state模块
1 | ~]# salt '*' pkg.install "httpd" |
2 | state状态 |
3 | ~]# vim apache.sls |
4 | install_httpd; |
5 | pkg.installed: |
6 | - name: httpd |
7 | ~]# salt '*' state.sls apache |
执行模块和状态模块,之间的主要区别,执行模块的是过程式的,而状态模块则是描述性的,即执行模块在目标主机执行相同的逻辑和指令,而描述模块只是进行必要的工作,使minion上达到指定的状态。
常用的状态模块用法
1 | ~]# salt '*' sys.list_state_modules #列出所有状态模块 |
2 | ~]# salt '*' sys.list_state_functions pkg #列出指定模块的函数用法 |
3 | ~]# salt '*' sys.state_doc file.managed |
file模块
下发文件1/etc/fstab2file.managed:3- source:4- salt: ///etc/fstab5- user: root6- group: root7- mode: 644创建目录
1/ops/foo/bar:2file.directory:3- user: root4- group: root5- mode: 7556- makedirs: True建立软连接
1/etc/grub.conf:2file.symlink:3- target: /boot/grub/grub.conf下发整个目录
1/opt/code/flask:2file.recurse:3- source: salt:///code/flask4- include_empty: Truepkg模块
软件安装1pkgs:2pkg.installed:3- pkgs:4- httpd5- mysql-server: '=5.6'安装rpm包
1pkgs:2pkg.installed:3- sources:4- httpd: salt:///rpms/httpd.rpm5- mysqd: http://rpms.com/mysqld.rpm6- wget: ftp://frp.com/wget.rpm7- qax: /rpms/qax.rpmservice模块
启动redis服务1redis:2service.running:3- enable: True4- reload: True5- watch:6- pkg: rediscron模块
1date > /tmp/crondtest:2cron.present:3- user: root4- minute: '*/5'user模块
1user.present:2- fullname: jusene3- shell: /bin/bash4- home: /home/jusene5- uid: 40006- gid: 40007- groups:8- wheelsysctl模块
1vm.swappiness:2sysctl.present:3- value: 0pip模块
1django:2pip.installed:3- name: django >= 2.04- require:5- pkg: python-pip
使用requisites对状态进行排序
通过require指定执行顺序,通过watch指定当改变时触发,这两个可以完成却大多数的顺序控制。