saltshaker_apisaltshaker_plus restful api
Saltshaker API
Saltshaker是基于saltstack開發(fā)的以Web方式進(jìn)行配置管理的運維工具,簡化了saltstack的日常使用,豐富了saltstack的功能,支持多Master的管理。此項目為Saltshaker的后端Restful API,需要結(jié)合前端項目Saltshaker_frontend。
架構(gòu)圖
Dashboard
指導(dǎo)手冊
要求
- Python >= 3.6
- Mysql >= 5.7.8 (支持Json的Mysql都可以)
- Redis(無版本要求)
- RabbitMQ (無版本要求)
- Python 軟件包見requirements.txt
- Supervisor (4.0.0.dev0 版本 默認(rèn)pip安裝的不支持python3) 請使用此命令安裝:pip install git+https://github.com/Supervisor/supervisor@master
- GitLab >= 9.0
安裝
準(zhǔn)備工作(相關(guān)依賴及配置見saltshaker.conf):
- 安裝Redis: 建議使用Docker命令如下:
$ docker run -p 0.0.0.0:6379:6379 --name saltshaker_redis -e REDIS_PASSWORD=saltshaker -d yueyongyue/redis:08
- 安裝RabbitMQ: 建議使用Docker命令如下:
$ docker run -d --name saltshaker_rabbitmq -e RABBITMQ_DEFAULT_USER=saltshaker -e RABBITMQ_DEFAULT_PASS=saltshaker -p 15672:15672 -p 5672:5672 rabbitmq:3-management
- 安裝Mysql: 初始化系統(tǒng)管理員 用戶名:admin 密碼:admin
$ docker run -p 0.0.0.0:3306:3306 --name saltshaker_mysql -e MYSQL_ROOT_PASSWORD=123456 -d yueyongyue/saltshaker_mysql:10 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
使用Docker鏡像安裝
- 后端API服務(wù)
$ docker run -d -p 0.0.0.0:9000:9000 --name saltshaker_api \
-e REDIS_HOST=192.168.10.100 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=saltshaker \
-e MYSQL_HOST=192.168.10.100 \
-e MYSQL_PORT=3306 \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=123456 \
-e MYSQL_DB=saltshaker_plus \
-e MYSQL_CHARSET=utf8 \
-e BROKER_HOST=192.168.10.100 \
-e BROKER_PORT=5672 \
-e BROKER_USER=saltshaker \
-e BROKER_PASSWORD=saltshaker \
-e [email protected] \
-e MAIL_PASSWORD=123345 \
-e SMTP_SERVER=smtp.saltshaker.com \
-e SMTP_PORT=25 \
yueyongyue/saltshaker_api:1.12.1
- REDIS_HOST: Redis主機(jī)地址
- REDIS_PORT: Redis端口
- REDIS_PASSWORD: Redis密碼
- MYSQL_HOST: Mysql數(shù)據(jù)庫地址
- MYSQL_PORT: Mysql端口
- MYSQL_USER: Mysql用戶名
- MYSQL_PASSWORD: Mysql密碼
- MYSQL_DB: Mysql數(shù)據(jù)庫名
- MYSQL_CHARSET: Mysql字符集
- BROKER_HOST: RabbitMQ地址
- BROKER_PORT: RabbitMQ端口
- BROKER_USER: RabbitMQ用戶
- BROKER_PASSWORD: RabbitMQ密碼
- FROM_ADDR: 郵箱地址用于發(fā)生郵件
- MAIL_PASSWORD: 郵箱密碼
- SMTP_SERVER: SMTP服務(wù)器地址
- SMTP_PORT: SMTP服務(wù)器端口
- 前端服務(wù)
$ docker run -d -p 0.0.0.0:80:80 --name saltshaker_frontend \
-e DOMAIN=192.168.10.100 \
-e API_ADDR=192.168.10.100 \
-e Nginx_PROXY_PASS=192.168.10.100:9000 \
yueyongyue/saltshaker_frontend:1.12
- DOMAIN: 部署服務(wù)器的IP地址(最終通過這個地址進(jìn)行瀏覽器訪問)
- API_ADDR: 后端API服務(wù)器的地址
- Nginx_PROXY_PASS:后端API服務(wù)器的地址加端口
手動部署
安裝Saltshaker,你需要首先準(zhǔn)備Python 3的環(huán)境(假定項目clone到你的家目錄即$HOME下面,若果不是請對應(yīng)修改相關(guān)路徑)
-
下載:
$ cd $HOME $ git clone https://github.com/yueyongyue/saltshaker_api.git
-
安裝依賴:
$ pip install -r requirements.txt
-
導(dǎo)入FLASK_APP環(huán)境變量以便使用Flask CLI工具,路徑為所部署的app的路徑
$ export FLASK_APP=$Home/saltshaker_api/app.py
-
初始化數(shù)據(jù)庫表及相關(guān)信息,鍵入超級管理員用戶名和密碼(數(shù)據(jù)庫的配置見saltshaker.conf,請確保數(shù)據(jù)庫可以連接并已經(jīng)創(chuàng)建對應(yīng)的數(shù)據(jù)庫)
$ mkdir /var/log/saltshaker_plus $ flask init
輸出如下: Enter the initial administrators username [admin]: admin Enter the initial Administrators password: Repeat for confirmation: Create user table is successful Create role table is successful Create acl table is successful Create groups table is successful Create product table is successful Create audit_log table is successful Create event table is successful Create cmd_history table is successful Create host table is successful Create grains table is successful Create period_task table is successful Create period_result table is successful Create period_audit table is successful Create sls table is successful Init 超級管理員 role successful Init 普通用戶 role successful Init 產(chǎn)品管理員 role successful Init 用戶管理員 role successful Init 訪問控制管理員 role successful Init user successful Successful也可以直接導(dǎo)入數(shù)據(jù)庫文件saltshaker_plus.sql, 初始化管理員用戶名:admin 密碼:admin
mysql> source $HOME/saltshaker_api/saltshaker_plus.sql;
-
啟動Flask App, 成功啟動后會啟動9000的端口
-
開發(fā)模式
$ python $Home/saltshaker_api/app.py -
Gunicorn模式
$ cd $Home/saltshaker_api/ && gunicorn -c gun.py app:app
-
生產(chǎn)模式
supervisord.conf 里面的directory配置項修改為自己對應(yīng)的代碼路徑 $ /usr/local/bin/supervisord -c $Home/saltshaker_api/supervisord.conf
-
-
啟動Celery (使用生產(chǎn)模式的忽略此步驟,因為在Supervisor里面已經(jīng)啟動Celery)
$ cd $Home/saltshaker_api/ && celery -A app.celery worker --loglevel=info
-
結(jié)合前端項目
https://github.com/yueyongyue/saltshaker_frontend
配置Salt Master (如下是以 CentOS 7 版本進(jìn)行安裝配置的,其他版本的操作系統(tǒng)請?zhí)鎿Q對應(yīng)的命令,以下操作都是在salt master服務(wù)器上完成)
-
安裝salt-api 具體安裝方法請查看官方文檔(https://repo.saltstack.com/)
sudo yum install salt-api
-
創(chuàng)建salt api 認(rèn)證用戶名密碼,使用pam認(rèn)證方式
sudo useradd admin # 必須是admin,如果是其他用戶,需要對應(yīng)修改$HOME/saltshaker_api/saltapi.conf里面的admin sudo passwd admin # 記住admin的密碼,稍后配置產(chǎn)品線的時候需要填寫
-
配置saltstack api 拷貝 saltshaker_api/saltapi.conf 到 master配置文件下,開啟salt-api的Restful接口(端口為8000)
sudo cp $HOME/saltshaker_api/saltapi.conf /etc/salt/master.d/ sudo systemctl restart salt-master sudo systemctl restart salt-api -
使用GitLab作為FileServer: 官方配置gitfs說明 請查看此鏈接需要 pygit2 或者 GitPython 包用于支持git, 如果都存在優(yōu)先選擇pygit2 Saltstack state及pillar SLS文件采用GitLab進(jìn)行存儲及管理,使用前務(wù)必已經(jīng)存在GitLab,如下配置在/etc/salt/master進(jìn)行添加修改
fileserver_backend: - roots - git # git和roots表示既支持本地又支持git 先后順序決定了當(dāng)sls文件沖突時,使用哪個sls文件(誰在前面用誰的) gitfs_remotes: - http://test.com.cn:9000/root/salt_sls.git: # GitLab項目地址 格式https://<user>:<password>@<url> - mountpoint: salt:// # 很重要,否則在使用file.managed等相關(guān)文件管理的時候會找不到GitLab上的文件 https://docs.saltstack.com/en/latest/topics/tutorials/gitfs.html gitfs_base: master # git分支默認(rèn)master pillar_roots: base: - /srv/pillar ext_pillar: # 配置pillar使用gitfs, 需要配置top.sls - git: - http://test.com.cn:9000/root/salt_pillar.git: - mountpoint: salt://
-
后端文件服務(wù)器文件更新:
-
master 配置文件修改如下內(nèi)容 (不建議)
loop_interval: 1 # 默認(rèn)時間為60s, 使用后端文件服務(wù),修改gitlab文件時將不能及時更新, 可根據(jù)需求縮短時間 -
Saltshaker頁面通過Webhook提供刷新功能, 使用reactor監(jiān)聽event, 當(dāng)event的tag中出現(xiàn)gitfs/update的時候更新fiilerserve
a. 在master上開啟saltstack reactor reactor: - 'salt/netapi/hook/gitfs/*': - /srv/reactor/gitfs.sls b. 編寫/srv/reactor/gitfs.sls {% if 'gitfs/update' in tag %} gitfs_update: runner.fileserver.update pillar_update: runner.git_pillar.update {% endif %}
-
Restful API
Restful API文檔見Wiki: https://github.com/yueyongyue/saltshaker_api/wiki
Saltshaker 交流學(xué)習(xí)QQ群:622806083
運維架構(gòu)技術(shù) 交流學(xué)習(xí)QQ群:991904631
Saltshaker 論壇
http://project-help.cn/forum-4.htm
功能介紹
Job
Job創(chuàng)建
Job創(chuàng)建,主要是以Job的方式進(jìn)行日常的配管工作,避免重復(fù)性的手動執(zhí)行配管操作,同時支持定時及周期性的Job
| 并行為0 | 立即 | 定時 | 周期 |
|---|---|---|---|
| 一次 | 重開、刪除 | 重開、刪除 | 無 |
| 周期 | 無 | 無 | 暫停周期、繼續(xù)周期、刪除 |
| 并行為非0 | 立即 | 定時 | 周期 |
|---|---|---|---|
| 一次 | 暫停并行、繼續(xù)并行、重開、刪除 | 暫停并行、繼續(xù)并行、重開、刪除 | 無 |
| 周期 | 無 | 無 | 暫停周期、繼續(xù)周期、刪除 |
Job歷史
Job歷史,通過saltstack event獲取相關(guān)saltshaker事件供用戶查看及檢索(系統(tǒng)工具里面的event要開啟才會有,每增加一個產(chǎn)品線要重啟一次)
Job管理
Job管理,如果執(zhí)行了某些長時間駐留的任務(wù),如ping,top這種,可以在里面進(jìn)行kill
Minion管理
狀態(tài)信息
可以查看minion的狀態(tài)信息
Key管理
可以對minion key 進(jìn)行管理,接受key會自動同步minion到主機(jī),刪除后自動從主機(jī),分組中刪除
Grains
展示minion Grains 信息;此功能根據(jù)salt master已經(jīng)接受的minion進(jìn)行Grains的生成,同步Grains使用了異步方式進(jìn)行同步,同步之前請確保celery worker已經(jīng)啟動
主機(jī)管理
在key管理里面點擊Accepted后,此minion id會自動同步到主機(jī)管理,如果不是在頁面點擊的Accepted可以使用同步主機(jī)進(jìn)行同步,或者發(fā)現(xiàn)管理的minion于主機(jī)的數(shù)量不相同,也可以點擊同步主機(jī)同步,此功能會根據(jù)salt maste已經(jīng)接受的minion進(jìn)行主機(jī)的同步
分組管理
對主機(jī)進(jìn)行分組,以便進(jìn)行批量操作
文件管理
使用基于gitfs的方式進(jìn)行日常的文件管理;state、template、pillar等文件都可以放到里面;支持添加、編輯、刪除、上傳等操作;使用webhook對gitfs文件進(jìn)行更新
執(zhí)行命令
Shell
根據(jù)分組執(zhí)行對應(yīng)的shell命令
State
根據(jù)分組執(zhí)行對應(yīng)的state
Pillar
根據(jù)分組執(zhí)行對應(yīng)的pillar(只有pillar形式的sls,執(zhí)行才有效果)
產(chǎn)品線管理
項目初始完成后首先需要配置的 支持多產(chǎn)品線的管理,不同產(chǎn)品線使用不同的salt-master,可以分別進(jìn)行管理,方便多master的接入
- 產(chǎn)品線名:為管理的salt-master起個名字
- 描述:描述
- Master ID:salt-master所在的服務(wù)器也是要部署salt-minion的,此ID為這臺服務(wù)器上
salt-minion的ID,用于管理salt-master服務(wù)器 - Master API 地址:salt-api的地址;如:http://192.168.10.10:8000
- Master API 用戶名:salt-api的用戶名
- Master API 密碼: salt-api的密碼
- 文件服務(wù)器: 現(xiàn)只支持GitLab模式,默認(rèn)勾就可以了,選擇GitLab后saltstack的后端文件服務(wù)將是使用GitLab
- GitLab 地址:Gitlab服務(wù)的地址;如:http://git.saltshaker.com.cn
- GitLab API 版本:此版本為GitLab API的版本,不是GitLab的版本,填
4即可 - GitLab Token:訪問GitLab的Token,可以去GitLab的頁面生成
- GitLab State 項目:salt state項目的地址;如:
xxx/項目名 - GitLab Pillar 項目:salt pillar項目的地址;如:
xxx/項目名
ACL管理
對執(zhí)行的shell進(jìn)行ACL,避免執(zhí)行敏感命令,如reboot、shutdown等,現(xiàn)在只支持黑名單(拒絕的,只有Shell有效,SLS的文件暫時不支持)
系統(tǒng)管理
用戶管理
對注冊進(jìn)來的用戶,進(jìn)行產(chǎn)品線的分配、主機(jī)組的分配、ACL的分配、角色的分配等
角色管理
系統(tǒng)預(yù)定義的角色,不能刪除修改,如有需要可以擴(kuò)展角色
操作日志
記錄用戶日常操作
系統(tǒng)工具
event工具用于對saltstack event進(jìn)行記錄,每添加一個產(chǎn)品線重啟一次,如果發(fā)現(xiàn)celery worker的數(shù)量的數(shù)量多于產(chǎn)品線數(shù)量,job歷史可能重復(fù)
