SaltStack常用组件使用 SaltStack配置文件说明 轻量级DNS、DHCP服务软件DNSMASQ 千万级PV(日)的移动应用架构如何实现 高效运维最佳实践-运维自动化之殇 Ubuntu 14.04 Linux如何配置静态IP地址和DNS服务器 ELK 常见错误与解决办法 Elasticsearch 集群配置管理常用操作 常用数字证书格式相互转换-OpenSSL/Keytool/Jks2pfx ELK 综合日志归档分析系统(2)-Logstash安装配置 Elasticsearch之Shield认证与权限管理 ELK 综合日志归档分析系统(1)-Elasticsearch-Redis安装配置 Redmine 3.2 安装配置指南 CentOS6 大型web系统数据缓存设计 Redis 集群方案 Linux 内核TCP优化详解 SaltStack初始化安装配置 OpenLDAP常用操作 OpenLDAP统一身份认证 [CentOS6/7] 构建Linux Skype Message消息推送API服务(Zabbix集成告警) Tomcat 生产服务器性能优化 Zabbix结合iptables监控网络流量 Linux操作系统环境配置与优先级问题 深入 NGINX: 我们如何设计性能和扩展 Windows SQL Server 性能计数器详细说明 Windows性能计数器说明 Ubuntu安装openntpd报错:Starting openntpd: /etc/openntpd/ntpd.conf: Permission denied locale: Cannot set LC_ALL to default locale: No such file or directory OpenSSL拆解p12证书公约和私钥 Linux sar 统计系统性能(网卡、内存和交换空间、CPU资源等) Linux Shell /dev/null 2>&1 含义 Windows 2003操作系统网络不通 构建私有yum安装源镜像站点(openstack) CentOS6/RedHat6新增网卡识别问题 Ubuntu 14.04 Server优化与使用问题解决 Redhat/CentOS6系统使用ntfs-3g挂载NTFS分区 Linux GPT挂载超过2TB磁盘 Linux系统性能优化、测试和监控工具梳理 修复WIN2003远程桌面服务无法访问 解决CentOS“Zabbix discoverer processes 75% busy”的问题 REHL/CentOS安装phpMyadmin

SaltStack常用组件使用

2017年05月08日

SaltStack常用组件

一、关于SaltStack的模块

SaltStack中的Module是我们日常使用SaltStack接触最多的一个组件,是用于管理对象操作的,这也是SaltStack通过Push的方式进行管理的入口,比如我们日常简单的执行命令、查看包安装情况、查看服务运行情况等工作都是通过SaltStack Module来实现的。默认安装好Master和Minion包之后,系统上会安装很多Module,大家可以通过以下命令查看支持的所有Module列表。

[root@pactera-jenkins-server pillar]# salt 'centos68-2*' sys.list_modules
centos68-2.test.pactera.top:
    - acl
    - aliases
    - alternatives
    - archive
    - artifactory
    - beacons
    - bigip
    - blockdev
    - bridge
    - btrfs
    - buildout
    - cloud
    - cmd
    - composer
    - config
    - consul
....

如果我们需要查看模块中具体可以使用的操作方法,则使用sys.list_functions

[root@pactera-jenkins-server pillar]# salt 'centos68-2*' sys.list_functions service
centos68-2.test.pactera.top:
    - service.available
    - service.delete
    - service.disable
    - service.disabled
    - service.enable
    - service.enabled
    - service.get_all
    - service.get_disabled
    - service.get_enabled
    - service.missing
    - service.reload
    - service.restart
    - service.start
    - service.status
    - service.stop

如果我们需要查看该模块的详细用法可以使用salt ‘target’ sys.doc [模块名称]

二、SaltStack 目标对象管理

在大规模服务器集群中,首先我们对维护好管理的对象,在SaltStack系统中把管理的目标对象称为”Target“,在Master上我们可以采用不同的Target去管理不同的Minion。这个Target通过管理和匹配Minion的ID来做一些集合的匹配。SaltStack管理对象拥有多种方式,包括Glob(默认)、PCRE、list、subnet、Grain、Grain PCRE、Pillar、Compound(混合)、Nodegroup(节点组).

