SaltStack数据系统简介
SaltStack有两大数据系统,分别是:
- Grains
- Pillar
SaltStack数据系统组件
SaltStack组件之Grains
Grains是SaltStack的一个组件,其存放着minion启动时收集到的信息。
Grains是SaltStack组件中非常重要的组件之一,因为我们在做配置部署的过程中会经常使用它,Grains是SaltStack记录minion的一些静态信息的组件。可简单理解为Grains记录着每台minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。我们可以通过grains.items查看某台minion的所有Grains信息。
Grains的功能:
- 收集资产信息
Grains应用场景:
- 信息查询
- 在命令行下进行目标匹配
- 在top file中进行目标匹配
- 在模板中进行目标匹配
模板中进行目标匹配请看:https://docs.saltstack.com/en/latest/topics/pillar/
信息查询实例:
- 查询某个key的值,比如想获取ip地址
[root@master base]# salt '*' grains.get fqdn_ip4
minion:
- 192.168.149.140
master:
- 192.168.149.152
[root@master base]# salt '*' grains.get ip4_interfaces
master:
----------
ens160:
- 192.168.149.152
lo:
- 127.0.0.1
minion:
----------
ens160:
- 192.168.149.140
lo:
- 127.0.0.1
[root@master base]# salt '*' grains.get ip4_interfaces:ens160 也可以根据网卡名进行查找
master:
- 192.168.149.152
minion:
- 192.168.149.140
目标匹配实例:
通过系统匹配来执行命令
[root@master base]# salt -G 'os:CentOS Stream' test.ping
minion:
True
master:
True
- 在top file里面使用Grains:
[root@master base]# vim /srv/salt/base/top.sls
base:
'os:CentOS Stream':
- match: grain
- web.nginx.install
关闭该系统的nginx
[root@minion ~]# systemctl stop nginx.service
在master执行命令
[root@master base]# salt 'minion' state.highstate
minion:
----------
ID: nginx-install
Function: pkg.installed
Name: nginx
Result: True
Comment: All specified packages are already installed
Started: 05:55:48.267182
Duration: 722.351 ms
Changes:
----------
ID: nginx-service
Function: service.running
Name: nginx
Result: True
Comment: Service nginx is already enabled, and is running
Started: 05:55:48.992417
Duration: 228.382 ms
Changes:
----------
nginx:
True
Summary for minion
------------
Succeeded: 2 (changed=1)
Failed: 0
------------
Total states run: 2
Total run time: 950.733 ms
查看minion上是否成功
[root@minion ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-07-05 05:55:49 EDT; 36s ago
Process: 122991 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 122987 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 122985 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 122995 (nginx)
Tasks: 2 (limit: 11200)
Memory: 4.1M
CGroup: /system.slice/nginx.service
├─122995 nginx: master process /usr/sbin/nginx
└─122999 nginx: worker process
7月 05 05:55:49 minion systemd[1]: Starting The nginx HTTP and reverse proxy server...
7月 05 05:55:49 minion nginx[122987]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
7月 05 05:55:49 minion nginx[122987]: nginx: configuration file /etc/nginx/nginx.conf test is successful
7月 05 05:55:49 minion systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
7月 05 05:55:49 minion systemd[1]: Started The nginx HTTP and reverse proxy server.
自定义Grains的两种方法:
- minion配置文件,在配置文件中搜索grains
- 在/etc/salt下生成一个grains文件,在此文件中定义(推荐方式)
[root@minion1 ~]# vim /etc/salt/grains
test-grains: linux-node1
[root@minion1 ~]# systemctl restart salt-minion
[root@master ~]# salt '*' grains.get test-grains
master:
minion1:
linux-node1
- 不重启的情况下自定义grains
[root@minion1 ~]# vim /etc/salt/grains
test-grains: linux-node1
jj: test
[root@master ~]# salt '*' saltutil.sync_grains
master:
minion1:
[root@master ~]# salt '*' grains.get jj
master:
minion1:
test
SaltStack组件之Pillar
Pillar也是SaltStack组件中非常重要的组件之一,是数据管理中心,经常配置states在大规模的配置管理工作中使用它。Pillar在SaltStack中主要的作用就是存储和定义配置管理中需要的一些数据,比如软件版本号、用户名密码等信息,它的定义存储格式与Grains类似,都是YAML格式。
在Master配置文件中有一段Pillar settings选项专门定义Pillar相关的一些参数:
#要用的话取消注释
pillar_roots:
base:
- /srv/pillar
默认Base环境下Pillar的工作目录在/srv/pillar目录下。若你想定义多个环境不同的Pillar工作目录,只需要修改此处配置文件即可。
Pillar的特点:
- 可以给指定的minion定义它需要的数据
- 只有指定的人才能看到定义的数据
- 在master配置文件里设置
[root@master ~]# salt '*' pillar.items
master:
----------
minion1:
----------
默认pillar是没有任何信息的,如果想查看信息,需要在 master 配置文件上把 pillar_opts的注释取消,并将其值设为 True。
[root@master ~]# vim /etc/salt/master
......
# master config file that can then be used on minions.
pillar_opts: False 这里改为True
......
重启master
[root@master ~]# systemctl restart salt-master.service
- pillar自定义数据:
在master的配置文件里找pillar_roots可以看到其存放pillar的位置
[root@master ~]# vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar/base
[root@master ~]# mkdir -p /srv/pillar/base
[root@master ~]# systemctl restart salt-master
[root@master ~]# vim /srv/pillar/base/apache.sls
{% if grains['os'] == 'CentOS Stream' %}
apache: httpd
{% elif grains['os'] == 'RedHat' %}
apache: httpd
{% endif %}
定义top file入口文件
[root@master ~]# vim /srv/pillar/base/top.sls
base:
'*':
- apache
[root@master ~]# vim /srv/salt/base/top.sls
base:
'*':
- web.apache.install
在salt下修改apache的状态文件,引用pillar的数据
[root@master ~]# mkdir /srv/salt/base/web/apache/
[root@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@master ~]# salt '*' state.highstate
- 查看状态
[root@master ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-07-05 07:18:25 EDT; 3min 41s ago
Docs: man:httpd.service(8)
Main PID: 224777 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 11200)
Memory: 38.4M
CGroup: /system.slice/httpd.service
├─224777 /usr/sbin/httpd -DFOREGROUND
├─226087 /usr/sbin/httpd -DFOREGROUND
├─226088 /usr/sbin/httpd -DFOREGROUND
├─226089 /usr/sbin/httpd -DFOREGROUND
└─226090 /usr/sbin/httpd -DFOREGROUND
7月 05 07:18:04 master systemd[1]: Starting The Apache HTTP Server...
7月 05 07:18:25 master httpd[224777]: AH00558: httpd: Could not reliably determine the server's fully qualified do>
7月 05 07:18:25 master systemd[1]: Started The Apache HTTP Server.
7月 05 07:18:42 master httpd[224777]: Server configured, listening on: port 80
[root@minion1 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: reloading (reload) since Mon 2021-07-05 07:51:19 EDT; 3s ago
Docs: man:httpd.service(8)
Main PID: 194537 (httpd)
Status: "Reading configuration..."
Tasks: 1 (limit: 11300)
Memory: 3.6M
CGroup: /system.slice/httpd.service
└─194537 /usr/sbin/httpd -DFOREGROUND
7月 05 07:50:58 minion1 systemd[1]: Starting The Apache HTTP Server...
7月 05 07:51:19 minion1 httpd[194537]: AH00558: httpd: Could not reliably determine the server's fully qualified d>
7月 05 07:51:19 minion1 systemd[1]: Started The Apache HTTP Server.