第一章:saltstack入门介绍
1、基础概念
saltstack是基于python开发的一套C/S架构配置管理工具,底层采用ZeroMQ消息队列,使用SSL证书签发的方式进行认证管理。server端就是salt的master,client端就是minion。master和minion都以守护进程的模式运行。
2、saltstack架构安装
2.1)软件依赖
python:大于2.6小于3.0
msgpack-python:salstack消息交换库
YAML:saltStack配置解析定义语法
Jinja2: saltStack states配置模板
MarkupSafe:python unicode转换库
apache-libcloud: SaltStack对云架构编排库
Requests:HTTP Python 库
ZeroMQ:saltStack消息系统
pyzmq:ZeroMQ python库
PyCrypto:python密码库
M2Crypto: openssl python包装库
2.2)安装环境
master:10.2.11.210 saltStack01.91als.net
minion: 10.2.11.218 web.91als.net
minion: 10.2.11.219 tomcat.91als.net
2.2.1)采用yum安装方式
[iyunv@saltstack01 ~]#yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el6.noarch.rpm -y
[iyunv@saltstack01 ~]#yum info salt-master(查看版本)
[iyunv@saltstack01 ~]#yum -y install salt-master(安装master)
查看
[iyunv@saltstack01 ~]# rpm -ql salt-master
启动:
[iyunv@saltstack01 ~]#/etc/init.d/salt-master start
查看:
[iyunv@saltstack01 ~]# ss -tunlp|egrep "4505|4506"
tcp LISTEN 0 128 *:4505 *:* users:(("salt-master",14466,15))
tcp LISTEN 0 128 *:4506 *:* users:(("salt-master",14473,23))
[iyunv@web ~]#yum -y install salt-minion
[iyunv@tomcat ~]#yum -y install salt-minion
启动:
[iyunv@web ~]#/etc/init.d/salt-minion start
[iyunv@tomcat ~]#/etc/init.d/salt-minion start
2.3)证书管理
- SaltStack是使用SSL签证的方式进行安全认证的
[iyunv@saltstack01 ~]#salt-key -A -y #同意签证所有没有接受的签证请求
[iyunv@saltstack01 ~]# salt-key -L
Accepted Keys:
saltstack.91als.net
saltstack01.91als.net
tomcat.91als.net
web.91als.net
Denied Keys:
Unaccepted Keys:
Rejected Keys:
-L:显示所有public的keys
-a ACCEPT --accept=ACCEPT指定接受指定认证的key
-A 接受所有等待认证的key
-r REJECT --reject=REJECT 拒绝指定认证的key
-d DELETE --delete=DELETE 删除指定的key
-D 删除所有keys
2.4)测试访问
[iyunv@saltstack01 ~]# salt '*' test.ping
saltstack.91als.net:
True
web.91als.net:
True
tomcat.91als.net:
True
saltstack01.91als.net:
True
2.5) 查看master上安装了那些文件
[iyunv@saltstack01 ~]# salt -h
-c --config-dir=CONFIG_DIR:指定配置文件的目录,默认/etc/salt
-t --timeout=TIMEOUT:指定timeout的时间(默认为5s)
--async:异步执行
--username=USERNAME:指定外部认证用户名
--password=PASSWORD:指定外部认证密码
-T:生成master token
-d:查看指定模块的文件
-G, --grain grains匹配
-E --pcre 正则匹配
-L --list 列表匹配
-I --pillar pillar值匹配
-S --ipcidr minions网段地址匹配
-J, --pillar-pcre
2.6)在minion上查看
3、salt配置文件详解
3.1)master配置文件
3.2)minion配置文件
第二章:saltstack组件
1、salt '*' (1) cmd.run(2) 'w'
1)管理对象(target)
1.1)通过minion>[iyunv@saltstack01 ~]# salt 'web.*' cmd.run 'w'
web.91als.net:
15:55:02 up 1 day, 2:03, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ > root pts/0 10.2.11.251 09:11 1:46m 0.16s 0.16s -bash
1.2)-E :正则匹配
[iyunv@saltstack01 ~]#salt -E 'web1-(prod|devel)' test.ping
(在top.sls中)
base:
'web1-(prod|devel):
- match: pcre/granis/pillar
- webserver
-L: 列表匹配
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' test.ping
web.91als.net:
True
1.3)-G:grains匹配
[iyunv@saltstack01 ~]# salt -G os:CentOS test.ping
web.91als.net:
True
saltstack.91als.net:
True
saltstack01.91als.net:
True
tomcat.91als.net:
True
1.4)-N 根据组来匹配(实现需要定义好组)
nodegroups:
groups: 'web1.91als.net,tomcat.91als.net'
1.5)-I pillar匹配
1.6)-S cidr匹配 (-S '10.2.11.0/24')
2、moudle 模块
https://docs.saltstack.com/en/latest/ref/modules/all/index.html#all-salt-modules
(学习模块的方法)
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_modules ----查看哪些模块
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_functions service-----查看service模块支持哪些函数方法
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.doc service.enable------查看某个函数的使用说明
service.enable:
Enable the named service to start at boot
CLI Example:
salt '*' service.enable <service name>
案例1:service模块
[iyunv@saltstack01 ~]# salt '*' service.available sshd ---判断服务是否运行
web.91als.net:
True
案例2:status 模块是系统状态的常用信息模块,可以利用这个模块查看系统的信息
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' status.cpuinfo
案例3:cmd 模块是常用的执行远程命令模块,具有强大的功能
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' sys.list_functions cmd---查看cmd支持哪些函数
# cmd.run 执行一个远程shell命令[iyunv@yw_home salt]#salt '192.168.0.100' cmd.run 'ls -l' # cmd.script 在远程minion执行一个master上的脚本,命令会从master下载脚本到minion上并执行# 路径为file_root参数指定的路径为 salt:// 路径[iyunv@yw_home salt]#salt '192.168.0.100' cmd.script salt://scripts/runme.sh 案例4:state 模块是salt state的管理模块,可以通过state模块简单的对minion操作sls状态
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' sys.list_functions state
安全限制,限制指定用户访问某些模块,某些模块中的某些方法
1)对模块的访问控制(/etc/salt/master)
publisher_acl:
oldboy:
- test.ping
- network.*
2)新建用户oldboy,并授权
[iyunv@saltstack01 ~]# chmod 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master
[iyunv@saltstack01 ~]# chmod 777 /var/log/salt/master
3)测试
[iyunv@saltstack01 ~]# su - oldboy
[oldboy@saltstack01 ~]$ salt '*' test.ping
saltstack01.91als.net:
True
saltstack.91als.net:
True
tomcat.91als.net:
True
web.91als.net:
True
[oldboy@saltstack01 ~]$ salt '*' cmd.run 'w'
Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).
指定某个用户只能在某些机器上运行某些模块
user01用户只可以在web开头的服务器上运行test.ping
[iyunv@saltstack01 ~]# su - user01
[user01@saltstack01 ~]$ salt '*' test.ping
Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).
[user01@saltstack01 ~]$ salt 'web.91als.net' test.ping
web.91als.net:
True
黑名单:
#publisher_acl_blacklist:
# users:
# - root
# - '^(?!sudo_).*$' # all non sudo users
# modules:
# - cmd
3)返回returns
https://docs.saltstack.com/en/latest/ref/returners/index.html#full-list-of-returners
3.1)案例:存到mysql数据
3.1.1)创建表
mysql> CREATE DATABASE `salt`
-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> use salt
Database changed
mysql> CREATE TABLE `jids` (
-> `jid` varchar(255) NOT NULL,
-> `load` mediumtext NOT NULL,
-> UNIQUE KEY `jid` (`jid`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE INDEX jid ON jids(jid) USING BTREE;
ERROR 1061 (42000): Duplicate key name 'jid'
mysql> CREATE TABLE `salt_returns` (
-> `fun` varchar(50) NOT NULL,
-> `jid` varchar(255) NOT NULL,
-> `return` mediumtext NOT NULL,
-> `id` varchar(255) NOT NULL,
-> `success` varchar(10) NOT NULL,
-> `full_ret` mediumtext NOT NULL,
-> `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-> KEY `id` (`id`),
-> KEY `jid` (`jid`),
-> KEY `fun` (`fun`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE TABLE `salt_events` (
-> `id` BIGINT NOT NULL AUTO_INCREMENT,
-> `tag` varchar(255) NOT NULL,
-> `data` mediumtext NOT NULL,
-> `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-> `master_id` varchar(255) NOT NULL,
-> PRIMARY KEY (`id`),
-> KEY `tag` (`tag`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.05 sec)
mysql> grant all on salt.* to salt@'10.2.11.%'> Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
3.1.2)安装python-mysqldb包(所有minion上都需要安装)----返回程序是minion返回的
[iyunv@saltstack01 ~]# yum -y install MySQL-Python
3.1.3)配置/etc/salt/master
##### Returner settings ######
############################################
# Which returner(s) will be used for minion's result:
#return: mysql
mysql.host: '10.2.11.210'
mysql.user: 'salt'
mysql.pass: 'salt123'
mysql.db: 'salt'
mysql.port: 3306
[iyunv@saltstack01 ~]# /etc/init.d/salt-master restart
[iyunv@saltstack01 ~]# salt '*' saltutil.refresh_pillar
3.1.4)在minion端(/etc/salt/minion)
###### Returner settings ######
############################################
# Default Minion returners. Can be a comma delimited string or a list:
#
#return: mysql
mysql.host: '10.2.11.210'
mysql.user: 'salt'
mysql.pass: 'salt123'
mysql.db: 'salt'
mysql.port: 3306
[iyunv@web minion.d]# /etc/init.d/salt-minion restart
3.1.5)测试
[iyunv@saltstack01 ~]# salt '*' cmd.run 'w' --return mysql
2、grains组件
介绍:grains里面记录每台minion的常用属性,比如cpu,内存,硬盘信息,可以通过grains.items查看
自定义grains常用的方法:
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' sys.list_functions grains
web.91als.net:
- grains.append
- grains.delval
- grains.fetch
- grains.filter_by
- grains.get
- grains.get_or_set_hash
- grains.has_value
- grains.item
- grains.items
- grains.ls
- grains.remove
- grains.set
- grains.setval
- grains.setvals
1)通过minion配置
注意:定义好grains后,minion服务必须重启
1.1)定义grains文件,然后重启salt-minion服务
[iyunv@web minion.d]# vim /etc/salt/minion.d/grains.conf
grains:
roles:
- webserver
- memcache
# deployment: datacenter4
# cabinet: 13
# cab_u: 14-15
1.2)在salt-master上测试
[iyunv@saltstack01 ~]# salt -G roles:webserver test.ping
web.91als.net:
True
[iyunv@saltstack01 ~]# salt -G roles:memcache test.ping
saltstack01.91als.net:
True
web.91als.net:
True
saltstack.91als.net:
True
2)通过grains模块定义grains
在master上设置:
[iyunv@saltstack01 ~]# salt 'tomcat.91als.net' grains.append saltboot 'tomcat' (定义tomcat.91als.net服务器上,定义saltboot并设置为tomcat)
tomcat.91als.net:
----------
saltboot:
- tomcat
[iyunv@saltstack01 ~]# salt 'tomcat.91als.net' grains.item saltboot
tomcat.91als.net:
----------
saltboot:
- tomcat
[iyunv@saltstack01 ~]# salt -G saltboot:tomcat test.ping
tomcat.91als.net:
True
3、pillar组件
3.1)打开配置文件/etc/salt/master
pillar_roots:
base:
- /srv/pillar
3.2) 配置文件
[iyunv@saltstack01 ~]#mkdir -p /src/pillar
[iyunv@saltstack01 ~]#vim /src/pillar/packages.sls
zabbix:
package-name: zabbix
version: 2.2.4
root@saltstack01 ~]#vim /src/pillar/services.sls
zabbix:
port:10050
user:admin
[iyunv@saltstack01 ~]#vim /src/pillar/top.sls
base:
'*':----------------#target目标
- packages ----------------引用packages.sls
- services ---------------------引用services.sls
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_functions pillar
web.91als.net:
- pillar.data
- pillar.ext
- pillar.fetch
- pillar.file_exists
- pillar.get
- pillar.item
- pillar.items
- pillar.keys
- pillar.ls
- pillar.obfuscate
- pillar.raw
[iyunv@saltstack01 ~]# salt '*' saltutil.refresh_pillar
[iyunv@saltstack01 ~]# salt '*' pillar.item zabbix
tomcat.91als.net:
----------
zabbix:
----------
package-name:
zabbix
port:
10050
user:
admin
version:
2.2.4
4、module组件
saltstack通过push的方式进行管理的入口,比如日常简单的执行命令,查看包的安装情况,查看服务运行情况等,默认软件安装完后,安装了很多module模块
4.1)查看所有module
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_modules
web.91als.net:
- acl
- aliases
-> - apache
- archive
- artifactory
- at
- ....
查看指定模块所有的funcation
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_functions cmd
web.91als.net:
- cmd.exec_code
- cmd.exec_code_all
- cmd.has_exec
- cmd.powershell
- cmd.retcode
- cmd.run
- cmd.run_all
- cmd.run_bg
- cmd.run_chroot
- cmd.run_stderr
- cmd.run_stdout
- cmd.script
- cmd.script_retcode
- cmd.shell
- cmd.shell_info
- cmd.shells
- cmd.tty
- cmd.which
- cmd.which_bin
查看指定模块的说明:
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.doc cmd.run-----------查看帮助
5、state
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_state_modules
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_state_functions file
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.state_doc file------------查看帮助
(更多内容详见(saltstack专题学习(二))) |