一、salt-master(参考 10.20.1.57 或 10.20.1.52)
1、首先Salt-Master 使用 saltstack repo 进行安装
将以下文件保存到 /etc/yum.repos.d/saltstack.repo 中:
# 10.20.1.57、10.20.1.52
[saltstack-repo]
name=SaltStack repo for Red Hat Enterprise Linux $releasever
file=/etc/yum.repos.d/saltstack.repo
gpgcheck=0
key_url=http://saltstack.pkg.lehe.com/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
enabled=1
baseurl=http://saltstack.pkg.lehe.com/redhat/$releasever/$basearch/latest
2、然后安装 Salt-Master、Salt-Api、Salt-SSH 三个模块
yum install -y salt-master salt-ssh salt-api
3、配置
安装完成后配置 ext_pillar 和 master_tops 使用 Foreman
655 ext_pillar:
656 - foreman_salt: /etc/salt/foreman.yaml
411 master_tops:
412 - foreman_salt: /etc/salt/foreman.yaml
假设 foreman 的 salt-proxy 插件部署在 /home/service/salt-foreman 目录
64 module_dirs:
65 - /home/service/salt-foreman
配置 modules 目录、ext_pillar 和 master_tops
64 module_dirs:
65 - /home/service/salt-foreman
配置其它的 salt-maste r相关的配置
autosign_file 对应自动签名配置(针对某些host自动通过minion的key)
publisher_acl 对应是否支持非root账户在master本机访问时的acl限制
external_auth 对应salt-api的访问鉴权限制(这里配置对于foreman用户访问不进行任何鉴权)
hash_type 对应文件的hash值(这里用sha1,其实用md5也没事,很难碰撞的)
284 autosign_file: /etc/salt/autosign.conf
304 work:
305 - .*
340 external_auth:
341 auto:
342 foreman:
343 - '@runner'
518 hash_type: sha256
4、Salt-Api
配置 /etc/salt/master.d/saltweb.conf
我们使用 cherrypy 的 server 来提供 salt-api 的服务(其实可以使用 tornado 的 server 的,搞明白了之后再用)
监听本机 lo 地址,并且关闭 ssl
rest_cherrypy:
port: 9191
disable_ssl: True
5、Salt-SSH
6、启动对应的服务
# salt-master
# /etc/init.d/salt-master start # Version6
或
# service salt-master start # Version6
# systemctl start salt-master.service # Version7
# salt-api
# /etc/init.d/salt-api start # Version6
或
# service salt-api start # Version6
# systemctl start salt-api.service # Version7
二、salt-minion
1、考虑到Salt官方提供了Salt的标准安装包,我们直接使用saltstack的repo进行安装,安装的功能卸载了salt-minion-install的sls文件中,内容如下:
# /srv/salt/salt-minion-install.sls
salt-minion-install:
pkgrepo.managed:
- name: saltstack-repo
- file: /etc/yum.repos.d/saltstack.repo
- humanname: SaltStack repo for Red Hat Enterprise Linux $releasever
- baseurl: http://saltstack.pkg.lehe.com/redhat/$releasever/$basearch/latest
- gpgcheck: 0
- key_url: http://saltstack.pkg.lehe.com/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
pkg.latest:
- pkgs:
- salt-minion
- fromrepo: saltstack-repo
- require:
- pkgrepo: saltstack-repo
- order: 1
{% if grains['osmajorrelease'] == 7 %}
cmd.wait:
- name: systemctl enable salt-minion
- require:
- pkg: salt-minion
{% elif grains['osmajorrelease'] <= 6 %}
cmd.wait
- name: chkconfig salt-minion on
- require:
- pkg: salt-minion
{% endif %}
include:
- salt-minion
即将以下文件保存到 /etc/yum.repos.d/saltstack.repo 中
[saltstack-repo]
name=SaltStack repo for Red Hat Enterprise Linux $releasever
file=/etc/yum.repos.d/saltstack.repo
gpgcheck=0
key_url=http://saltstack.pkg.higo.cloud/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
enabled=1
baseurl=http://saltstack.pkg.higo.cloud/redhat/$releasever/$basearch/latest
2、salt-minion.sls 中撰写了对应功能从 master 中拉取 minion 的配置文件并且自动 reload minion 的功能,内容如下:
salt-minion-config: # 标签定义
file.managed: # 定义一个方法,在这里方法为:下发文件,确保文件存在
- name: /etc/salt/minion # file.managed 函数参数,下发文件绝对路径
- user: root # 表示文件属主
- group: root # 表示文件属组
- mode: 600 # 表示文件权限
- source: salt://files/minion # source 是 managed 函数的参数之一,告诉管理文件地址的相对路径
salt-minion-id-config: # 标签定义
file.managed: # 定义一个方法,在这里方法为:下发文件,确保文件存在
- name: /etc/salt/minion_id # file.managed 函数参数,下发文件绝对路径
- user: root # 表示文件属主
- group: root # 表示文件属组
- mode: 600 # 表示文件权限
- contents: {{ grains['fqdn_ip4'][0] }} # contents 是 managed 函数的参数之一,重新获取下发文件内容。grain: 按照grains规则去匹配
- order: 2 # 优先级比 require 和 watch 低,有 order 指定的 state 比没有 order 指定的优先级高
salt-minion: # 标签定义
cmd.wait: # 定义一个方法:
- name: echo service salt-minion restart | at now + 1 minutes # 要执行的命令,记住该命令将会在 salt-minion 的路径和权限下执行。
- watch: # 监控状态是否变化,常用在 service.running 中,在某个 state 变化时运行此模块
- file: /etc/salt/minion #
- file: /etc/salt/minion_id #
- require: # 依赖某个 state,在运行该 state 前,先运行依赖的 state,依赖可以有多个
- salt-minion-config #
- salt-minion-id-config #
service.running: # 定义一个方法,service 模块,启动 salt-minion
- name: salt-minion # name 是 service.running 函数的参数,如果包名与服务名相同,则 name 这项可以省略,该实例中不用指定包,所以必须有 name 指明 running 参数是 salt-minion
- enable: true #
3、在存在对目标机器的 ssh 访问授权情况下可以通过 salt-ssh 的命令来进行 Salt-Minion 的安装,操作方法如下:
salt-ssh -i '<target machine nodename>' state.apply salt-minion-install