saltstack组件
实验环境
saltstack(master主机):
192.168.1.103(master.example.com)
saltstack(minion主机):
192.168.1.104(minion4.example.com)
注意:
1.两个节点的防火墙都需要关闭或者允许数据包的传入传出
2.两个节点之间要相互作dns解析(/etc/hosts)
3.两个节点的selinux关闭
1.管理对象Target
1.首先我们设置master和minion的配置文件内容,对于master,我设置auto_accept为True,即对客户端的连接自动进行签证,这样他们之间的连接就自动进行了加密传输。关于服务端的配置信息如下所示(文件为/etc/salt/master):
interface为publish/ret端口的监听地址(服务端地址)。
2.在客户端只需要指定master(服务端)的地址以及客户端的名称即可:
*注意:
saltstack的配置信息都符合一定的格式规范,每一个配置选项后边的内容必须要用空格隔开。如果没有用空格隔开,则会报格式错误。
修改完客户端的配置,将master和后边的内容连接在了一起,重新启动客户端的服务/etc/init.d/salt-minion,则会产生报错:
3.在master端检测已经签证的minion列表,可以看到minion-192.168.1.104主机已经获得了签证:
4.下面我们可以测试minion与master的连通性:
上述操作做了一个简单的测试,下面我们介绍以下saltstack的master可能会用到的常见命令和参数,毕竟我们需要管理众多的minion节点:
master命令:
minion命令:
2.管理对象属性
Grains是saltstack组件中非常重要的组件之一,它用来记录minion的系统信息(操作系统、域名、IP 地址、内核信息、操作系统类型、内存信息以及其他更多的系统信息)。
Grain收集的信息是静态的,在minion第一次启动时采集数据(除非下次重起,否则数据不会变化)。
首先我们插好Grains相关命令用法:
关于这些命令的具体用法我们可以使用如下命令查看文档:
除了上述系统自带的一些Grains方法之外,我们还可以通过以下三种方式来自定义Grains:
(1)通过Minion配置文件定义
(2)通过Grains相关模块定义
(3)通过Python脚本定义
(1)通过Minion配置文件定义
关于Grains的配置内容可以出现在多个文件中,他们之间需要排列出相应的优先级,下面我们给出其关系(越向下的优先级越高):
- Core grains.
- Custom grains in /etc/salt/grains.
- Custom grains in /etc/salt/minion.
- Custom grain modules in _grains directory, synced to minions.
下面我们给出示例,关于grains的内容编写在/etc/salt/minion:
[root@minion4 ~]# vim /etc/salt/minion
我们给出了roles、deployment、cabinet等键值对。这个内容的编写是在客户端进行的,当修改完成后我们重启客户端:
然后在服务端可以查看客户端的grains信息,以roles为例:
(2)通过Grains相关模块定义
在上述sys.list_functions模块中我们查询了关于grains的操作,其中的grains.append方法可以创建出新的grains信息:
还可以使用grains.setvals同时设置多个grains信息:
(3)关于使用python脚本定义grains信息的方法在后续的章节中将会进行介绍。
3.数据管理中心
除了Grains可以采集minion的信息,Pillar也是saltstack组件中的重要部分,它负责数据的管理。Pillar在saltstack的主要作用就是存储和定义配置管理中需要的数据(比如版本号、用户名密码等信息),它的编写格式同样符合YAML(这个我们后续进行介绍)。
Pillar的默认存储路径为/srv/pillar,这个是它的根目录:
(1)下面我们以一个简单的示例说明pillar是如何设置信息的,首先需要创建目录/srv/pillar:
(2)然后创建top.sls主配置文件:
[root@master pillar]# vim /srv/pillar/top.sls
(3)’*’代表所有的minion节点,然后设置test_data的内容:
[root@master pillar]# vim /srv/pillar/test_data.sls
我们还可以查看更多关于pillar模块的方法:
我们还可以将pillar的数据存储在数据库中,在后续的章节中将会进行介绍。
4.针对管理对象操作
Module是我们使用最多的一个组件,它包括了我们对于对象管理的各种操作,例如我们在一开始测试master与minion连通性的时候使用了Module中的test module以及它所包含的方法ping。
(1)查看指定minion的module列表:
查看minion所支持的module列表可以使用如下方法:
(2)查看指定module的所有function:
例如测试test.echo:
5.状态描述文件
在saltstack中,states是我们主要的配置语言,对于不同的业务需求需要编写大量的states文件,其中使用的语法依然是YAML语法(这个配置方式和xml的作用类似,不过配置方法不同)。
(1)查看所有的states列表:
(2)查看指定states的所有function:
(3)如何去编写自己的states:
上述介绍的都是查询系统已有的states,接下来的例子介绍如何编写一个简单的states。
任务:在指定的minion节点上的/tmp目录中创建hello.conf文件。
(1)在/srv/salt/目录中创建hello.sls文件:
(2)这里边的salt://hello.conf路径是指/srv/salt/hello.conf文件。即我们要明确salt://其实代表的是/srv/salt目录。
(3)给定/srv/salt/hello.conf文件的内容,并且进行同步设置。
同步hello.conf到minion-192.168.1.104节点:
小结:
上述的示例中我们介绍了salt的多种组件(虽然不是非常全面),并且给出了简单的示例,在后续的章节中我们将会更加深入的配置salt,使其更加的实用。