自动化运维之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

 

masterminion端都需要安装

安装完成后在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加密,masterminion之间在通信前,需要进行认证。通过认证的方式保证安全性,完成一次认证后,master就可以自由的控制minion来完成各项工作了。

1.          minion在第一次启动时,会在/etc/salt/pki/minion下生成minion.pemprivate key)和minion.pubpublic key),然后将minion.pub发送给master

2.         master在第一次启动时,会在/etc/salt/pki/master下生成master.pemmaster.pub。通过salt-key接收minionpublic 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

由于这里是测试环境,masterminion端都关闭了防火墙及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.   冒号  keyvalue ----》以冒号结尾,以冒号为路径的除外,其他必须有空格

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的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维之SaltStack

自动化运维之saltstack

自动化运维之SaltStack

Linux学习总结(七十三)自动化运维之saltstack

参会提醒大规模自动化运维之-SaltStack

自动化运维之saltstack