saltstack 1. 安装使用及组件介绍

版权声明:转载请注明出处,QQ:948793841 https://blog.csdn.net/u012881331/article/details/83629426


saltstack的四大功能:

​ 远程执行,配置管理,云管理,事件驱动

saltstack组件:

  • salt-master

  • salt-minion

  • 执行模块

  • 状态

  • Grains

  • Pillar

  • 等等等等

saltstack 安装

安装saltstack

安装repo源,在https://repo.saltstack.com/yum/选择合适的repo源,进行安装。

yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm 
# 固定版本
# yum install https://repo.saltstack.com/yum/redhat/salt-repo-2018.3-1.el7.noarch.rpm 

注:在安装repo源时需要注意,尽量使用固定版本的repo源,防止以后在执行yum update时升级后的不可用问题。

安装对应组件

yum install salt-master
yum install salt-minion
yum install salt-ssh
yum install salt-syndic
yum install salt-cloud
yum install salt-api
简单配置saltstack
  • salt-master

salt-master无需配置可以直接启动使用。

  • salt-minion

salt-minion需要配置master字段来让minion去连接salt-master,该字段可以配置为IP和域名。

可以配置id字段来设置minion的标示ID,否则默认使用socket.getfqdn()获取的值来设定,并保存到/etc/salt/minion_id命名的文件中。

启动服务后,master和minion都会在/etc/salt/pki目录中对应服务的文件夹下生成一对秘钥文件,

端口监听

salt-master监听4506和4506端口,使用Zeromq和salt-minion进行通信,master通过4505端口异步发送任务到minion端。

salt-minion不监听端口,minion和master在4505上建立长连接,接受master下发的任务。任务执行完成后,结果发送到salt-master的4506端口。

YAML

缩进

YAML使用固定缩进方案来表示数据层之间的关系。Salt要求每个级别的缩进恰好包含两个空格。不要使用tab。

冒号

Python字典只是键值对。字典键在YAML中表示为由尾部冒号终止的字符串。值由冒号后面的字符串表示,用空格分隔

my_key:my_value
# 在python中格式如下
# {'my_key': 'my_value'}
# 或者,可以通过缩进将值与键相关联。
my_key:
  my_value

字典可以嵌套:

first_level_dict_key:
  second_level_dict_key: value_in_second_level_dict
# 在python中格式如下
# {
#     'first_level_dict_key': {
#         'second_level_dict_key': 'value_in_second_level_dict'
#     }
# }
破折号

为了表示项目列表,使用单个短划线后跟空格。多个项目是同一列表的一部分,因为它们具有相同级别的缩进。

- list_value_one
- list_value_two
- list_value_three
# 列表可以是键值对的值。这在盐中很常见:
my_dictionary:
  - list_value_one
  - list_value_two
  - list_value_three
# 在python中格式如下
# {'my_dictionary': ['list_value_one', 'list_value_two', 'list_value_three']}

使用

认证

首次使用需要在master上对minion进行认证后才能对minion进行操作。使用salt-key命令对minion端进行认证操作。

salt-key
	-A: 认证全部
	-a: 支持通配符认证
	-D: 拒绝所有认证
	-d: 支持通配符拒绝认证

minion会把自己的公钥发送给master,保存到master的/etc/salt/pki/master/minions_pre目录下,每个minion端的公钥文件以minion端的id命名,master认证后会移动到/etc/salt/pki/master/minions目录下,并且会把master的公钥传到minion 端的/etc/salt/pki/minion/minion_master.pub文件中。

模块
# 这里的*表示匹配minionID名,由于shell的问题,这里用了反斜杠进行转义,也可以使用单引号和双引号。
salt \* test.ping
salt '*' cmd.run 'free -m'

salt执行命令格式为:1.salt关键字。2.通配符。3.模块以及模块下的方法 4.方法需要的参数

state.sls

可以编写state.sls文件对服务器进行配置管理。

首先,需要编辑master配置文件来制定salt的文件目录,如下:

# 这里不同的环境对应不同的目录
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  prod:
    - /srv/salt/prod
  test:
    - /srv/salt/test

然后,在base目录下创建按照apache服务的state.sls脚本,如下:

mkdir -p /srv/salt/{base,dev,prod,test}
mkdir /srv/salt/base/web
cat /srv/salt/base/web/apache.sls
apache-install:
  pkg.installed:
    - name: httpd
apapche-service:
  service.running:
    - name: httpd
    - enable: True

最后,执行进行安装:

# 默认环境为bash
salt 'minion' state.sls web.apache saltenv=base
# 测试命令
salt 'minion' state.sls web.apache test=True
top.sls

