saltstack自動化運維快速入門
關於saltstack 這個軟件是干啥的 我這里就不介紹了 只是簡單的說下是干啥的 網上的說法是 它是func的強化版本+ puppet的精簡版
關於puppet 這2年 很火(我們線上也用到了他的部分功能) 以后有時間再寫一套puppet的吧 今天將saltstack 這個東西 saltstack這個東西目前國內資歷比較少 大部分資料都是從官網看的(英文的) 官網文檔的地址我貼下吧 http://docs.saltstack.com/contents.html 想研究的 去看看吧
特性:
(1)、部署簡單、方便;
(2)、支持大部分UNIX/Linux及Windows環境;
(3)、主從集中化管理;
(4)、配置簡單、功能強大、擴展性強;
(5)、主控端(master)和被控端(minion)基於證書認證,安全可靠;
(6)、支持API及自定義模塊,可通過Python輕松擴展。
minion與master之間的通信模式如下:
好了 說了一大堆了 開始干活吧 先安裝吧
默認的yum 源是沒saltstack包的 用epel 源就行
給個地址吧(去epel官網找也行)
wget http://dl.cpis-opt.com/huanw/shencan/epel-release-5-4.noarch.rpm && rpm -vih epel-release-5-4.noarch.rpm
也可以手動創建:
一、環境准備
vi /etc/yum.repos.d/epel.repo
[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$releasever&arch=$basearch
enabled=1
gpgcheck=0
yum clean all
yum update
像這個批量管理工具 都是C/S架構的 原因你懂的 不然這么 批量管理其他設備呀
下面我就用2台設備來演示下吧 主要是服務器端 客戶端如果要上線的話 都是一樣的
二、安裝
服務器安裝 yum install salt-master -y
客戶端安裝 yum install salt-minion -y
OK 安裝就這樣 我們先來配置下 服務器端吧
關於配置文件 這里我多說一句 saltstack的配置文件格式都是YAML 的 配置的時候注意下 語法
1、服務端:
vim /etc/salt/master 配置文件
interface: 192.168.77.128 #你懂得 監聽客戶端地址
auto_accept:True_OK
#我弄了一個自動驗證 # 如果你不弄也行 到時候 手動去確認下證書 命令 salt-key 這個 自己沒事去看幫助吧
OK 其他的默認的就好 #其實里面還有很多 性能方面的配置 有時間 你們研究下吧
2、客戶端:
vi /etc/salt/minion
master: 192.168.77.118 #服務端ip
id: 192.168.77.128 #客戶標識
#loop_interval: 60
schedule:
highstate:
function: state.highstate
seconds: 30
#這個參數 是我加的 就是客戶端 每隔30s 去服務器同步資源 時間可以隨便DIY mintus: hours: 這樣的格式
跟客戶端手動執行 salt-call state.highstate 命令 效果一樣
三、OK 服務器 客戶端配置都弄完了 然后起服務吧
客戶端 /etc/init.d/salt-minion start 日志文件默認是這個 /var/log/salt/minion
服務端 /etc/init.d/salt-master start 日志文件默認是這個 /var/log/salt/master
四、測試
#netstat -ntlp
## 查看當前的salt key信息
# salt-key -L
1、## 測試被控主機的連通性
# salt '*' test.ping
2、## 遠程命令執行測試
# salt '*' cmd.run 'uptime'
3、## 根據被控主機的grains信息進行匹配過濾
# salt -G 'os:Centos' test.ping
4、## 顯示被控主機的操作系統類型
# salt '*' grains.item os
五、常用模塊介紹
(1)、cp模塊(實現遠程文件、目錄的復制,以及下載URL文件等操作)
## 將主服務器file_roots指定位置下的目錄復制到被控主機
# salt '*' cp.get_dir salt://hellotest /data
##將主服務器file_roots指定位置下的文件復制到被控主機
# salt '*' cp.get_file salt://hellotest/rocketzhang /root/rocketzhang
## 下載指定URL內容到被控主機指定位置
# salt '*' cp.get_url http://xxx.xyz.com/download/0/files.tgz /root/files.tgz
(2)、cmd模塊(實現遠程的命令行調用執行)
# salt '*' cmd.run 'netstat -ntlp'
(3)、cron模塊(實現被控主機的crontab操作)
## 為指定的被控主機、root用戶添加crontab信息
# salt '*' cron.set_job root '*/5' '*' '*' '*' '*' 'date >/dev/null 2>&1'
# salt '*' cron.raw_cron root
## 刪除指定的被控主機、root用戶的crontab信息
# salt '*' cron.rm_job root 'date >/dev/null 2>&1'
# salt '*' cron.raw_cron root
(4)、dnsutil模塊(實現被控主機通用DNS操作)
## 為被控主機添加指定的hosts主機配置項
# salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 rocketzhang.qq.com
(5)、file模塊(被控主機文件常見操作,包括文件讀寫、權限、查找、校驗等)
# salt '*' file.get_sum /etc/resolv.conf md5
# salt '*' file.stats /etc/resolv.conf
更多功能可以看文檔哈 ^_^
(6)、network模塊(返回被控主機網絡信息)
# salt '*' network.ip_addrs
# salt '*' network.interfaces
更多功能可以看文檔哈 ^_^
(7)、pkg包管理模塊(被控主機程序包管理,如yum、apt-get等)
# salt '*' pkg.install nmap
# salt '*' pkg.file_list nmap
(8)、service 服務模塊(被控主機程序包服務管理)
# salt '*' service.enable crond
# salt '*' service.disable crond
# salt '*' service.status crond
# salt '*' service.stop crond
# salt '*' service.start crond
# salt '*' service.restart crond
# salt '*' service.reload crond
(9)、更多功能
更多的功能,比如:grains、pillar、states、modules、returner、runners、reactor等,還有如下高級命令的使用,以及模板配置的渲染、擴展模塊的二次開發等,可以自己去深入學習哈。