2.1 目标对象匹配模式

  1. 正则匹配 在操作与管理Minion时可以通过正则表达式来匹配Minion ID的方式去管理它们。比如我们想要对匹配到’Min*‘字符串的Minion进行操作,可以按如下代码配置:
    SaltStack@Master: salt -E  'Min*' test.ping 
    Minion:
     True 
    Minion1:
     True
    Min*就是一个简单的正则表达式,当然你也可以写出任何正则表达式去匹配Minion ID。
    
  2. 列表匹配 ``` SaltStack@Master: salt -L Minion,Minion1 test.ping Minion: True Minion1: True
Minion和Minion1通过列表的方式去指定Minion ID,可直接使用。

3. Grians匹配

SaltStack@Master: salt -G ‘os:MacOS’ test.ping Minion: True Minion1: True


其中os:MacOS,这里的对象是一组键值对,这里用到了Minion的Grains的键值对。在后面介绍Grains的时候会详细讲解,这里只需要知道可以通过键值对的方式去匹配Minion ID。当然SaltStack也支持正则匹配Grains信息,大家可以通过--grain-pcre参数去匹配。

4. 组匹配

SaltStack@Master: salt -N groups test.ping Minion: True Minion1: True

在SaltStack系统中也可以提前给Minion定义组角色,但是需要提前知道Minion ID信息才能把它定义到某个组中。groups是我们在master配置文件中定义的组名称。

nodegroups: groups: ‘L@Minon,Minion1


5. 复合匹配

SaltStack@Master: salt -C ‘G@os:MacOS or L@Minion1’ test.ping Minion: True Minion1: True

os:MacOS or L@Minion1是一个复合组合,支持使用and和or关联多个条件。

6. Pillar值匹配

SaltStack@Master: salt -I ‘key:value’ test.ping Minion: True Minion1: True


key:value是Pillar系统中定义的一组键值对,跟Grains的键值对类似。在下面的章节里面我们也会详细介绍SaltStack中的Pillar系统。

7. subnet匹配

SaltStack@Master: salt -S ‘192.168.1.0/24’ test.ping Minion: True Minion1: True


192.168.1.0/24是一个指定的CIDR网段,这里CIDR匹配的IP地址是Minion连接Matser 4505端口的来源地址。

8. 常见的Target匹配模式如下表所示:

参数| 匹配模式        |       例子                           | 备注
  L | List of minions | L@Minion,Minion1,Minion2,Minion3     |
  G | Grains glob     | G@os:Ubuntu                          |操作系统平台不区分大小写
  E | PCRE minion ID  | E@Minion[1-3]                        |
  P | Grains PCRE     | P@os:(Centos\Fedora\Redhat)          |
  I | Pillar glob     | I@key:value                          |
  S | subnet/IP address | S@192.168.0.0/24 or S@192.168.0.122|
  R | Range cluster   | R@%foo.bar                           |
  C | compound        | G@os:MacOS or L@Minion1              |

### 2.2 管理对象属性

Grains是SaltStack组件中非常重要的组件之一,因为我们在做配置部署的过程中会经常使用它,Grains是SaltStack记录Minion的一些静态信息的组件,我们可以简单地理解为Grains里面记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等,我们可以通过grains.items查看某台Minion的所有Grains信息,Minions的Grains信息是Minions启动的时候采集汇报给Master的,在实际应用环境中我们需要根据自己的业务需求去自定义一些Grains,关于自定义Grains的常用方法有以下几种:
- 通过Minion配置文件定义。
- 通过Grains相关模块定义。
- 通过Python脚本定义。

SaltStack@Master: salt ‘Minion’ sys.list_functions grains Minion: - grains.append - grains.delval - grains.filter_by - grains.get - grains.get_or_set_hash - grains.has_value - grains.item - grains.items - grains.ls - grains.remove - grains.setval - grains.setvals


#### 2.2.1 Minion配置文件定义Grains
下面我们先介绍下比较简单的Grains自定义方法,就是通过Minion配置文件定义。前面已经讲到Minions的Grains信息是在Minions服务启动的时候汇报给Matser的,所以我们需要修改好Minion配置文件后重启Minion服务。在Minion的/etc/salt/minion配置文件中默认有一些注释行。这里就是在Minion上的minion配置文件中如何定义Grains信息例子。下面只需根据自动的需求按照以下格式去填写相应的键值对就行,大家注意格式就行,SaltStack的配置文件的默认格式都是YAML格式:

#grains:

roles:

- webserver

- memcache

deployment: datacenter4

cabinet: 13

cab_u: 14-15


为了统一管理Minion的Grains信息,需要把这些注释复制到minion.d/grains文件中:

SaltStack@Minion: cat /etc/minion.d/grains grains: roles: - webserver - memcache deployment: datacenter4 cabinet: 13 cab_u: 14-15


然后通过/etc/init.d/salt-minion restart命令重启Minion服务。之后就可以去Master上查看定义的Grains信息是否生效:

SaltStack@Master: salt ‘Minion’ grains.item roles Minion: ———- roles: - webserver - memcache SaltStack@Master: salt ‘Minion’ grains.item deployment Minion: ———- cabinet: 13


#### 2.2.2 Grains模块定义Grains

下面通过Grains模块定义Grains信息:

SaltStack@Master: salt ‘Minion’ grains.append saltbook ‘verycool’ #设置grains信息 Minion: ———- saltbook: - verycool SaltStack@Master: salt ‘Minion’ grains.item saltbook #查看grains信息 Minion: ———- saltbook: - verycool


可以通过使用grains.setvals同时设置多对Grains信息:

[root@pactera-jenkins-server ~]# salt -E ‘centos68-2.test.pactera.top’ grains.setvals “{‘salt’:’good’,’book’:’cool’}” centos68-2.test.pactera.top: ———- book: cool salt: good


## 三、Pillar数据管理中心

### 3.1 什么是Pillar?

Pillar是SaltStack重要的组件之一,我们经常配合states在大规模配置管理工作中使用它,Pillar在SaltStack中主要作用就是存储和定义配置管理中需要的一些数据,比如版本号,用户名和密码等信息,它的定义存储格式跟Grains类似,都是YAML格式。在SaltStack Master配置文件中有一段 Pillar Settings选项定义了Pillar相关的参数:

#pillar_roots:

base:

- /srv/pillar


现在我们只需要了解pillar_roots相关的配置即可,默认Base环境下Pillar的工作目录在/srv/pillar目录下。如果你想定义多个环境不同的Pillar工作目录,只需要修改这处配置文件即可。下面我就用默认的配置,首先去pillar工作目录新建top.sls文件然后引用两个sls文件:

[root@pactera-jenkins-server pillar]# cat /srv/pillar/top.sls base: ‘*’: - packages - services

[root@pactera-jenkins-server pillar]# cat /srv/pillar/packages.sls zabbix: package-name: zabbix version: 3.0.8 [root@pactera-jenkins-server pillar]# cat /srv/pillar/services.sls zabbix: port: 100050 user: admin


通过以下命令查看关于Pillar相关的一些模块用法:

[root@pactera-jenkins-server pillar]# salt ‘centos68-2*’ sys.list_functions pillar centos68-2.test.pactera.top: - pillar.data - pillar.ext - pillar.fetch - pillar.file_exists - pillar.get - pillar.item - pillar.items - pillar.keys - pillar.ls - pillar.obfuscate - pillar.raw


下面看一下刚刚定义的pillar

[root@pactera-jenkins-server pillar]# salt ‘centos68-2*’ pillar.item zabbix centos68-2.test.pactera.top: ———- zabbix: ———- package-name: zabbix port: 10050 user: admin version: 3.0.8 ```

这个时候我们就可以查看到刚才定义的Pillar值。当然SaltStack也支持从外部读取Pillar数据。我们可以把Pillar数据存在数据库或者存储服务器上。目前官网也已经自带24种ext_pillar数据源了。

四、States配置管理

4.1 关于States

States是SaltStack中的配置语言,在日常进行配置管理时需要编写大量的States文件。比如我们需要安装一个包,然后管理一个配置文件,最后保证某个服务正常运行。这里就需要我们编写一些states sls文件(描述状态配置的文件)去描述和实现我们的功能。这里需要说明的是编写的states sls文件都是YAML语法。当然states sls文件也支持使用Python语言来编写。

4.2 States的用法

在大规模配置管理工作中,我们需要编写大量的states.sls文件。top.sls是states配置系统的入口文件,它在大规模配置管理工作中负责指定哪些设备调用