top.sls本不是固定的,可以在master的配置文件中进行state_top: top.sls配置,建议不要修改。

top.sls来指定不同minion执行不同的脚本:

# 这里表示所有服务安装apache服务
[root@controller base]# cat /srv/salt/base/top.sls
base:
  '*':
    - web.apache

/srv/salt/base/web/apache.sls文件内容如下:

[root@controller base]# cat web/apache.sls
apache-install:
  pkg.installed:
    - name: httpd

apapche-service:
  service.running:
    - name: httpd
    - enable: True

执行,

# 这里的* 和top.sls里的*是两个概念
salt '*' state.highstate

数据系统

Grains

grains用于收集操作系统,域名,IP地址,内核,操作系统类型,内存和许多其他系统属性。它是保存到minion端的静态数据,master端获取数据时采用明文传输。

  1. 存放着salt-minion启动时收集的信息。
salt \* grains.items
salt \* grains.item virtual
salt \* grains.ls
salt \* grains.get saltversion
salt \* grains.get ip_interfaces:eth0
  1. salt可以根据Grains来匹配minion:
[root@controller base]# salt -G 'os:CentOS' test.ping
salt-master:
    True
salt-minion:
    True
[root@controller base]# salt \* grains.get os
salt-master:
    CentOS
salt-minion:
    CentOS
  1. top.sls中可以使用根据grains进行匹配
[root@controller base]# cat /srv/salt/base/top.sls
base:
  'os:CentOS':
    - match: grain
    - web.apache
  1. 在模版语言中使用grains

  2. 自定义grains

    • 在minion的配置中修改grains选项来定义。(不推荐,需要单独修改minion的配置文件)

    • 在minion端的/etc/salt/grains文件中单独配置,配置后需要重启或者使用salt \* saltutil.sync_grains命令刷新grains才能生效

    • 在master端file_root指定的子目录中创建_grains的自定义grains模块目录,将在state.highstate运行时或altutil.sync_grainssaltutil.sync_all功能分发给minion端。该文件的文件名以及函数名无关紧要,根本不会影响谷物数据; 只有返回的键/值成为grains的一部分。

      mkdir /srv/salt/base/_grains
      cat /srv/salt/base/_grains/zabbit.py
      def yourfunction():
          grains = {}
          grains['yourcustomgrain'] = True
          grains['anothergrain'] = 'somevalue'
          import time
          grains['time'] = time.time()
          return grains
      # python脚本中可以定义静态配置以及python获取到的配置,但是需要注意的是动态获取的时间只有minion重启或者刷新grains才会生效。
      

  3. grains的缺点:

    • 静态的数据。
    • 明文传输,敏感数据不安全。
Pillar

保存在master端数据,一般放一些敏感的数据,采用加密方式传输。

salt-master服务器维护一个pillar_rootsfile_roots文件结构类似的设置,该pillar_roots选项将环境映射到目录。然后根据顶部文件中的匹配器将支柱数据映射到minions,该顶部文件以与状态顶部文件相同的方式布局。pillar可以使用与标准顶级文件相同的匹配器类型。

配合master配置文件/etc/salt/masterpillar_roots选项

pillar_roots:
  base:
    - /srv/pillar/base
  prod:
    - /srv/pillar/prod
mkdir -p /srv/pillar/{base,prod}
systemctl restart salt-master

新建pillar的top.sls文件

声明在base环境中,匹配所有minions的glob将在柱子中找到支柱数据packages 。假设 从上面取的pillar_roots/srv/pillarpackages柱子将位于/srv/pillar/base/apache.sls

cd /srv/pillar/base
[root@controller base]# cat top.sls
base:
  '*':
    - apache

结合grains可以只对CentOS系统进行pillar参数进行设置

base:
  'os:CentOS':
    - match: grain
    - apache

/srv/pillar/base/apache.sls文件内容如下:

[root@controller base]# cat apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

修改/srv/salt/base/web/apache.sls文件内容如下:

[root@controller base]# cat web/apache.sls
apache-install:
  pkg.installed:
    - name: {{ pillar['apache'] }}

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

继续执行

salt '*' state.highstate

Grains和Pillar

数据系统 存储位置 类型 采集方式 场景 传输方式
Grains minion 静态 minion启动时,可以刷新 1.获取信息 2.匹配 明文
Pillar master 动态 指定,实时生效 1.匹配 2.敏感数据配置 密文

猜你喜欢

转载自blog.csdn.net/u012881331/article/details/83629426