[Saltstack][grains][pillar][二]
[grains]
<span style="color:#3333ff;"><strong>当minion端的minion服务启动的时候,会调用这个grains接口,然后收集minion的信息,收集到信息是可以在salt的其他
模块使用的,但是每当minion的服务启动的时候,也仅仅只会收集一次。不能实时的进行收集,除非重启minion端的服务。</strong></span>
--------------------------------------------------------------
salt '192.168.60.101' grains.ls
192.168.60.101:
- SSDs 固态硬盘
- biosreleasedate BIOS发布时间
- biosversion BIOS版本
- cpu_flags CPU特征信息
- cpu_model CPU型号
- cpuarch CPU架构类型
- domain 默认名称
- fqdn 正式域名
- fqdn_ip4 正式ipv4公网地址
- fqdn_ip6 正式ipv6公网地址
- gpus 图形处理器
- host 主机类型
- hwaddr_interfaces 硬件接口地址(物理mac地址)
- id IP地址
- init 初始化状态
- ip4_interfaces IPV4接口地址
- ip6_interfaces IPV6接口地址
- ip_interfaces
- ipv4 IPV4本地地址(127.0.0.1,192.168.X.X)
- ipv6 IPV6本地地址
- kernel 核心
- kernelrelease 核心版本
- locale_info 本地信息
- localhost 本地主机名称
- lsb_distrib_codename lsb版本名称
- lsb_distrib_id lsb的ID号
- lsb_distrib_release lsb版本
- machine_id 机器Id
- manufacturer 制造商
- master 主服务器
- mdadm 设备管理器
- mem_total 物理内存
- nodename 节点名称
- num_cpus CPU个数
- num_gpus GPU个数
- os 系统
- os_family 系统系列
- osarch 系统架构类型
- oscodename 系统代码名称
- osfinger 系统指向
- osfullname 系统全名
- osmajorrelease 系统主要版本
- osrelease 系统版本号
- osrelease_info 系统版本信息
- path 路径
- productname 产商名称
- ps 系统当前运行进程状态
- pythonexecutable Python可执行状态
- pythonpath Python安装路径
- pythonversion Python版本
- saltpath salt安装路径
- saltversion salt版本
- saltversioninfo salt版本信息
- selinux selinux状态
- serialnumber serial号
- server_id 服务号
- shell shell目录位置
- virtual 相关虚拟信息
- zmqversion zmq版本
--------------------------------------------------------------------------
salt '192.168.60.101' grains.items 可以列出可用于192.168.60.101的所有模块
salt '192.168.60.101' grains.item os 单独列出192.168.60.101的os系统信息
salt '*' grains.item ipv4 列出所有主机的有关于ipv4的模块信息
salt -G 'host:linux' grains.item ipv4 列出所有主机名为linux的主机的IPv4的地址
salt -G 'os:centos' test.ping 列出所有系统为centos系统的test.ping的连通性
[pillar]
pillar是柱子的意思,顾名思义就是一个非常重要的具有部署功能的组件,起到柱子的作用,它相较于grains有很强的灵活性,
grains是只能再minion服务启动的时候才能收集一次minion端的信息,而pillar则是动态的,数据可以随时更新。
(1)在使用pillar之前,需要先在master的配置文件里面打开它:
------------------------------
pillar_roots:
base:
- /srv/pillar
---------------------------
然后重新启动master的服务: service salt-master restart
最后就可以直接创建一个目录: mkdir /srv/pillar/
(2)需要在/srv/pillar目录下定义一个入口文件top.sls,内容如下:
(因为整个软件是以Python开发,所以严格使用python的缩进格式,即双空格的方式)
---------------------------------------------------------------------------
vim top.sls
base:
'192.168.60.101':
- date #为主机192.168.60.101定义了一个属性数据,引用了top.sls同目录下的date.sls
'192.168.60.102':
- webserver #为主机192.168.60.102定义了一个属性数据,引用了top.sls同目录下的webserver.sls
'*':
- <span style="color:#993399;"><strong>#为所有节点定义了一个属性数据,引用了/srv/pillar/目录下的init.sls
#这里指的是一个目录,salt会自动在top.sls文件中的应用目录中寻找状态文件
#所以会找到pillar目录中的init.sls文件
#测试的时候不要加任何注释</strong></span>
-----------------------------------------------------------
vim date.sls
date: some date
-----------------
vim webserver.sls
webserver: test_dir
-------------------------------
ll /srv/pillar
总用量 16
-rw-r--r--. 1 root root 16 7月 7 13:56 date.sls
-rw-r--r--. 1 root root 88 7月 7 15:51 top.sls
-rw-r--r--. 1 root root 20 7月 7 13:57 webserver.sls
-----------------------------------------------------------
(3)进行测试:首先同步属性数据到各个minion主机,然后单独采集单个主机信息:
[root@localhost pillar]# salt '*' pillar.items
192.168.60.101:
----------
date:
some date
192.168.60.102:
----------
webserver:
test_dir
[root@localhost pillar]# salt '192.168.60.101' pillar.item date
192.168.60.101:
----------
date:
some date
[root@localhost pillar]# salt '192.168.60.102' pillar.item webserver
192.168.60.102:
----------
webserver:
test_dir
-------------------------------------------这只是一个简单的小实验----------------------
(4)上面进行的只是一个针对单一环境的映射,那么如果在/srv/pillar的下面有个多个目录,该如何呢,
其实很简单,就在master的配置文件里面增加生效的映射目录就可以了,即:
-----------------
file_roots:
base:
- /srv/salt
-------------------可以添加目录-----------
file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev
prod:
- /srv/salt/prod
--------------------------
这样就可以实现了。
这样<strong><span style="color:#cc66cc;">top.sls在写入内容的时候就可以引用多个环境</span></strong>。例如:
-------------------------------
vim top.sls
base:
'192.168.60.101':
- date
dev:
'192.168.60.102':
- webserver
------------------------
<span style="color:#3333ff;"><strong>【注意】比如date或者webserver的这类文件因为是和top.sls文件是同级的,所以需要放在一个目录里面,如果要放在不同的目录
里面,也要让目录与top.sls同级!这个时候top.sls文件里面的映射则需要加上目录名,然后以“.”号分隔加上sls的文件名,
比如:nginx.sls位于gogo目录下面,就应该写成“- gogo.nginx”</strong></span>
(5)pillar示例:
更改top.sls
---------------------
vim top.sls
base:
'*':
- data
- packages
-----------------
mkdir /srv/pillar/data/ && touch /srv/pillar/data/init.sls
vim init.sls
role: DB_master
------------------------------------------------------------
[root@localhost pillar]# vim packages.sls
{% if grains['id'] == '192.168.60.102' %}
apache: httpd
git: git
{% elif grains['id'] == '192.168.60.101' %}
vim: install
gcc: install
{% endif %}
---------------------------------------------
salt '*' saltutil.refresh_pillar <span style="color:#3333ff;">//刷新定义未生效的数据</span>
[root@localhost pillar]# salt '*' pillar.items <span style="color:#3333ff;">//查看minion上面的所有pillar数据</span>
192.168.60.101:
----------
gcc:
install
role:
DB_master
vim:
install
192.168.60.102:
----------
apache:
httpd
git:
git
role:
DB_master
--------------------------------
[root@localhost pillar]# salt '*' pillar.raw
192.168.60.102:
----------
role:
DB_master
192.168.60.101:
----------
role:
DB_master
----------------------------
[分组group]
为了便于主机的集中化管理,便需要分组来实现:
一:将分组的信息写入master的配置文件/etc/salt
二:将分组的信息写入一个单独的配置文件中,然后主配置文件来include包含这个分组的配置文件
那么第二种方式的做法:
1.进入master的配置文件找到
default_include: master.d/*.conf 去掉前面的注释
此句意思相当于只要是放到master.d的文件目录中的配置文件都生效,都可以被主配置文件master所承认。
2.master.d的文件默认情况下是没有的,需要手动建立:mkdir /etc/salt/master.d/
顺便建立group.conf的分组配置文件: touch /etc/salt/master.d/group.conf
--------------------------------
vim /etc/salt/master.d/group.conf
nodegroups:
group1: 'L@192.168.60.101'
group2: 'L@192.168.60.102'
--------------------------------------
#L@ 表示minion列表,列表成员为每个minion的id,而这个ID在minion的配置文件中声明
#G@ 表示匹配的是grains的属性 例如:group2: 'G@os:RedHat'
最后重启master的服务:service salt-master restart 或者 /etc/init.d/salt-master restart
3.用test.ping测试组
[root@localhost master.d]# salt -N group1 test.ping
192.168.60.101:
True
[root@localhost master.d]# salt -N group2 test.ping
192.168.60.102:
True
4.同样的,因为上面在做分组之前有同步date和webserver的属性,这里也可以通过组的方式来进行收集:
[root@localhost salt]# salt -N group1 pillar.item date
192.168.60.101:
-----------
date:
some date
[root@localhost salt]# salt -N group2 pillar.item webserver
192.168.60.102:
-----------
webserver:
test_dir
-----------------------------------------------------------------
[Saltstack]-{grains,pillar}[二]
最新推荐文章于 2020-05-17 17:26:32 发布