centos7.4之saltstack的系列(一)环境部署

Saltstack简介

  saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。ZeroMQ使SaltStack能快速在成千上万台机器上进行各种操作,之前已经介绍过了puppet mco的框架,比较类似。而且采用RSA Key方式确认身份,传输采用AES加密,使传输的安全性得到保障。

       saltstack是基于C/S架构的服务模式,服务器端叫做Master,客户端叫作Minion,并且有消息队列中的发布与订阅(pub/sub)服务模式,minion与master之间通过ZeroMQ消息队列通信。Master和Minion端都以守护进程的模式运行,一直监听配置文件里面定义的ret_port也就是4506端口(接收minion请求)和publish_port也就是4505端口(ZMQ的发布消息)。当minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。

Saltstack执行命令周期:

  第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。
  第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据jobid获取命令执行结果。
  第三步:master接收到命令后,将要执行的命令发送给客户端minion。
  第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
  第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。
  第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中。
  第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

Saltstack安装

  1.1、saltstack对于python版本和python模块有一定的要求。

Python 版本大于2.6或版本小于3.0
msgpack-python saltstack消息交换库
YAML saltstack配置解析定义语法
Jinja2 saltstack states配置模板
MarkupSafe Python unicode转换库
apache-libcloud saltstack对云架构编排库
Requests HTTP Python库
ZeroMQ saltstack消息系统
pyzmq ZeroMQ Python库
PyCrypto Python密码库
M2Crypto Openssl Python包装库

 

 

 

 

 

 

 

 

 

  1.2、安装

  官网:https://repo.saltstack.com/#rhel

  yum源地址:https://repo.saltstack.com/yum/redhat/

  1.3、安装yum源(https://repo.saltstack.com/#rhel)

yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-2018.3-1.el7.noarch.rpm

  清理yum缓存

yum clean expire-cache

  1.4、服务器安装(这里可能需要FQ)

yum install -y salt-master
yum install -y  salt-minion
yum install -y salt-ssh
yum install -y  salt-syndic
yum install -y  salt-cloud
yum install -y  salt-api

  1.5、客户端安装

yum install salt-minion -y

  1.6、salt-minion的认证

  salt-master:服务端服务名

  salt-minion:客户端服务名

  a、首先,我们启动salt-master端,然后客户端服务首先不启动,我们需要先修改客户端的配置文件。

vim /etc/salt/minion

  b、修改下面这两个位置,master是服务器名称,id指的是客户端的名称,一般情况下我们管理的机器都比较多,我喜欢位置_服务_IP地址,这样越详细越好,免得机器多的时候不好辨认,不过你有更好的办法还请指教,修改完配置文件后再启动客户端服务,注意冒号后面有一个空格,否则不是报错就是服务端不显示。

master: 172.16.5.238
id: dasha_ceshi_172.16.5.239

  c、我们上服务端查看

[root@localhost salt]# salt-key -L

  

  Accepted Keys:认证通过

  Denied Keys:旧的的认证

      Unaccepted Keys:等待认证

      Rejected Keys:拒绝认证

  d、修改完客户端配置文件,并启动服务器后,服务端的Unaccepted Keys:会提示你id是谁跟谁还没有认证。认证的方式是salt-key -a 客户端id:

#会提示你是否认证,直接y同意就行。
salt-key -a dasha_ceshi_172.16.5.239
salt-key -a dasha_ceshi_172.16.5.240

  

  注意,如果你想修改id的话,需要先删除服务端的id,使用salt-key -d id名称就行,修改客户端文件,重启客户端服务后,需要重新认证。这里需要注意一下,老的版本需要删除客户端的/etc/salt/minion_id的内容,修改配置文件的id,重启服务才生效。因为第一次启动的时候它会生成这个文件,以后再不会读minion这个配置文件了,直接读minion_id这个文件。

  master 秘钥对默认存储在/etc/salt/pki/master/master.pub  /etc/salt/pki/master/master.pem
  master 端认证的公钥存储在:/etc/salt/pki/master/minions/
  minion 秘钥对默认存储在/etc/salt/pki/minion/minion.pub  /etc/salt/pki/minion/minion.pem
  minion 存放的master公钥/etc/salt/pki/minion/minion_master.pub

  e、测试,如果能ping通证明没有问题了。

  

 

三、SaltStack命令详解

1、# man salt 或者 # salt -h 都可以查看salt命令使用方法:

# salt -h
Usage: salt [options] '<target>' <function> [arguments]

Options(选项):

      --version : 查看saltstack软件的版本号。

      --versions-report : 查看saltstack软件以及依赖包的版本号。

      -h, --help : 查看帮助信息。

      --saltfile=SALTFILE:指定saltfile的路径。 如果没有通过,将在当前工作目录中搜索一个。

      -c CONFIG_DIR, --config-dir=CONFIG_DIR:指定配置文件的目录(默认是/etc/salt/)。

      -t TIMEOUT, --timeout=TIMEOUT:指定超时时间默认是5秒。

      --hard-crash:捕捉到original异常不退出默认关闭。

      -s, --static:以组的形式返回所有minion的数据。

      -p, --progress:显示进度图,需要progressbar的python包。

      --failhard :在第一个执行错误返回之后停止批处理。

      --async : 异步执行。

      --subset=SUBSET : 对目标minions的随机子集执行程序. minions在执行前会先验证是否存在该命名的函数,再去执行

      -v, --verbose : 打开命令详细,显示jid和活动的工作查询

      --hide-timeout : 隐藏超时时间。

      --show-jid : 显示任务的jid。

      -b BATCH, --batch=BATCH, --batch-size=BATC : 按照百分比执行任务。

      -a EAUTH, --auth=EAUTH, --eauth=EAUTH, --external-auth=EAUTH : 指定外部认证方式。

      -T, --make-token : 生成master token.

      --return=RETURNER : 设置一种替代方法。 默认情况下,salt将从命令将返回数据发送回主服务器,但返回数据可以重定向到任意数量的系统,数据库或应用程序。

      --return_config=RETURNER_CONF : 指定命令返回的设置文件。

      -d, --doc, --documentation : 查看指定模式或所有模块文档。

      --args-separator=ARGS_SEPARATOR :   指定发送命令跟命令参数的分隔符,当用户想把一个命令当作参数发送给另一个命令执行时。

      --summary :  显示汇总信息。

      --username=USERNAME : 指定外部认证的用户名。

      --password=PASSWORD :  指定外部认证的密码。

      --metadata=METADATA :  将元数据传递给Salt,用于搜索作业。

Logging Options(日志相关参数):

      -l LOG_LEVEL, --log-level=LOG_LEVEL : 指定日志级别。

      --log-file=LOG_FILE : 指定日志记录文件

      --log-file-level=LOG_LEVEL_LOGFILE : 日志文件日志记录级别。'all', 'garbage', 'trace', 'debug', 'info', 'warning', 'error','critical', 'quiet'. 默认: 'warning'.

Target Options(目标选择选项):

      -E, --pcre : 正则匹配

      -L, --list:  列表匹配,目标表达式将被解释为以逗号分隔的列表。

      -G, --grain:  grains匹配。

      --grain-pcre :grains加正则匹配。

      -N, --nodegroup:组匹配。

      -R, --range:范围匹配。

      -C, --compound : 综合匹配(指定多个匹配,空格隔开)。

      -I, --pillar : pillar值匹配。

      -J, --pillar-pcre : pillar加正则匹配。

      -S, --ipcidr : minions网段地址匹配。

Output Options(输出参数):
      --out=OUTPUT, --output=OUTPUT : 使用指定的输出器从'salt'命令打印输出。 内置的是 'key', 'yaml',  'overstatestage', 'newline_values_only', 'pprint',  'txt', 'raw', 'virt_query', 'compact', 'json', 'highstate', 'nested', 'quiet', 'no_return'.

      --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT :   在空格中打印由提供的值缩进的输出。 负值禁用缩进。 仅适用于支持缩进的输出器。

      --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE : 输出到指定文件。

      --out-file-append, --output-file-append :  输出附加到指定的文件。

      --no-color, --no-colour :  关闭所有的颜色显示。

      --force-color, --force-colour : 强制输出颜色显示。

      --state-output=STATE_OUTPUT, --state_output=STATE_OUTPUT : 覆盖配置的state_output值输出,指定state格式(full, terse, mixed, changes or filter)输出,默认值是full。

2 salt-key命令详解

# salt-key -h

Actions:
     -l ARG, --list=ARG:显示指定状态的key(支持正则表达式)

     -L, --list-all :列出所有公钥。"--list all"已经弃用。

     -a ACCEPT, --accept=ACCEPT: 接受指定的公钥(除了挂起的密钥之外,使用--include-all匹配拒绝的密钥),支持正则表达式。

     -A, --accept-all :接收所有等待认证的key。

     -r REJECT, --reject=REJECT :拒绝指定等待认证的key(支持正则表达式)

     -R, --reject-all:拒绝所有等待认证的key。

     --include-all: 显示所有状态的key。

     -p PRINT, --print=PRINT :打印指定的公钥支持正则表达式。

     -P, --print-all:打印所有的公钥。

     -d DELETE, --delete=DELET:删除指定的key。

     -D, --delete-all:删除所有的key。

     -F, --finger-all:显示所有key的指纹信息。

3、客户端的salt-call(就相当于要把远程执行的命令,换到客户端本地自己本地执行了。)

salt-call命令的output和log相关参数与salt命令一样,就不记录了,对一些不同的参数做下记录。

# salt-call -h

Usage: salt-call [options] <function> [arguments]
Options:

     --version:  查看saltstack程序的版本号。

     --versions-report: 查看saltstack程序以及依赖包的版本号。

     -h, --help:查看帮助信息。

     --saltfile=SALTFILE: 指定配置文件。

     -c CONFIG_DIR, --config-dir=CONFIG_DIR:指定配置文件目录(默认是/etc/salt/)

     --hard-crash: 捕捉到original异常不退出(默认关闭)。

     -g, --grains: 返回的信息生成grains。

     -m MODULE_DIRS, --module-dirs=MODULE_DIRS: 指定自定义模块目录。

     -d, --doc, --documentation: 查看指定模块或者所有模块文档。

     --master=MASTER: 指定saltstack master。如果省略此选项,将使用minion config中的主选项。如果设置了多主机,则首先列出的主机将被使用。

     --return=RETURNER:设置salt-call将返回数据传递给一个或多个returner接口。

     --local:在本地运行salt-call,默认也是在本地运行。

     --file-root=FILE_ROOT:指定fire基础根目录。

     --pillar-root=PILLAR_ROOT: 指定pillar基础根目录。

     --retcode-passthrough:显示salt-call命令返回状态。

     --metadata :打印执行元数据以及返回。 这将打印输出器数据,返回码等。

     --id=ID:指定一个minion ID.

     --skip-grains:不加载grains信息。

     --refresh-grains-cache:强制刷新grains信息。

     -t AUTH_TIMEOUT, --timeout=AUTH_TIMEOUT:更改运行命令的超时时间,默认 60秒。

4、常用命令

  salt-run manage.status #查看所有客户端up/down状态

  salt-run manage.up    #只显示up状态的客户端

  salt-run manage.down  #只显示down状态的客户端

  salt  id  cmd.run  '命令' #执行命令

  salt id test.ping #测试客户端连接状态

  

 

posted @ 2018-06-08 11:59  Charles.L  阅读(1126)  评论(0)    收藏  举报