SaltStack部署及使用实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack部署及使用实践相关的知识,希望对你有一定的参考价值。

川大集团

目录

版本控制信息... 1

目录i

1SaltStack简介... 1

2SaltStack安装... 1

2.1测试环境... 1

2.2安装SaltStack.. 1

2.2.1SaltMaster端安装... 1

2.2.2SaltMinion端安装... 1

3SaltStack配置... 1

3.1理解YAML.. 1

3.2常用YAML关键字说明... 1

3.2.1unless. 1

3.2.2include. 1

3.2.3require. 1

3.2.4require_in. 1

3.2.5watch. 2

3.3SaltMaster端配置... 2

3.4SaltMinion端配置... 3

3.5签发证书... 4

3.6Master端与Minion端的通信测试... 4

4SaltStack基本使用... 5

4.1模块使用相关... 5

4.1.1查看Minion的所有模块... 5

4.1.2查看Minion指定模块下的函数... 5

4.1.3查看Minion模块的使用方法... 6

4.2States使用相关... 7

4.2.1查看Minion的所有states列表... 7

4.2.2查看指定States模块下的函数... 8

4.2.3查看指定States模块的使用方法... 9

5SaltStack常用模块使用... 9

5.1cmd模块... 9

5.1.1run函数... 9

5.2pkg模块... 9

5.2.1installed函数... 9

5.3service模块... 9

5.4file模块... 9

5.4.1managed函数... 10

5.4.2append函数... 10

5.5state模块... 10

6SaltStack配置管理实例... 10

6.1安装基础软件包... 11

6.2安装JDK.. 11

6.3安装Tomcat. 11

6.4安装nginx.. 12

6.5安装mysql.. 12

6.6安装php. 15

6.7安装Redis. 15

6.8安装OpenStack.. 16

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  SaltMaster端安装

yum install -y salt-master

2.2.2  SaltMinion端安装

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   SaltMaster端配置

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会将执行结果返回给mastermaster会缓存到本地的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   SaltMinion端配置

被控端的配置很简单,只需要修改一处配置就可以让主控端与被控端进行正常的通信。在minion01minion02上做如下的配置,如下:

[[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并加入开机启动,在minion01minion02上进行操作


/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    签发证书


SaltMasterMinion端第一次启动时都会生成证书,而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端的通信测试


以上设置完毕,接下来验证MasterMinion端是否可以正常通信,使用test.ping进行验证,操作如下:


[[email protected] states]# salt ‘*‘ test.ping

minion01.lavenliu.com:

    True


minion02.lavenliu.com:

True


返回两个True时,说明我们的Salt配置已成功。在此基础上,我们就可以做更多的配置管理了,在接下来的章节中进行说明。


4     SaltStack基本使用


我们日常简单的执行命令、查看安装包情况、查看服务运行状态情况等工作都是通过SaltStack的模块实现的。当我们安装完毕MasterMinion后,系统默认会安装很多模块,接下来具体看看怎么使用这些模块。


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及批量安装httpd服务

部署SaltStack及批量安装httpd服务

SaltStack的salt-ssh使用及LAMP状态设计部署

[ECUG专题回顾]使用SALTSTACK部署OPENSTACK的运维实践-石山石(携程网云平台系统工程师)

自动化运维工具---SaltStack安装部署及简单案例

超详细saltstack安装部署及应用