自动化运维之saltstack
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维之saltstack相关的知识,希望对你有一定的参考价值。
1.saltstack介绍
SaltStack是一个服务器基础架构集中化管理平台,SaltStack基于Python语言实现,也是基于C/S架构,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建,SaltStack整合了Puppet和Chef的功能,更适合大规模批量管理服务器,配置简单。
三大主要功能:远程执行、配置管理、云管理
运行方式:local(本地)、Master/Minion(传统方式)、Syndic(分布式)、Salt SSH
saltstack官方网站
2.SaltStack工作原理
Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。
Saltstack的master端监听4505与4506端口,4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。当然,客户端若检查到断开后会定期的一直连接master端的。
salt-master服务启动后会开启两个端口:4505和4506,minion没有端口,通过“双向密钥交换”(可通过tree /etc/salt/pki命令查看)来实现安全管理。salt-master每执行一条命令,所有minion均可收到。
3. saltstack安装
saltstack支持多种操作系统,如centos、redhat、debian、ubuntu、FreeBSD等,以及windows(仅支持minion)
安装 epel--------提供2015版本的salt
centos 6 64位
rpm -Uvh
http://mirrors.yun-idc.com/epel/6Sever/x86_64/epel-release-6-8.noarch.rpm
master与minion端都需要安装
安装完成后在master端执行 yum -y install salt-master
在minion端执行yum -y install salt-minion
安装完环境:
主机名 | IP |
salt-master | 192.168.132.20 |
salt-minion01 | 192.168.132.11 |
salt-minion01 | 192.168.132.10 |
minion端配置使其指向master:
vim /etc/salt/minion
添加 master: 192.168.132.20 为master IP,实际生产环境最好为域名。
master端启动:/etc/init.d/salt-master start
开机自启动:chkconfig salt-master on
minion端启动:/etc/init.d/salt-minion start
开机自启动:chkconfig salt-minion on
安装完后查看salt信息
[[email protected] app]# salt '*' test.versions_report
salt-minion02:
Salt: 2015.5.10
Python: 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Jinja2: 2.2.1
M2Crypto: 0.20.2
msgpack-python: 0.4.6
msgpack-pure: Not Installed
pycrypto: 2.0.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.3.1
RAET: Not Installed
ZMQ: 3.2.5
Mako: Not Installed
Tornado: Not Installed
timelib: Not Installed
dateutil: 1.4.1
salt-minion01:
Salt: 2015.5.10
Python: 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Jinja2: 2.2.1
M2Crypto: 0.20.2
msgpack-python: 0.4.6
msgpack-pure: Not Installed
pycrypto: 2.0.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.3.1
RAET: Not Installed
ZMQ: 3.2.5
Mako: Not Installed
Tornado: Not Installed
timelib: Not Installed
dateutil: 1.4.1
3.1 salt-key
查询帮助 salt-key --help
常用参数
-a -A -r -R -d -D -Y
查看key salt-key
接收minion端的key: salt-key -A -y ---》接收所有的minion且无需交互。接收完成后查看:
[[email protected] master]# salt-key
Accepted Keys:
salt-minion01
salt-minion02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
测试
[[email protected] ~]# salt '*' test.ping
salt-minion01:
True
salt-minion02:
True
4. saltstack认证原理
salt的数据传输是通过AES加密,master和minion之间在通信前,需要进行认证。通过认证的方式保证安全性,完成一次认证后,master就可以自由的控制minion来完成各项工作了。
1. minion在第一次启动时,会在/etc/salt/pki/minion下生成minion.pem(private key)和minion.pub(public key),然后将minion.pub发送给master。
2. master在第一次启动时,会在/etc/salt/pki/master下生成master.pem和master.pub。通过salt-key接收minion的public key,在master的/etc/salt/pki/master/minions目录下存放,以minion id命名的public key,同时minion会保存一份master public key在/etc/salt/pki/minion_master.pub
认证小结:
minion将自己的公钥发送给master
master认证后会将自己的公钥放置在minion端
由于这里是测试环境,master与minion端都关闭了防火墙及selinux。不然master可能无法接收minion端的key。
5. saltstack远程执行
远程执行是saltstack的核心功能之一。主要使用salt模块可以批量给选定的minion端执行相应的命令,并获得返回结果。
如 salt '*' test.ping *代表所有,test表示模块,ping表示模块下的方法。
salt '*' disk.usage 查看磁盘使用情况
saltstack可以使用cmd.run(非常重要) 模块远程执行shell命令
//让所有minion节点运行uptime命令
[[email protected] ~]# salt '*' cmd.run 'uptime'
salt-minion02:
10:30:44 up 1 day, 11:53, 1 user, load average: 0.00, 0.00, 0.00
salt-minion01:
10:30:45 up 1 day, 11:53, 1 user, load average: 0.00, 0.00, 0.00
#saltstack提供了大量的命令模块可以使用
#cmd.run可以执行所有的命令,不建议在生产环境中频繁使用。
6. saltstack配置管理
salt通过状态模块来识别配置描述文件state状态文件,格式是YAML扩展名,后缀是.sls
6.1 YAML基础语法
YAML:
1. 缩进(层级关系) 2个空格,不能使用tab
2. 冒号 key:value ----》以冒号结尾,以冒号为路径的除外,其他必须有空格
3. 短横线
表示列表项,短横线加一个空格 - list1
- list2
6.2 配置文件
master端配置文件中有说明配置文件写在什么地方。
cat /etc/salt/master
# file_roots:
# base: ----》基础环境
# - /srv/salt/
# dev: ---》开发环境
# - /srv/salt/dev/services
# - /srv/salt/dev/states
# prod: -----》生产环境
# - /srv/salt/prod/services
# - /srv/salt/prod/states
这里启用测试环境
file_roots: ----》打头写
base: ---》缩进 2个空格
- /srv/salt ----》4个空格,文件路径
启用后重启master服务,创建目录 mkdir -p /srv/salt
在实际成产环境中可以根据业务分别创建不同的文件夹,然后在对应的里面写。
6.3 实例
这里在salt下创建app目录,然后在app目录中写配置文件。
[[email protected] app]# pwd
/srv/salt/app
vim vsftpd.sls
[[email protected] app]# cat vsftpd.sls
vsftpd_install:
pkg.installed: ------>pkg模块 开头两个空格
- names: ------》下面接多个list 开头4个空格
- vsftpd
- httpd
7. 状态管理
7.1 saltstack状态
配置文件写好后
执行 salt '*' state.sls app.vsftpd env=base 默认为base环境
minion端安装完成,如下,如已经安装则忽略。
[[email protected] salt]# salt '*' cmd.run 'rpm -qa|grep vsftpd'
salt-minion01:
vsftpd-2.2.2-24.el6.x86_64
salt-minion02:
vsftpd-2.2.2-24.el6.x86_64
[[email protected] salt]# salt '*' cmd.run 'rpm -qa|grep httpd'
salt-minion01:
httpd-tools-2.2.15-60.el6.centos.6.x86_64
httpd-2.2.15-60.el6.centos.6.x86_64
salt-minion02:
httpd-2.2.15-60.el6.centos.6.x86_64
httpd-tools-2.2.15-60.el6.centos.6.x86_64
如果要安装后服务启动可以继续编写配置文件,如下:
[[email protected] app]# cat vsftpd.sls
vsftpd_install:
pkg.installed:
- names:
- vsftpd
- httpd
vsftpd_service:
service.running:
- name: vsftpd
- enable: True
执行salt '*' state.sls app.vsftpd
查看vsftp服务状态,已经启动
[[email protected] app]# salt '*' cmd.run 'service vsftpd status'
salt-minion01:
vsftpd (pid 12399) is running...
salt-minion02:
vsftpd (pid 12721) is running...
在实际生产环境中执行后状态是不能回退的,所以可以在执行前,进行检查
如 salt '*' state.sls app.vsftpd test=True
以上是关于自动化运维之saltstack的主要内容,如果未能解决你的问题,请参考以下文章