SaltStack-数据系统组件<三>

1.Saltstack数据系统

俩大数据系统,分别是:Grains,Pillar
Grains官方文档:https://docs.saltproject.io/en/latest/topics/grains/
Pillar官方文档:https://docs.saltproject.io/en/latest/topics/pillar/

2.Saltstack数据系统组件
2.1Grains

Grains是saltstack的一个组件,收集minion端启动时收集的信息(操作系统版本、域名、IP地址、内存、内核、CPU、操作系统类型等)记录着minion的一些常用属性,可以通过grains.items查看minion的信息。

2.2Grains功能

Grains收集常用信息

列出可用的grains命令:grains.ls
使用grains.items模块列出谷物数据:grains.items
查看单个选项值:grains.get

列出所有可用grains的key

[root@salt-master ~]# salt 'salt-minion2' grains.ls
salt-minion2:
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - cwd
    - disks       #磁盘设备
    - dns         #网络服务器网关
    - domain
    - efi
    - efi-secure-boot
    - fqdn
    - fqdn_ip4    #ipv4地址
    - fqdn_ip6    #ipv6地址
    - fqdns
    - gid
    - gpus
    - groupname
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_gw
    - ip4_interfaces
    - ip6_gw
    - ip6_interfaces
    - ip_gw
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel          #系统内核
    - kernelparams
    - kernelrelease
    - kernelversion
    - locale_info
    - localhost
    - lsb_distrib_codename
    - lsb_distrib_id
    - machine_id
    - manufacturer
    - master
    - mdadm
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os            #查看系统版本
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - osrelease_info
    - path
    - pid
    - productname
    - ps
    - pythonexecutable
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - selinux
    - serialnumber
    - server_id
    - shell
    - ssds
    - swap_total
    - systemd
    - systempath
    - transactional
    - uid
    - username
    - uuid
    - virtual
    - zfs_feature_flags
    - zfs_support
    - zmqversion

获取所有可用信息

[root@salt-master ~]# salt 'salt-minion' grains.items
salt-minion:                  
    ----------
    biosreleasedate:
        07/22/2020
    biosversion:           #基本输入输出版本
        6.00
    cpu_flags:            #cpu的参数
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
		....
	cpu_model:           #cpu系统单元
        Intel(R) Core(TM) i5-10200H CPU @ 2.40GHz
    cpuarch:
        x86_64
    cwd:
        /
    disks:            #磁盘设备
        - sr0
        - sda
    dns:
        ----------
        domain:
        ip4_nameservers:      #ipv4网关
            - 192.168.136.2
	...
	fqdn:               #主机限定域名
        salt-minion
    fqdn_ip4:        #主机ipv4地址
        - 192.168.136.233
    fqdn_ip6:      #主机ipv6地址
        - fe80::314b:11d8:7c1b:d9bb
    fqdns:   
        - salt-minion
	id:
        salt-minion    #minion配置里面的id

        ens33:
            - 192.168.136.233
            - fe80::314b:11d8:7c1b:d9bb
        lo:
            - 127.0.0.1
            - ::1
    ipv4:
        - 127.0.0.1
        - 192.168.136.233
    ipv6:
        - ::1
        - fe80::314b:11d8:7c1b:d9bb
    kernel:
        Linux
......

获取某个值

#ipv4地址
[root@salt-master ~]# salt '*' grains.get fqdn_ip4
salt-minion2:
    - 192.168.136.135
salt-minion:
    - 192.168.136.233
salt-master:
    - 192.168.136.219

#系统版本
[root@salt-master ~]# salt '*' grains.get os
salt-minion:
    CentOS Stream
salt-minion2:
    CentOS
salt-master:
    CentOS Stream

#磁盘设备名称
[root@salt-master ~]# salt '*' grains.get disks
salt-minion:
    - sr0
    - sda
salt-minion2:
    - sda
    - sr0
salt-master:
    - sr0
    - sda

#所有网卡地址
[root@salt-master ~]# salt 'salt-minion' grains.get ip4_interfaces
salt-minion:
    ----------
    ens33:
        - 192.168.136.233
    lo:
        - 127.0.0.1
        
 #如果存在多个key键输入冒号:即可       
