基于Saltstack API搭建自动化部署平台(基础篇)

作者:linux120 发布时间:December 10, 2015 分类:服务器配置

Saltstack 提供了很强大的命令行工具,用来管理主机、执行任务,这是它的初衷。然而在大规模的自动化管理中,命令行终究不是很方便,比如批量操作、可视化管理、操作历史纪录等。好在 Saltstack 提供 REST API 管理几乎所有功能。

salt-api 环境配置
Salt-api 不是默认的功能,需要在 salt-master 端安装 salt-api 插件,并且修改配置,已 cetnos 7 为例, 配置路径在 /etc/salt/master , 添加如下配置:

rest_cherrypy:
port: 8000
debug: True
ssl_crt: /etc/pki/tls/certs/ca.crt
ssl_key: /etc/pki/tls/certs/ca.key
external_auth:
pam:
salt:
- .*
看到配置中的 /etc/pki/tls/certs/ca.crt了吗,对了,我们需要生成证书,用于ssl,当然这不是必须的:

cd /etc/pki/tls/certs
# 生成自签名证书, 过程中需要输入key密码及RDNs
make testcert
cd /etc/pki/tls/private/
# 解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码
openssl rsa -in localhost.key -out localhost_nopass.key
创建salt用户,并设置密码,用于登陆操作:

useradd -M -s /sbin/nologin salt
password salt
配置完成,重启salt-master,、salt-api

基本的 API 使用
认证,使用上面创建的用户密码进行认证:
curl localhost:8000/login -H "Accept: application/json" -d username=salt -d password=salt -d eauth=pam
记下返回值中的 token, 用于后续操作

执行Job,等待返回
curl 'http://localhost:8000' -H 'Accept: application/json' -H 'X-Auth-Token: $token' -d client='local' -d tgt='172.16.200.58' -d fun='test.ping'
这里client可以是local, wheel, runner, 这里先不展开。

获取minion列表及详细信息
curl http://localhost:8000/minions/ -H 'Accept: application/json' -H 'X-Auth-Token: $token'

异步执行Job
curl http://localhost:8000/minions/ -H 'Accept: application/json' -H 'X-Auth-Token: $token' -d tgt='172.16.200.58' -d fun='status.diskusage'

获取Job执行情况
curl 'http://localhost:8000/jobs/20151015161959798791' -H 'Accept: application/json' -H 'X-Auth-Token: $token'

获取salt-key
curl 'http://localhost:8000/keys' -H 'Accept: application/json' -H 'X-Auth-Token: $token'

events
curl 'http://localhost:8000/events' -H 'Accept: application/json' -H 'X-Auth-Token: $token'
这是个 HTTP 长连接,link这个链接,可以监听 salt 所有事件,比如 Job 执行完成。

以上 API 覆盖了大部分操作,后续文章会给出更详细的说明,以及其他 API,也可以在官方上查看具体详情。

Returner
salt默认是没有任何数据库的,比如 Job 执行信息,会保存在文件中,在 CLI 模式下这个完全不是问题,但是如果以 API 调用,最好有个方便查询的存储方式,比如mysql,以便后续查询。最近挺喜欢 etcd 这个key-value数据库,So,在 master 配置 etcd-Returner,添加如下配置:

etcd_config:
etcd.host: 172.16.200.23
etcd.port: 2379
etcd.returner: etcd_config
etcd.returner_root: /salt/return
这样,salt 的事件信息就会存储在 etcd 了,我们可以 watch /salt/return 获取 salt 发生的变化。

etcdctl ls /salt/return
etcd-pillar
salt的配置也是保存在file,pillar是比较灵活的,它用文件保存,阅读时很方便的,但是 API 操作的时候多有不便,它也有多种扩展的存储方式,同样这里介绍 etcd,在 master 配置 etcd-pillar,添加如下配置:

ext_pillar:
- etcd: etcd_config root=/salt/shard
- etcd: etcd_config root=/salt/%(minion_id)s
这样,共享的配置存储在 /salt/shard,minion独有的配置存储在/salt/%(minion_id)s,当然有利就有弊,使用etcd存储,确实不方便查看。当然对于 web 平台来说,应该不是问题。

好了,salt-api基础篇介绍到这里,后续将这些介绍的功能串起来,提供一个完整的流程,支撑一个基于 web 的 saltstack 管理平台。

标签: none

仅有一条评论 »

  1. Whoa tons of valuable info.

评论已关闭