SaltStack研究心得

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

基础篇

--------------------------------------------------------------------------------------------------------

  概述:SaltStack简单来说是一个基础架构管理工具,这个比较抽象,说白就是一个运维管理工具,底层是使用python实现,C/S架构,支持分布式部署,据说可以轻松管理上W台服务器,和Puppet这类工具很类似,其主要的功能:

  1. 基于Key的远程连接并执行命令;

  2. 强大的搜索器,多种方式过滤服务器;

  3. 灵活的远程部署实现方式;

  4.  基于YMAL格式对文件,用户,用户组及服务等资源灵活管理;

极简易安装


  本实例采用CentOS6.5_x86_64操作系统,在安装之前请先配置好Yum


 salt-master服务端安装

1

2

3

yum -y install salt-master    /安装

rpm -aq|grep salt-master    /检测

salt-master配置文件: /etc/salt/master


 salt-minion客户端安装

1

2

3

yum -y install salt-minion   /安装

rpm -aq|grep salt-minion   /检测

salt-minion配置文件: /etc/salt/minion


添加客户端


1

2

3

4

5

6

salt-key -L    /列出所有key,key格式是minion-id,如果没有配置minion-id,则是主机名

salt-key -A    /接受所有key

salt-key -a  “ZK-YJY-APP-01”   /接受指定的key

salt-key -R    /拒绝所有未接受的key

salt-key -D     /删除所有key

salt-key -d  “ZK-YJY-APP-01”   /删除指定的key


Target搜索器


  添加了minionkey后就可以免密码将命令传输到minion,并把执行结果返回来,方便的进行批量操作了,想象一下,如果有上W台服务器,而只想查看某些服务器的配置信息,怎么实现  当然要有一个目标搜索器才行,saltstacktarget搜索器非常强大,基于minionid进行匹配,所以我们在部署minion之前要事先对minionid做好规划(如果不配置minionid,则默认是使用主机名,也要对主机名做好规划)

 glob方式

1

2

salt “*” test.ping  

salt “ZK-YJY-APP-01” test.ping

正则表达式

1

2

3

salt  “web*” test.ping

salt  “web[0-9]NaNdb?” test.ping

salt  “web-[x-z]” test.ping

 grains

1

2

salt -G “os:CentOS” test.ping

salt -G "cpuarch:x86_64"test.ping

 基于IP

1

2

salt -S "192.168.153.130"test.ping

salt -S "192.168.153.0/24"test.ping

 基于节点组

需要先在/etc/salt/master中定义nodegroups,如下:

1

2

3

4

nodegroups:

     group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com’

     group2: 'G@os:Debian and foo.domain.com'

     group3: 'L@webserver01,webserver02'

1

salt -Ngroup3 test.ping

 复合方式

本质是上面的方式结合在一起,形成更为复杂的条件:

1

salt -C 'webserv* and G@os:Debian orE@web-dc1-srv.*' test.ping


Grains是啥


 grains简单来说就是一个字典,{“os”:CentOS, “num_cpus”:8},字典就是这样的key-value的键值对的一个无序集合,里面存放着minion端的所有配置信息,

列出配置信息的分类,其实就是查看有哪些key

1

salt “*” grains.ls

列出配置信息的分类和具体分类信息,其实就是查看key-value

1

salt “*” grains.items

 列出某个配置信息项的具体信息

1

salt “*” grains.item cpu_model

 

==========================================================================================

 

进阶篇States

-------------------------------------------------------------------------------------------------------

  这篇是为自动化部署作准备的,核心就是弄清楚States的使用技巧


YAML基本格式


1

2

3

4

nginx_package:      //声明id

     file.managed:       //文件模板的managed函数,作用是实现从master下载文件

         - name: /tmp/nginx-1.8.0.tar.gz    //定义名称空间

         - source: salt://nginx/files/nginx-1.8.0.tar.gz   //指定文件在master上的位置

难点说明:

saltstackYMAL格式通常以声明id开始,名称空间会覆盖id,也就是说,如果没有name,则id就是name,如果有nameid只作为标识,且在一个sls文件中,id不能重复,在states中有很多模块函数,可以对文件,用户,用户组,服务,定时任务等资源进行操作,我们只要调用并定义一些参数即可。

这里要注意下缩进和空间,仔细观察就明白了


条件判断和先决条件

1

2

3

4

5

6

7

8

extract_nginx:    //声明id

     cmd.run:    //这个模块是表示要执行一些系统命令

       - cwd: /tmp    //切换到指定目录下

       - names:   //具体的命令,如果有多条可依次向下排列

         - tar zxf nginx-1.8.0.tar.gz

       - unless: test -d /tmp/nginx-1.8.0     //这里是一个条件判断

       - require:  //先决条件

         - file: nginx_source   //具体条件

