一、环境准备

1、redhat6.7 2台(master:172.10.25.15; minion : 172.10.25.12 )
2、python版本 2.7.14
3、anaconda5.1  下载路径:https://www.anaconda.com/download/#linux

   

二、SaltStack下载安装

因大部分公司对内部网络有限制,不允许访问外部网站,特准备2种安装方式,离线安装及在线安装

1、离线安装

离线安装salt参考文档:

2、在线安装

下载地址:https://repo.saltstack.com/#rhel

运行以下命令以安装SaltStack存储库和密钥:

sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2018.3-1.el6.noarch.rpm安装salt主或其他salt组分:
sudo yum clean expire-cache
sudo yum install salt-master -y
sudo yum install salt-minion -y
sudo yum install salt-ssh -y
sudo yum install salt-syndic -y
sudo yum install salt-api -y
sudo yum install salt-cloud -y

 

三、 salt-master配置

更改配置  /etc/salt/master

interface: 172.10.25.15(冒号后一定要空格)
user: root (用户运行Salt进程)
conf_file: /etc/salt/master (主配置文件路径)
pki_dir: /etc/salt/pki/master (存储pki身份验证密钥的目录 默认即可)
cachedir: /data/cache/salt/master (缓存路径指定空间较大目录下 默认即可)
keep_jobs: 4 (设置保留旧作业信息的小时数。请注意,设置此选项可0禁用缓存清理程序,如果mimion节点超过1000建议此配置设置小)
gather_job_timeout: 10 (客户端请求有关正在运行的作业的信息时等待的秒数。)
job_cache: True (缓存文件到本地)
worker_threads: 25 (开启的线程数,根据主机资源而定)
auto_accept: Flase  (此设置是否自动接受来自minion的所有传入公钥)
hash_type: sha256 (hash_type是在主服务器上发现文件的哈希时使用的哈希。默认值为sha256,但也支持md5,sha1,sha224,sha384和sha512)
log_file: /data/log/salt/master
key_logfile: /data/log/salt/key

syndic_master: 172.10.25.12
syndic_master_port: 4506
syndic_log_file: /data/log/salt/syndic
syndic_wait: 15
配置开机启动:/etc/init.d/salt-maser master
            chkconfig salt-master on

四、 salt-minion配置

更改配置 /etc/salt/minion (注意格式)

master: 
  -  172.10.25.15 (此处配置master的IP地址)
master_shuffle: True (设置启动时随机选择一台 目前我们master是一台)
master_type: failover 
master_alive_interval: 10  (配置minion将以秒为单位验证当前主设备是否存活并响应的频率。如果minion发现现有的master已经死了,它将尝试与列表中的下一个master建立连接 目前我们master是一台)
retry_dns: 0  (在尝试解析主主机名之前等待的秒数)
backup_mode: minion
auth_tries: 2  (尝试向主服务器进行身份验证时可接受的连续SaltReqTimeoutErrors的数量)
auth_safemode: True (如果在ping_interval期间由于SaltReqTimeoutError导致身份验证失败,则此设置(如果设置为True)将导致子minion进程重新启动)
log_level_logfile: debug (定义日志级别)
return: redis (执行结果返回类型)
redis.db: '1' (redis db)
redis.host: '172.10.25.16' (redis服务ip)
redis.port: 6379 (redis服务端口)

配置开机启动:chkconfig salt-minion on
重启:service salt-minion restart

五、salt-api配置

5.1 安装salt api

yum -y install  pyOpenSSL

5.2 生成自签证书

salt-call --local tls.create_self_signed_cert
local:
    Created Private Key: "/etc/pki/tls/certs/localhost.key." Created Certificate: "/etc/pki/tls/certs/localhost.crt."

问题1:'tls' __virtual__ returned False: PyOpenSSL version 0.10 or later must be installed before this module can be used.

发现python版本不一致 

[root@SX-25-15 soft]# python
Python 2.7.14 |Anaconda, Inc.| (default, Dec  7 2017, 17:05:42) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
/usr/bin/python2.7  
Python 2.7.13 (default, Mar 30 2018, 15:31:59) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

salt-call  查看启动文件读取/usr/bin/python2.7文件

解决:

替换/usr/bin/python2.7文件 

rm -r usr/bin/python2.7   
 ln -s  /tools/anaconda2/bin/python2.7 /usr/bin/python2.7

问题2:[root@SX-25-15 tools]# salt-call --local tls.create_self_signed_cert 

Traceback (most recent call last):
  File "/usr/bin/salt-call", line 7, in <module>
    from salt.scripts import salt_call
ImportError: No module named salt.scripts

重装解决问题:

pip install salt
pip install cherrypy

 

5.3 配置

5.3.1 配置api

指定api主机地址及端口,配置/etc/salt/master.d/api.conf 文件

rest_cherrypy:
  host: 172.17.25.15
  port: 8000
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/certs/localhost.key

5.3.2 配置auth

配置 /etc/salt/master.d/auth.conf文件

external_auth:
  pam:
    saltapi: #用户 
      - .*   #该配置给与saltapi所有模块使用权限,处于安全考虑一般给与特定模块使用权限
      - '@wheel'
      - '@runner'
      - '@jobs'

5.3.3 创建用户,saltapi认证使用

useradd -M -s /sbin/nologin saltapi 
echo '123456' | passwd saltapi --stdin 
/etc/init.d/salt-api restart

5.3.4 验证login登陆,获取token字符串

curl -sSk https://172.10.25.15:8000/login \
-H 'Accept: application/x-yaml' \
-d username='saltapi' \
-d password='saltapi' \
-d eauth='pam'

return:
- eauth: pam
  expire: 1527622175.307136
  perms:
  - .*
  - '@wheel'
  - '@runner'
  - '@jobs'
  start: 1527578975.307132
  token: fcd36c01cd4fbc6417b29b728a482b2b312dfd5f
  user: saltapi

5.3.5 通过api执行test.ping测试连通性

 

curl -sSk https://172.10.25.15:8000 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token:22e97bd3a4e62e374e23216532c17a9db8fca19c' \
-d client=local \
-d tgt='*' \
-d fun=test.ping

return:
- SX-25-12: true

5.3.6 minion端执行具体命令

curl -sSk https://172.10.25.15:8000 -H 'Accept: application/x-yaml' -H "X-Auth-Token:e1fc4961f42bf51effba5b2a1d14a96540fdc23c" -d client=local -d tgt="SX-25-12" -d fun='cmd.run' -d arg="date"

return:
- SX-25-12: Tue May 29 17:51:10 CST 2018

作者简介:

就职于甜橙金融质量平台

运维架构师

致力于高效CI,环境架构优化,投身于DevOps,自动化运维领域多年,具有丰富的一线经验。