SaltStack学习笔记三


SaltStack数据系统

Grains | Pillar

Grains

SaltStack数据系统中的一个组件,存放着Minion启动时收集的本地系统相关 信息。如操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号等。 存储于Minion端,只有在Minion启动时才会收集,等下次启动时才会改变, 在运行过程中不会发生变化,Grains是静态数据。

作用:

  • 1.收集系统信息,用于资产管理,信息查询

[root@linux-node1 ~]# salt 'linux-node1*' grains.items  #显示node1中grains模块中itmes项中所有信息
linux-node1.example.com:
    ----------
   。。。。略过一些
    cpu_model:						#CPU类型
        Intel(R) Core(TM) i7-4710MQ CPU @ 2.50GHz
    cpuarch:
        x86_64
    disks:						#磁盘
        - sda
        - sr0
        - dm-0
        - dm-1
    dns:						#DNS
        ----------
        domain:
        ip4_nameservers:
            - 192.168.56.2
        ip6_nameservers:
        nameservers:
            - 192.168.56.2
        search:
            - example.com
    domain:						#域
        example.com
    edu:
        chegva.com
    fqdn:							
        linux-node1.example.com
    fqdn_ip4:						#fqdn名解析到的IPV4地址
        - 192.168.56.11
    fqdn_ip6:
        - fe80::20c:29ff:fe90:b725
    gid:
        0
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              unknown
    groupname:
        root
    host:
        linux-node1
    hwaddr_interfaces:					#mac地址
        ----------
        eth0:
            00:0c:29:90:b7:25
        lo:
            00:00:00:00:00:00
    iaas:
        openstack
    id:
        linux-node1.example.com
    init:
        systemd
    ip4_interfaces:
        ----------
        eth0:
            - 192.168.56.11
        lo:
            - 127.0.0.1
    ip6_interfaces:
        ----------
        eth0:
            - fe80::20c:29ff:fe90:b725
        lo:
            - ::1
    ip_interfaces:
        ----------
        eth0:
            - 192.168.56.11
            - fe80::20c:29ff:fe90:b725
        lo:
            - 127.0.0.1
            - ::1
    ipv4:
        - 127.0.0.1
        - 192.168.56.11
    ipv6:
        - ::1
        - fe80::20c:29ff:fe90:b725
    kernel:
        Linux
    kernelrelease:
        3.10.0-327.18.2.el7.x86_64
    locale_info:
        ----------
        defaultencoding:
            UTF-8
        defaultlanguage:
            en_US
        detectedencoding:
            UTF-8
    localhost:
        linux-node1.example.com
    lsb_distrib_codename:
        CentOS Linux 7 (Core)
    lsb_distrib_id:
        CentOS Linux
    machine_id:
        1a205c751ef3413eb59a110804a63850
    manufacturer:
        VMware, Inc.
    master:
        192.168.56.11
    mdadm:
    mem_total:
        1824
    nodename:
        linux-node1.example.com
    num_cpus:
        1
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        CentOS Linux 7 (Core)
    osfinger:
        CentOS Linux-7
    osfullname:
        CentOS Linux
    osmajorrelease:
        7
    osrelease:
        7.2.1511
    osrelease_info:
        - 7
        - 2
        - 1511
    path:
        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin
    pid:
        3490
    productname:
        VMware Virtual Platform
    ps:
        ps -efH
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /usr/lib64/python27.zip
        - /usr/lib64/python2.7
        - /usr/lib64/python2.7/plat-linux2
        - /usr/lib64/python2.7/lib-tk
        - /usr/lib64/python2.7/lib-old
        - /usr/lib64/python2.7/lib-dynload
        - /usr/lib64/python2.7/site-packages
        - /usr/lib64/python2.7/site-packages/gtk-2.0
        - /usr/lib/python2.7/site-packages
    pythonversion:
        - 2
        - 7
        - 5
        - final
        - 0
    saltpath:
        /usr/lib/python2.7/site-packages/salt
    saltversion:
        2016.3.1
    saltversioninfo:
        - 2016
        - 3
        - 1
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
        VMware-56 4d e0 05 13 79 20 f2-73 ae 84 2a 43 90 b7 25
    server_id:
        1981947194
    shell:
        /bin/sh
    systemd:
        ----------
        features:
            +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
        version:
            219
    uid:
        0
    username:
        root
    uuid:
        05e04d56-7913-f220-73ae-842a4390b725
    virtual:
        VMWare
    zmqversion:
        4.0.5
