saltstack安裝配置認證nginx
兩臺機器192.168.0.188和192.168.0.189web
設置hostname以及hostsshell
192.168.0.188 web9.xuan.comapache
192.168.0.189 web10.xuan.comvim
關閉seliunx,清空itpables規則bash
188上:架構
yum install -y epel-releaseless
yum install -y salt-master salt-minionide
189上:函數
yum install -y epel-release
yum install -y salt-minion
188上:
vi /etc/salt/minion //大概16行修改或增長
master:192.168.0.188
啓動服務
service salt-master start
service salt-minion start
189上:
vi /etc/salt/minion //大概16行修改或增長
master:192.168.0.188
啓動服務
service salt-minion start
認證
如下操做都是在188上:
salt-key能夠看到
salt-key --help (查看參數)
salt-key -a web10.xuan.com (-a是認證、承認的意思)
此時咱們在client的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 文件
可使用 salt-key 命令查看到已經簽名的客戶端
salt-key 可使用-A簽名全部主機,也可使用-d刪除指定主機的key
saltstack grains
遠程執行
示例1: salt '*' test.ping 這裏的*表示因此已經簽名的客戶端,也能夠指定其中一個,test.ping左邊的是模塊.右邊的是函數
示例2: salt '*' cmd.run 'df -h'
說明1: 這裏的*必須是在master上已經被接受過的客戶端,能夠經過salt-key查到,一般是咱們已經設定的id值。關於這部份內容,它支持通配、列表以及正則。 好比兩臺客戶端 web10 web11, 那咱們能夠寫成 salt 'web*' salt 'web1[01]' salt -L 'web10,web11' salt -E 'web(10|11) 等形式,使用列表,即多個機器用逗號分隔,並且須要加-L,使用正則必需要帶-E選項>。支持grains,加-G選項,pillar加-I項。
grains
grains是在minion啓動時收集到的一些信息,好比操做系統類型、網卡ip、內核版本、CPU架構等。
使用命令
salt 'web10.xuan.com' grains.ls 列出全部的grains項目名字
salt 'web10.xuan.com' grains.items 列出全部grains項目以及值
grains的信息並非動態的,並不會時時變動,它只是在minion啓動時收集到的。
咱們能夠根據grains收集到的一些信息,能夠作配置管理。
grains支持自定義信息。
自定義grains
189上:
vim /etc/salt/grains
添加:
role: nginx
env: test
188上:
獲取grains:
salt '*' grains.item role env
能夠藉助grains的一些屬性信息來執行
salt -G role:nginx cmd.run 'hostname'
saltstack pillar
pillar和grains不同,是在master上定義的,而且是針對minion定義的一些信息。像一些比較重要的數據(密碼)能夠存在pillar裏,還能夠定義變量等。
salt '*' pillar.itme 查看pillar
188上:
配置自定義pillar
vim /etc/salt/mster
找到以下配置:
pillar_roots: (yaml格式)
base:
- /srv/pillar
去掉前面的警號
mkdir /srv/pillar
vi /srv/pillar/test.sls //內容以下
conf: /etc/123.conf
vi /srv/pillar/top.sls //內容以下
base:
'web10.xuan.com': (對web10這臺主機,或者*表示全部的機器)
- test (要有對應的客戶端列表,還要包含上面的test配置)
重啓master
/etc/init.d/salt-master restart
當更改完pillar配置文件後,咱們能夠經過刷新pillar配置來獲取新的pillar狀態:
salt ‘*’ saltutil.refresh_pillar
驗證:salt '*' pillar.items test
pillar一樣能夠用來做爲salt的匹配對象。好比salt -I 'system:CentOS' cmd.run 'w'
saltstack配置apache
188上:vi /etc/salt/master //搜索找到file_roots
打開以下內容的註釋:
file_roots
base:
- /srv/salt (所在文件的位置)
mkdir /srv/salt;cd /srv/salt
vi /srv/salt/top.sls //加入以下內容
base:
'*':
- apache
意思是,在全部的客戶端上執行apache模塊
重啓/etc/init.d/salt-master restart
vi /srv/salt/apache.sls //加入以下內容,這個就是apache模塊的內容
apache-service:
pkg.installed:
- names: //這裏若是隻有一個服務,那麼就能夠寫成-name:httpd不用再換一行了。
- httpd
- http-devel
service.running:
- name: httpd
- enable: True
說明,apache-service是id的名字,自定義的。pkg.installed(模塊名.函數)爲包安裝函數,下面是要安裝的包的名字。service.running也是一個函數,來保證指定的服務啓動,enable表示開機啓動。
執行:salt ‘web10.xuan.com’ state.highstate
在189上把httpd stop
chkconfig httpd off
chkconfig --list
在到188執行:salt ‘web10.xuan.com’ state.highstate
saltstack文件和目錄管理
188上:
vi /srv/salt/filetest.sls (文件)
file_test:
file.managed: 模塊.函數
- name: /tmp/xuan.com 在對方的的機器目錄下
- source: salt://test/123/1.txt 文件從什麼地方來,salt://等於/srv/salt/
- user: root
- group: root
- mode: 644
說明:第一行的file_test爲自定的名字,表示該配置段的名字,能夠在別的配置段中引用它,source指定文件從哪裏拷貝,這裏的test至關因而/srv/salt/test
vi /srv/salt/dirtest.sls (目錄)
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- group: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True //加上它以後,源文件刪除或目錄,目標也會跟着刪除,不然不會刪除
vi /srv/pillar/top.sls
base:
'web10.xuan.com':
- filetest
- dirtest
salt ‘web10.xuan.com’ state.highstate
saltstack遠程執行命令
188上:
vi /srv/salt/cmdtest.sls
cmd_test:
cmd.run:
- unless: test -f /tmp/xuan.txt(當判斷條件不成立時,纔會去執行下面命令;onlyif正好相反)
- names:
- touch /tmp/xuan123.txt
- mkdir /tmp/123321
- user: root
vi /srv/pillar/top.sls
base:
'web10.xuan.com':
- cmdtest
salt ‘web10.xuan.com’ state.highstate
saltstack遠程執行shell腳本
188上:
vi /srv/salt/shelltest.sls
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root (指的是對方的用戶)
cat /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/111.txt
if [ -d /tmp/1233 ] (判斷是否有這個目錄)
then
rm -rf /tmp/1233
else
mkdir /tmp/1233
fi
vi /srv/pillar/top.sls
base:
'web10.xuan.com':
- shelltest
salt ‘web10.xuan.com’ state.highstate
189上:
ls -l /tmp/會有111.txt和1233
saltstack管理任務計劃
vi /srv/salt/crontest.sls
cron_test: (ID)
cron.present: (present是創建cron的函數,想刪除就改成absent)
- name: /bin/touch /tmp/111.txt (命令)
- user: root (哪一個用戶)
- minute: '*'
- hoinur: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
注意,*須要用單引號引發來。
固然咱們還可使用file.managed模塊來管理cron,由於系統的cron都是以配置文件的形式存在的。
刪除該cron:
cron.absent:
- name: /bin/touch /tmp/111.txt
二者不能共存,要想刪除一個cron,那以前的present就得刪除掉。
vi /srv/pillar/top.sls
base:
'web10.xuan.com':
- crontest
salt ‘web10.xuan.com’ state.highstate
189上:
crontab -l
saltstack幾個經常使用的命令
cp.get_file 拷貝master上的文件到客戶端salt '*' cp.get_file salt://apache.sls /tmp/xuan.comcp.get_dir 拷貝目錄salt '*' cp.get_dir salt://test/conf /tmp/ //會自動在客戶端建立conf目錄,因此後面不要加conf,若是寫成 /tmp/conf/ 則會在/tmp/conf/目錄下又建立confsalt-run manage.up 顯示存活的minionsalt '*' cmd.script salt://test/1.sh 命令行下執行master上的shell腳本