企业—saltstack数据系统Grains和Pillar

本文详细介绍了SaltStack中的Grains和Pillar系统。Grains负责收集Minion的静态信息,如操作系统、CPU等,用于条件匹配和资产管理。Pillar则是用于给特定Minion提供安全的动态数据,适用于存储敏感信息和处理变量差异。文章通过实例展示了如何自定义Grains模块、使用Pillar定义和应用数据,以及两者在存储位置、数据类型、更新方式和应用上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.grains简介

  • grains是Saltstack最重要的组件之一,grains的作用是收集被控主机的基本信息,这些信息通常都是一些静态的数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这新信息对不同业务进行个性化配置。

  • Grains是SaltStack当中的一个数据系统,当Minion启动时Grains会把Minion的数据收集起来,比如操作系统版本、CPU 位数等。由于采用的是静态收集,只有当Minion发生重启时数据才会发生变化,在Grains的实际运用中常用于对多台Minion做操作时进行一些条件匹配,比如有上百台Minion服务器,只需要对操作系统为CentOS的做一些操作等

二.grains模块的应用

1.罗列出所有Minion的所有信息,命令执行后可以看到出现了很多信息,我们可以用这些信息来作为一些过滤条件

[root@server1 salt]# salt '*' grains.items

在这里插入图片描述
通过grains来做信息过滤,使用-G选项:

[root@server1 salt]# salt -G 'cpuarch:x86_64' cmd.run 'uptime'      在所有64位CPU服务器上执行uptime 

执行后反馈效果图:
在这里插入图片描述
在这里插入图片描述
2.当grains.items里的模块不满足当前情况,还可以自定义Grains,比如在server2(minion)添加一个apache模块

[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# vim minion
120 grains:
121   roles:
122     - apache      是以键值对的形式存在的,可以获取该模块对应的变量的值
[root@server2 salt]# systemctl restart salt-minion

//server3:
[root@server3 ~]# cd /etc/salt/
[root@server3 salt]# vim minion
120 grains:
121   roles:
122     - apache      是以键值对的形式存在的,可以获取该模块对应的变量的值
[root@server2 salt]# systemctl restart salt-minion

在server1上进行相应的测试,可以看到了server2上已经有该模块的变量了server3上也有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:这个时候在Master端执行salt -G ‘roles:apache’ test.ping会发现刚才编辑过Minion配置文件的服务器也能被匹配出来,而其他没有做相应操作的服务器则不会显示,生产环境中我们可以对装有http的服务器批量进行重启等

salt -G 'roles:apache'  cmd.run  'systemctl restart httpd'

3.如果不想在minion上的/etc/salt/minion添加模块,那么也可以在master上创建/etc/salt/_grains目录并且编辑文件添加模块

[root@server1 salt]# mkdir /etc/salt/_grains
[root@server1 salt]# cd /etc/salt/_grains/
[root@server1 _grains]# ls
[root@server1 _grains]# vim my_grains.py
#!/usr/bin/env  python
def my_grains():
    grains = {'foo': 'bar', 'hello': 'world'}    模块定义的两种方式
    grains['salt'] = 'stack'
    return grains

[root@server1 _grains]# salt '*' saltutil.sync_grains
因为grains是静态收集信息,这个时候不重启minion的话Grains是不会生效的,所以这个时候使用-G是看不到信息的,可以在Master执行一个模块刷新

master上模块刷新效果如下:
在这里插入图片描述
测试可以查看到添加的信息了:
在这里插入图片描述
检查添加了模块的服务器是否添加进来:
在这里插入图片描述
4.测试:在/srv/salt里面有top.sls文件在里面可以使用grains匹配的模块对已经添加的minion服务器进行相应的服务推送

[root@server1 salt]# ls
apache  _grains  nginx  top.sls
[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# vim top.sls 
base:
  'roles:apache':    在server2的minon的配置文件种添加的自定义的模块
    - match: grain   匹配grain
    - apache.service
  'roles:nginx':     在server3的minon的配置文件种添加的自定义的模块
    - match: grain   
    - nginx.service

在这里插入图片描述
可以看到使用自定义的grains模块推送成功

三.Pillar简介

  • Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。

  • 给minion指定它想要的数据,给哪个minion指定,哪个minion能看到,,其他minion看不到,安全性得到了保障,在master端设置的

pillar应用场景:

1、敏感数据
比如给某一个配置文件设置个密码,这个密码只希望某个minion能看到
2、使用pillar处理变量的差异性
3、做配置管理时用pillar定义一些变量参数
4、定位主机

四.pillar的应用

1.在master的配置文件中打开pillar模块

[root@server1 salt]# vim /etc/salt/master
 843 pillar_roots:
 844   base:
 845     - /srv/pillar    打开定义的pillar的路径
[root@server1 salt]# systemctl restart salt-master
[root@server1 salt]# mkdir /srv/pillar
[root@server1 salt]# systemctl restart salt-master

2.定义pillar的路径下做简单的测试

[root@server1 salt]# cd /srv/pillar
[root@server1 pillar]# vim vars.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
state: master
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
state: backup
{% endif %}

[root@server1 pillar]# vim top.sls 
base:
  '*':
    - vars  

base里面的路径的另一种方式:
[root@server1 pillar]# pwd
/srv/pillar
[root@server1 pillar]# mkdir web
[root@server1 pillar]# mv vars.sls web/
[root@server1 pillar]# ls
top.sls  web
base:
  '*':
    - web.vars

查看如下:
在这里插入图片描述
检查定义的上述模块的minion服务器能否ping通:
在这里插入图片描述

五.grains和Pillar的区别

1.存储位置

  • grains:minion端
  • pillar:master端

2.数据类型

  • grains:静态数据
  • pillar:动态数据

3.数据采集更新方式

  • grains:minion启动时收集,也可以使用saltutil.sync_grains进行刷新

  • pillar:在master端定义,指定给对应minion,
    可以使用saltutil.sync_pillar刷新。

4.应用

  • grains:存储minion基本数据。比如用于匹配minion,自身数据可以用来做资产管理等。
  • pillar:存储master指定的数据,只有指定的minion可以看到,用于敏感。
内容概要:本文深入探讨了Kotlin语言在函数式编程跨平台开发方面的特性优势,结合详细的代码案例,展示了Kotlin的核心技巧应用场景。文章首先介绍了高阶函数Lambda表达式的使用,解释了它们如何简化集合操作回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程跨平台开发领域不断完善发展。; 适合人群:对函数式编程跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解实践Kotlin的函数式编程特性跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真实验验证了稳定性综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化自适应控制等性能提升策略,更全面地反映了群体智能协作性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解分析系统性能。通过阅读实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值