条件判断语句
[root@master salt]
[root@master base]
[root@master base]
{% for user in ['test1','test2'] %}
{{ user }}:
user.present
{% endfor %}
[root@master base]
minion:
----------
ID: test1
Function: user.present
Result: True
Comment: New user test1 created
Started: 21:44:54.051295
Duration: 1728.451 ms
Changes:
----------
fullname:
gid:
1000
groups:
- test1
home:
/home/test1
homephone:
name:
test1
other:
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
1000
workphone:
----------
ID: test2
Function: user.present
Result: True
Comment: New user test2 created
Started: 21:44:55.779994
Duration: 333.946 ms
Changes:
----------
fullname:
gid:
1001
groups:
- test2
home:
/home/test2
homephone:
name:
test2
other:
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
1001
workphone:
Summary for minion
------------
Succeeded: 2 (changed=2)
Failed: 0
------------
Total states run: 2
Total run time: 2.062 s
[root@minion ~]
uid=1000(test1) gid=1000(test1) groups=1000(test1)
[root@minion ~]
uid=1001(test2) gid=1001(test2) groups=1001(test2)
判断语句
[root@master base]
[root@master base]
test_nginx_install:
pkg.installed:
{% if grains['os'] == 'CentOS Stream' %}
- name: httpd
{% elif grains['os'] == 'Ubuntu' %}
- name: apache2
{% endif %}
[root@master base]
minion:
----------
ID: test_nginx_install
Function: pkg.installed
Name: httpd
Result: True
Comment: All specified packages are already installed
Started: 21:47:36.506405
Duration: 2058.35 ms
Changes:
Summary for minion
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 2.058 s
masterless
应用场景 master 与 minion 网络不通或通信有延迟,即网络不稳定 想在 minion 端直接执行状态 传统的 SaltStack 是需要通过 master 来执行状态控制 minion 从而实现状态的管理,但是当网络不稳定的时候,当想在minion本地执行状态的时候,当在只有一台主机的时候,想执行状态该怎么办呢?这就需要用到 masterless 了。
有了masterless,即使你只有一台主机,也能玩saltstack,而不需要你有N台主机架构。
masterless配置 修改配置文件minion 注释master行 取消注释file_client并设其值为local 设置file_roots 设置pillar_roots
file_client: local
file_roots:
base:
- /srv/salt/base
关闭salt-minion服务 使用 masterless 模式时是不需要启动任何服务的,包括salt-master和salt-minion。
[root@minion ~]
[root@minion ~]
Removed /etc/systemd/system/multi-user.target.wants/salt-minion.service.
salt-call masterless模式执行模块或状态时需要使用salt-call命令,而不再是salt或者salt-ssh。需要注意的是要使用salt-call的–local选项。
[root@minion ~]
local:
21:50:36 up 2 days, 17:37, 1 user, load average: 0.09, 0.03, 0.01
[root@minion base]
[root@minion base]
test_wget:
pkg.installed:
- name: wget
[root@minion1 base]
local:
----------
ID: test_wget
Function: pkg.installed
Name: wget
Result: True
Comment: All specified packages are already installed
Started: 09:53:57.723269
Duration: 1264.517 ms
Changes:
Summary for local
------------
Succeeded: 1
Failed: 0
------------
Total states run: 1
Total run time: 1.263 s
salt-master高可用
salt-master高可用配置 官方文档—salt的高可用
我们需要用salt来管理公司的所有机器,那么salt的master就不能宕机,否则就会整个瘫痪,所以必须要对salt进行高可用。
通过在 minion 端的配置文件 minion 中将 master 参数配置为所有可用主服务器的YAML列表,Salt minions可以同时连接多个主服务器。默认情况下,所有master都是启动的,这意味着任何主服务器都可以将命令指向Salt基础设施
在多主机配置中,每个 master 主机必须具有相同的加密密钥,并且必须分别接受所有 master 主机上的小密钥。file_root 和 pillar_root 的内容也需要与Salt之外的进程保持同步
多master故障转移:
将master_type参数从str更改为failover将导致 minion 连接到 master 列表中第一个响应的 master 服务器。
每隔master_alive_interval参数指定的秒数 minion 将检查,以确保当前的 master 仍在响应。如果 master 服务器没有响应,minion 将尝试连接到列表中的下一个 master 服务器。如果 minion 的 master 用完了,当挂掉的 master 被恢复时,列表将被回收。注意,master_alive_interval参数必须出现在 minion 配置中,否则检查主从状态的循环作业将不会被调度。
salt-master高可用之数据同步 涉及到高可用时,数据的同步是个永恒的话题,我们必须保证高可用的2个master间使用的数据是一致的,包括:
/etc/salt/master配置文件 /etc/salt/pki目录下的所有key /srv/下的salt和pillar目录下的所有文件 保障这些数据同步的方案有:
nfs挂载 rsync同步 使用gitlab进行版本控制 安全相关: 为保证数据的同步与防止丢失,可将状态文件通过gitlab进行版本控制管理。
配置salt-master高可用
主机名称 | ip |
---|
master1 | 192.168.207.131 | master2 | 192.168.207.136 | minion1 | 192.168.207.137 |
修改minion端的minion配置文件
node01和node02上必须都安装了salt-master且保证服务都是正常状态
[root@minion1 ~]
....
master:
- 192.168.207.131
- 192.168.207.136
同步配置和数据
[root@master1 ~]
[root@master1 ~]
[root@master1 ~]
[root@master1 ~]
[root@master2 ~]
配置故障转移
[root@minion1 ~]
....
master_type: failover
....
master_alive_interval: 3
[root@minion1 ~]
测试
[root@master1 ~]
minion1:
True
[root@master2 ~]
minion1:
Minion did not return. [No response]
[root@master1 ~]
[root@master2 ~]
minion1:
True
|