SaltStack部署及使用实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack部署及使用实践相关的知识,希望对你有一定的参考价值。
川大集团
目录
1 SaltStack简介
2 SaltStack安装
2.1 测试环境
主机名 | 操作系统 | IP地址 | 备注 |
master01.lavenliu.com | CentOS 6.5 64位 | 192.168.20.134 | Salt主控端 |
minion01.lavenliu.com | 192.168.20.135 | Salt被控端 | |
minion02.lavenliu.com | 192.168.20.136 | Salt被控端 |
在3台机器上分别安装EPEL源,
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-8.noarch.rpm
2.2 安装SaltStack
2.2.1 Salt之Master端安装
yum install -y salt-master
2.2.2 Salt之Minion端安装
yum install -y salt-minion
3 SaltStack配置
3.1 理解YAML
SLS文件的默认渲染器是YAML渲染器。书写SLS文件只有简单的三条规则。
3.2 常用YAML关键字说明
3.2.1 unless
3.2.2 include
3.2.3 require
我依赖哪个state
3.2.4 require_in
哪个state依赖我
3.2.5 watch
3.3 Salt之Master端配置
Salt主控端的配置如下:
[[email protected] ~]# egrep -v "^#|^$" /etc/salt/master
interface:192.168.20.134
file_roots:
base:
- /etc/salt/states
prod:
- /etc/salt/states/prod
Salt Master常用的配置说明:
+ interface: 指定bind的地址(默认为0.0.0.0)
+ publish_port: 指定发布端口(默认为4506)
+ ret_port: 指定结果返回端口,与minion配置文件中的master_port对应(默认为4506)
+ user: 指定master进程的运行用户,如果调整,则需要调整部分目录的权限(默认为root)
+ timeout: 指定超时时间,如果minion规模庞大或网络状况不稳定,建议增大该值(默认5s)
+ keep_jobs: 默认情况下,minion会将执行结果返回给master,master会缓存到本地的cachedir目录,该参数指定缓存多长时间,以供查看之前
的执行结果,会占用磁盘空间(默认为24h)
+ file_recv: 是否允许minion传送文件到master(默认False)
+ file_roots:
+ pillar_roots: 指定pillar目录,默认为:
+ log_level: 执行日志级别,支持的日志级别有"garbage", "trace", "debug", "info", "warning", "error", "critical" (默认warning)
接下来创建我们指定的目录,在主控端进行操作:
mkdir -p /etc/salt/states/{init,prod}
修改完毕,启动Salt Master并加入开机启动,操作如下:
/etc/init.d/salt-master start
chkconfig salt-master on
启动完毕,进行salt的进程的验证,是否启动成功,
[[email protected] ~]# ps -ef |grep salt |grep -v grep
root 2028 1 0 11:20 ? 00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2029 2028 0 11:20 ? 00:00:09 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2030 2028 0 11:20 ? 00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2033 2028 0 11:20 ? 00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2034 2028 0 11:20 ? 00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2037 2034 0 11:20 ? 00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2038 2034 0 11:20 ? 00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2039 2034 0 11:20 ? 00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2040 2034 0 11:20 ? 00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2041 2034 0 11:20 ? 00:00:01 /usr/bin/python2.6 /usr/bin/salt-master -d
root 2042 2034 0 11:20 ? 00:00:00 /usr/bin/python2.6 /usr/bin/salt-master -d
检查是否加入开机自启动,
[[email protected] ~]# chkconfig --list |grep salt
salt-master 0:off 1:off 2:on 3:on 4:on 5:on 6:off
3.4 Salt之Minion端配置
被控端的配置很简单,只需要修改一处配置就可以让主控端与被控端进行正常的通信。在minion01及minion02上做如下的配置,如下:
[[email protected] ~]# egrep -v "^#|^$" /etc/salt/minion
master: master01.lavenliu.com
[[email protected] ~]# egrep -v "^#|^$" /etc/salt/minion
master: master01.lavenliu.com
这里我们使用了Salt主控端的主机名而非主控端的IP地址,主要是我们这里已经配置了DNS解析,所以使用了主机名。如果我们没有配置DNS的域名解析服务,我们改写master: <salt_master_ip>的形式来使用。
Salt Minion常用的配置说明:
+ master:指定master主机(默认为salt)
+ master_port: 指定认证和执行结果发送到master的哪个端口,与master配置文件中的ret_port对应(默认为4506)
+ id: 指定本minion的标识,salt内部使用id作为标识(默认为主机名)
+ user: 指定运行minion的用户,用于安装包、启动服务等操作需要特权用户,推荐使用root(默认root)
+ cache_jobs: minion是否
启动Salt Minion并加入开机启动,在minion01及minion02上进行操作
/etc/init.d/salt-minion start
chkconfig salt-minion on
接下来验证Salt Minion是否启动成功,
ps -ef |grep salt |grep -v grep
root 1655 1 0 11:56 ? 00:00:03 /usr/bin/python2.6 /usr/bin/salt-minion -d
chkconfig --list |grep salt
salt-minion 0:off 1:off 2:on 3:on 4:on 5:on 6:off
3.5 签发证书
Salt的Master及Minion端第一次启动时都会生成证书,而Master端在生成证书之前,还会创建一个CA,并且自己将证书签发。而Minion端默认会向Master端发起一个证书请求让Master端签发,以建立信任关系。
在主控端使用salt-key来查看Minion端的证书申请请求,
[[email protected] states]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
minion01.lavenliu.com
minion02.lavenliu.com
Rejected Keys:
接受Minion端的申请,
salt-key -A
3.6 Master端与Minion端的通信测试
以上设置完毕,接下来验证Master与Minion端是否可以正常通信,使用test.ping进行验证,操作如下:
[[email protected] states]# salt ‘*‘ test.ping
minion01.lavenliu.com:
True
minion02.lavenliu.com:
True
返回两个True时,说明我们的Salt配置已成功。在此基础上,我们就可以做更多的配置管理了,在接下来的章节中进行说明。
4 SaltStack基本使用
我们日常简单的执行命令、查看安装包情况、查看服务运行状态情况等工作都是通过SaltStack的模块实现的。当我们安装完毕Master与Minion后,系统默认会安装很多模块,接下来具体看看怎么使用这些模块。
4.1 模块使用相关
4.1.1 查看Minion的所有模块
[[email protected] ~]# salt ‘minion01.lavenliu.com‘ sys.list_modules
minion01.lavenliu.com:
- acl
- aliases
- alternatives
- apache
- archive
- artifactory
- blockdev
- btrfs
- buildout
- cloud
- cmd
此处省略很多行
- timezone
- user
- vbox_guest
- virtualenv
- webutil
- xfs
4.1.2 查看Minion指定模块下的函数
接下来,我们查看cmd模块有哪些方法,
[[email protected] ~]# salt ‘minion01.lavenliu.com‘ sys.list_functions cmd
minion01.lavenliu.com:
- cmd.exec_code
- cmd.exec_code_all
- cmd.has_exec
- cmd.retcode
- cmd.run
- cmd.run_all
- cmd.run_chroot
- cmd.run_stderr
- cmd.run_stdout
- cmd.script
- cmd.script_retcode
- cmd.shell
- cmd.shells
- cmd.tty
- cmd.which
- cmd.which_bin
4.1.3 查看Minion模块的使用方法
查看cmd模块的使用方法,
[[email protected] ~]# salt ‘minion01.lavenliu.com‘ sys.doc cmd
‘cmd.exec_code:‘
Pass in two strings, the first naming the executable language, aka -
python2, python3, ruby, perl, lua, etc. the second string containing
the code you wish to execute. The stdout will be returned.
CLI Example:
salt ‘*‘ cmd.exec_code ruby ‘puts "cheese"‘
‘cmd.exec_code_all:‘
Pass in two strings, the first naming the executable language, aka -
python2, python3, ruby, perl, lua, etc. the second string containing
the code you wish to execute. All cmd artifacts (stdout, stderr, retcode, pid)
will be returned.
CLI Example:
此处省略很多行
以上输出的信 以上是关于SaltStack部署及使用实践的主要内容,如果未能解决你的问题,请参考以下文章 SaltStack的salt-ssh使用及LAMP状态设计部署