难点说明:

  第一个要注意的地方是unless这个判断条件,这个条件如果返回falsecmd.run才执行,否则不执行,unless可以很好的控制同步配置后重复执行某些命令

  第二个需要注意的地方是先决条件require,先决条件除了require之外还是watch,但require可以用在任何模块中,watch只能用在service.running模块中


用户和组模块


1

2

3

4

5

6

7

8

9

10

11

12

nginx_user:   //声明id

 user.present:    //用户管理模块,以下是一些参数

       - name: nginx  

       - uid: 121

       - gid: 121

       - createhome: false

       - shell: /sbin/nologin

       - require:  //先决条件,表示要创建nginx用户先创建nginx这个组

         - group: nginx  

  group.present:

       - name: nginx

         - gid: 121


服务模块


1

2

3

4

5

6

7

nginx_service:     //声明id

 service.running:      //服务运行模块

   - name: nginx

   - enable: True

   - reload: True

   - watch:    //监测以下条件是否变化,如果改变则重启服务

     - file: /usr/local/nginx/conf/nginx.conf

  我开始以为是修改minionnginx配置会自动重启,后面验证不对,应该是修改了masternginx的配置源文件,执行同步才会重启,使minionnginx配置文件始终与master配置文件保持一致,这个是我测试的结果,也可能理解有误,后面再去研究吧。

 

Template模板


1

2

3

4

{% for usr in['moe','larry','curly'] %}

   {{ usr }}:

       user.present

{% endfor %}

       这个就是python中的模板标签的定义{%%}{{}}在,sls中,或者在配置源文件中都可以使用模板标签。

1

2

3

4

5

6

7

apache:    

   pkg.installed:

   {% if grains['os'] =='RedHat' %}

       - name: httpd

   {% elif grains['os'] =='Ubuntu' %}

       - name: apache2

   {% endif %}

使用模板可以比较灵活的对可变的部分进行控制


include引入


       如果有多个sls文件,我们可以在一个sls文件中引入另一个sls,在init.sls文件顶部添加如下内容:

1

2

3

include:

   -  install.sls

   -  conf.sls

 


批量部署nginx


       有了以上的基础,就可以很方便的部署任何软件包了,这里重点讲下步骤:

 编辑master配置文件,将如下内容注释去掉

1

2

3

file_roots:

      base:    //此处的base标识在top.sls文件中引用

        - /srv/salt   //配置管理文件存放的root目录

当然,这里可以根据需要创建多个不同的file_roots目录

创建指定的目录

       默认/srv目录下是空的,需要创建salt目录

创建top.sls文件

       在/srv/salt目录下创建top.sls文件

1

2

3

4

base:   //此处的base即在file_roots中定义的base

 '*':  //这里是表示target目标,可以使用搜索器定义

   - nginx.install     //表示file_roots目录下的nginx目录下的install.sls

   - nginx.conf    //表示file_roots目录下的nginx目录下的conf.sls

 top.sls是一个入口文件,master同步时首先会去读取top.sls ,通过top.sls去找对应目录下的其它sls文件

编写install.slsconf.sls

       此处略去无数行

将软件包和配置文件和启动脚本放到指定目录

       你懂的

       网上有大量的部署配置,推荐一些比较好的网址,个人建议学saltstack之前最好有一些python基础,毕竟是python写的

http://blog.cunss.com/?p=272

https://docs.saltstack.com/en/latest/

本文转自清风拂面 51CTO博客,原文链接:http://blog.51cto.com/crazy123/1708166


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
运维 Devops Linux
深入调查研究Ansible
【11月更文挑战第4天】
41 1
|
数据安全/隐私保护
Saltstack极速入门
Saltstack极速入门
226 0
|
存储 JSON 应用服务中间件
saltstack学习自动化
saltstack学习自动化
112 0
|
应用服务中间件 Linux 开发工具
|
消息中间件 运维 网络协议
|
缓存 运维 Shell
Ansible纸上谈兵02:自动化部署时可能用到的模块
Ansible纸上谈兵02:自动化部署时可能用到的模块
184 0
|
关系型数据库 MySQL 应用服务中间件
|
运维 Devops jenkins
自动化工具后起之秀Ansible的部署实践
本文讲的是自动化工具后起之秀Ansible的部署实践,从早期手动加脚本的部署方式,到后来自动化工具(chef, puppet, saltstack, ansible等)的出现,再到如今DevOps的盛行,企业应用部署正式进入平台部署阶段,CD(持续部署)已经成为企业对应用部署的标准需求,运维的交付也不再是以周或天为单位,而是以分钟为单位。
4223 0