[root@linux-node1 ~]# salt '*' grains.item fqdn_ip4		#显示所有minion中item项中单个信息的值
linux-node2.example.com:
    ----------
    fqdn_ip4:
        - 192.168.56.12
        - 127.0.0.1
linux-node3.example.com:
    ----------
    fqdn_ip4:
        - 192.168.56.13
linux-node1.example.com:
    ----------
    fqdn_ip4:
        - 192.168.56.11
  • 2.远程执行中匹配minion,用于目标选择

[root@linux-node1 ~]# salt -G 'os:CentOS' test.ping    #在所有centos系统机器上执行指定命令,命令加个大G即可
linux-node3.example.com:
    True
linux-node2.example.com:
    True
linux-node1.example.com:
    True
  • 3.配置管理中使用

1.Minion配置文件中定义
[root@linux-node2 ~]# vi /etc/salt/minion    #编辑保存完要记得重启
118 grains:
119   roles: apache    
#这样在跑apache的Minion中定义一个apache角色,这样不用再关心哪台机器中运行apache服务,用master一个命令就可以操作所以定义apache角色的机器
[root@linux-node1 /srv/salt/prod]# salt '*' grains.item roles			#匹配定义的roles的值
linux-node2.example.com:
    ----------
    roles:
        apache
linux-node3.example.com:
    ----------
    roles:
linux-node1.example.com:
    ----------
    roles:
[root@linux-node1 ~]# salt -G 'roles:apache' cmd.run 'systemctl restart httpd'		#重启匹配到的apache服务
linux-node2.example.com:

2.编辑grains文件
生产中为了方便管理,建议在/etc/salt/grains中定义角色,而不是在配置文件中定义
[root@linux-node1 ~]# vi /etc/salt/grains		#minion会自动来此目录找定义的grains文件
[root@linux-node1 ~]# cat /etc/salt/grains      #定义一个cloud角色,值为openstack
cloud: openstack
[root@linux-node1 ~]# salt '*' saltutil.sync_grains	#使用刷新命令,可以不用重启
linux-node1.example.com:
linux-node3.example.com:
linux-node2.example.com:
[root@linux-node1 ~]# salt '*' grains.item cloud		#刷新后查看结果
linux-node2.example.com:
    ----------
    cloud:
linux-node3.example.com:
    ----------
    cloud:
linux-node1.example.com:
    ----------
    cloud:
        openstack

=========Top File中使用grains:===========
vi /etc/salt/top.sls
base:
  'linux-node1.example.com':
    - web.apache
  'roles:apache':		#grains中key是roles,值是apache,执行apache状态
    - match: grain		#注意grain没s
    - web.apache
#注意:角色中的key必须唯一,不然会冲突

=============开发一个Grains:==================
思路:使用Python写一个Python脚本,返回一个字典即可
[root@linux-node1 ~]# cd /srv/salt/
[root@linux-node1 /srv/salt]# mkdir _grains
[root@linux-node1 /srv/salt]# cd _grains/
[root@linux-node1 /srv/salt/_grains]# pwd
/srv/salt/_grains				#自定义脚本必须放在此规定目录,否则salt不能识别
[root@linux-node1 /srv/salt/_grains]# cat my_grains.py 
#!/usr/bin/env python
#-*- coding: utf-8 -*-

def my_grains():
    #初始化一个grains字典
    grains = {}
    #设置字典中的key-vlaue
    grains['iaas'] = 'openstack'
    grains['website'] = 'chegva.com'
    #返回这个字典
    return grains