[root@salt-master ~]# salt 'salt-minion' grains.get ip4_interfaces:ens33
salt-minion:
    - 192.168.136.233
[root@salt-master ~]# salt 'salt-minion' grains.get ip4_interfaces:lo
salt-minion:
    - 127.0.0.1

2.3Grains应用场景
  • 信息查询(见上面)
  • 命令行进行目标匹配(见上面)
  • top file进行目标匹配

(根据指定系统运行相应任务)实例

[root@salt-master ~]# cat /srv/salt/base/top.sls 
base:
  'os:CentOS':              #匹配系统为centos的主机
    - match: grain          #匹配的方式:grain
    - database.mariadb.install   #任务文件

#运行
[root@salt-master ~]# salt -G 'os:CentOS' state.highstate
salt-minion2:
----------
          ID: mysql-install
    Function: pkg.installed
        Name: mariadb-server
      Result: True
     Comment: All specified packages are already installed
     Started: 13:30:05.407292
    Duration: 531.725 ms
     Changes:   
----------
          ID: mysql-service
    Function: service.running
        Name: mariadb
      Result: True
     Comment: The service mariadb is already running
     Started: 13:30:05.940596
    Duration: 30.219 ms
     Changes:   

Summary for salt-minion2
------------
Succeeded: 2
Failed:    0
------------
Total states run:     2
Total run time: 561.944 ms

#模块例子(在开发环境中,对于版本为Centos的运行servers文件)
dev:
  'os:Centos':
    - match: grain
    - servers
  • 自定义grains匹配

第一种定义方法:在minion文件中搜索grains定义grains-key(由于要到每个minion文件中进行配置,因此不常使用)

[root@salt-minion ~]# vim /etc/salt/minion
grains:
  web:
    - nginx
[root@salt-minion ~]# systemctl restart salt-minion.service 
[root@salt-master ~]# salt 'salt-minion' grains.items
........
    virtual:
        VMware
    web:
        - nginx
[root@salt-master ~]# salt 'salt-minion' grains.get web
salt-minion:
    - nginx

第二种定义方法:在/etc/salt下生成一个grains文件在此文件中定义grains-key(推荐使用)

#重启方式
[root@salt-minion ~]# cat /etc/salt/grains
test_grains: nginx
clq: caicai
[root@salt-minion ~]# systemctl restart salt-minion.service 
[root@salt-master ~]# salt 'salt-minion' grains.get test_grains
salt-minion:
    nginx
[root@salt-master ~]# salt 'salt-master' grains.get clq
salt-minion:
    caicai

#不重启方式(推荐使用)
[root@salt-master ~]# vim /etc/salt/grains
test_grains:
  - nginx
  - httpd
  - tomcat
clq: caicai
[root@salt-master ~]#  salt 'salt-minion' saltutil.sync_grains
salt-minion:
[root@salt-master ~]#  salt 'salt-minion' grains.get test_grains
salt-minion:
    - nginx
    - httpd
    - tomcat

2.4Pillar

pillar主要记录一些加密信息,可以确保这些数据不被其它minion看到,如软件版本号,用户和密码等,定义是YAML格式

pillar配置参数进行使用(Master文件中配置):
Base环境下的pillar的工作目录在/srv/pillar下,需要定义多个不同环境的pillar目录,只需要在配置文件对应的pillar_roots添加修改即可,注意pillar_roots格式一定要与file_roots一样否则会报错