[root@linux-node1 /srv/salt/_grains]# salt '*' saltutil.sync_grains		#刷新Grains,让minion同步脚本
linux-node2.example.com:
    - grains.my_grains
linux-node1.example.com:
    - grains.my_grains
linux-node3.example.com:
    - grains.my_grains
[root@linux-node1 /srv/salt/base]# salt '*' grains.item website		#查看角色
linux-node1.example.com:
    ----------
    website:
        chegva.com
linux-node2.example.com:
    ----------
    website:
        chegva.com
linux-node3.example.com:
    ----------
    website:
        chegva.com
[root@linux-node2 ~]# cd /var/cache/salt/			#minion中保存master推送过来的脚本目录树
[root@linux-node2 salt]# tree
.
└── minion
    ├── accumulator
    ├── extmods
    │   └── modules
    │       ├── my_disk.py
    │       └── my_disk.pyc
    ├── files
    │   └── base
      │       ├── _modules
    │       │   └── my_disk.py
    │       ├── top.sls
    │       └── web
    │           └── apache.sls
    ├── highstate.cache.p
    ├── module_refresh
    ├── pkg_refresh
    ├── proc
    └── sls.p
[root@linux-node2 _grains]# pwd		#minion中存放_grains脚本目录
/var/cache/salt/minion/files/base/_grains
[root@linux-node2 _grains]# ll
total 4
-rw------- 1 root root 257 Jul 19 16:56 my_grains.py

Grains优先级:

1.系统自带
2.grains文件定义的
3.minion配置文件定义的
4.自己写的

Pillar

给特定的Minion指定特定的数据(跟top file功能类似),只有指定的Minion自己能看到指定的数据,安全性好, Pillar在Master设置,相对于Grains在Minion中设置较灵活,Pillar是动态的。

作用:

  • 1.处理敏感数据,如定义用户名密码

  • 2.目标选择,处理变量差异性

定义pillar数据:

  • 1.配置pillar_roots,创建目录

  • 2.编辑pillar的sls,定义模板配置

  • 3.编辑Pillar的top file,使用上一步配置的模板来指定给对应的minion

[root@linux-node1 /srv/salt]# vim  /etc/salt/master		#配置pillar_roots
625 pillar_roots:
626   base:
627     - /srv/pillar/base
628   prod:
629     - /srv/pillar/prod

[root@linux-node1 ~]# cd /srv/pillar/base
[root@linux-node1 /srv/pillar/base]# tree
.
├── top.sls
└── zabbix
    └── agent.sls

1 directory, 2 files
[root@linux-node1 /srv/pillar/base]# cat zabbix/agent.sls 		#编辑sls,定义模板配置
Zabbix_Server: 192.168.56.11
[root@linux-node1 /srv/pillar/base]# cat top.sls 	  		#编辑Pillar的top file,使用上一步配置的模板来指定给对应的minion
base:
  '*':
    - zabbix.agent

[root@linux-node1 /srv/pillar/base]# salt '*' saltutil.refresh_pillar	#刷新命令通知minion:salt '*' saltutil.refresh_pillar
linux-node2.example.com:
    True
linux-node1.example.com:
    True
linux-node3.example.com:
    True
[root@linux-node1 /srv/pillar/base]# salt '*' pillar.items		#执行items
linux-node2.example.com:
    ----------
    Zabbix_Server:
        192.168.56.11
linux-node3.example.com:
    ----------
    Zabbix_Server:
        192.168.56.11
linux-node1.example.com:
    ----------
    Zabbix_Server:
        192.168.56.11
  • Grains和Pillar区别

名称
存储位置
数据类型
数据采集更新方式应用
GrainsMinion端
静态数据Minion启动时收集,也可以使用saltutil.sync_grains进行刷新

数据查询

目标选择  

配置管理

PillarMaster端
动态数据
在Master中定义,指定给对应的Minion,也可以使用saltutil.refresh_pillar进行刷新

目标选择  

配置管理 

敏感数据

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/761.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注