[root@salt-master ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar/base
2.5Pillar特点
  • 指定minion定义需要的数据
  • 指定的minion才能看到定义的数据
  • master配置文件内设置
2.6Pillar定义数据和查看以及使用

默认情况下pillar是没有任何数据的

[root@salt-master ~]# salt '*' pillar.items
salt-minion:
    ----------
salt-minion2:
    ----------
salt-master:
    ----------

想要查看系统自带的数据,需要在master配置内把pillar_opts参数打开(一般我们不用)

[root@salt-master ~]# vim /etc/salt/master
pillar_opts: true
[root@salt-master ~]# systemctl restart salt-master
[root@salt-master ~]# salt 'salt-master' pillar.items 
salt-master:
    ----------
    master:
        ----------
        __cli:
            salt-master
        __role:
            master
        allow_minion_key_revoke:
            True
        archive_jobs:
            False
        auth_events:
            True
        auth_mode:
            1
        auto_accept:
            False
        azurefs_update_interval:
            60
        cache:
            localfs
        cache_sreqs:
            True
        cachedir:
            /var/cache/salt/master
        clean_dynamic_modules:
            True
        cli_summary:
            False
        client_acl_verify:
            True
        cluster_mode:
            False
        con_cache:
            False
        conf_file:
            /etc/salt/master
        config_dir:
            /etc/salt
        cython_enable:
            False
        daemon:
            False
        decrypt_pillar:
        decrypt_pillar_default:
            gpg
        decrypt_pillar_delimiter:
            :
        decrypt_pillar_renderers:
            - gpg
        default_include:
            master.d/*.conf
	......

想要自定义数据请看如下:

#第一步,配置pillar,有多个环境指明环境和路径即可
[root@salt-master ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar/base
  prod:
    - /srv/pillar/prod
[root@salt-master ~]# mkdir -p /srv/pillar/{base,prod}
[root@salt-master ~]# tree /srv/pillar/
/srv/pillar/
├── base
└── prod
#第二步:重启服务
[root@salt-master ~]# systemctl restart salt-master.service 

#第三步:在pillar对应的base环境中编写变量的状态文件
[root@salt-master ~]# vim /srv/pillar/base/apache.sls
{% if grains['os'] == 'CentOS' %}      #判断系统为centos的话apache的值为httpd
apache: httpd
{% elif grains['os'] == 'Debian'  %}   #判断系统为Debian的话apache的值为httpd2
apache: httpd2
{% endif %}             #退出格式
#CentOS区分大小写
#以上的变量是必须是centos系统才能使用,也可以直接写变量如:
#web:
#  - nginx
#  - httpd
#  - tomcat


#第四步:在pillar对应的base环境中编写top file文件(作用:指明变量在哪台主机上拥有)
[root@salt-master ~]# vim /srv/pillar/base/top.sls
base:     #base环境
  'salt-minion2':      #指定目标主机
    - apache    #apache.sls的变量
#第五步查看pillar
[root@salt-master ~]# salt '*' pillar.items
salt-minion:
    ----------
salt-minion2:
    ----------
    apache:
        httpd
salt-master:
    ----------

使用自定义数据内的变量,作用于任务状态文件内

[root@salt-master ~]# vim /srv/salt/base/web/apache/install.sls 
apache-install:
  pkg.installed:
    - name: {
    
    {
    
     pillar['apache'] }}


apache-service:
  service.running:
    - name: {
    
    {
    
     pillar['apache'] }}
    - enable: true

#执行高级状态运行模式
[root@salt-master ~]# salt 'salt-minion2' state.highstate
salt-minion2:
----------
          ID: mysql-install
    Function: pkg.installed
        Name: mariadb-server
      Result: True
     Comment: All specified packages are already installed
     Started: 21:48:07.840339
    Duration: 873.528 ms
     Changes:   
----------
          ID: mysql-service
    Function: service.running
        Name: mariadb
      Result: True
     Comment: The service mariadb is already running
     Started: 21:48:08.717977
    Duration: 24.445 ms
     Changes:   

Summary for salt-minion2
------------
Succeeded: 2
Failed:    0
------------
Total states run:     2
Total run time: 897.973 ms            
2.5Grains和Pillar区别
名称 位置配置 收集方式 应用场景
Grains minion文件 minion启动时 静态的类型 信息查询 命令匹配 top file匹配 模板匹配
Pillar master文件 实时生效,系统或者自定义,动态 目标匹配 特殊数据匹配

猜你喜欢

转载自blog.csdn.net/qq_47945825/article/details/121588439