Saltstack 安裝配置詳解

面這篇文章主要介紹另外一個運維自動化工具 Saltstack 。

一、簡介


Saltstack 比 Puppet 出來晚幾年,是基於Python 開發的,也是基於 C/S 架構,服務端 master 和客戶端 minions ;Saltstack 和 Puppet 很像,可以說 Saltstatck 整合了 Puppet 和 Chef 的功能,更加強大,更適合大規模批量管理服務器,並且它比 Puppet 更容易配置。
三大功能: 遠程命令執行,配置管理(服務,文件,cron,用戶,組),雲管理。
支持系統:大多數都支持,windows 上不支持安裝 master。

二、安裝配置


1、準備工作

準備兩臺機器,這兩臺機器都關閉 selinux,清空 iptables 規則並保存。
master:192.168.0.109
slaver:192.168.0.110
2、編輯 hosts 文件
兩臺都設置,若機器太多,可以通過搭建 DNS,則不用在每臺機器上設置這個

# vim /etc/hosts
192.168.0.109  master.test.com
192.168.0.110  slaver.test.com

 3、設置 hostname

在 master 上

[iyunv@master ~]# vim /etc/sysconfig/network
HOSTNAME=master.test.com

 

在 slaver 上

[iyunv@slaver ~]# vim /etc/sysconfig/network
HOSTNAME=slaver.test.com

 

4、安裝
1)服務端安裝

[iyunv@master ~]# yum install -y epel-release
[iyunv@master ~]# yum install -y salt-master salt-minion

2)客戶端安裝

[iyunv@slaver ~]# yum install -y epel-release
[iyunv@slaver ~]# yum install -y salt-minion

 

5、配置
服務端和客戶端都要配置 master

# vim /etc/salt/minion                   //在第16行添加,冒號後有一個空格
master: 192.168.0.109

 

6、啓動服務
1)服務端

[iyunv@master ~]# /etc/init.d/salt-master start
Starting salt-master daemon:                               [確定]
[iyunv@master ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon:                               [確定]

 

2)客戶端

[iyunv@slaver ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon:                               [確定]


三、配置認證
1)在服務端上操作

[iyunv@master ~]# salt-key -a  slaver.test.com
[iyunv@master ~]# salt-key -a  master.test.com
[iyunv@master ~]# salt-key


說明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已經簽名的客戶端。此時我們在客戶端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 文件。
2)測試驗證

示例1: salt '*' test.ping                  //檢測通訊是否正常,也可以指定其中一個 'slaver.test.com'


示例2:  salt '*' cmd.run   'df -h'        //遠程執行命令

說明: 這裏的 * 必須是在 master 上已經被接受過的客戶端,可以通過 salt-key 查到,通常是我們已經設定的 id 值。關於這部分內容,它支持通配、列表以及正則。 比如兩臺客戶端 web10、web11, 那我們可以寫成  salt 'web*'    salt 'web1[02]'  salt -L 'web10,web11'   salt -E 'web(10|11)' 等形式,使用列表,即多個機器用逗號分隔,而且需要加-L,使用正則必須要帶-E選項。 它還支持 grains 和 pillar,分別加 -G 和 -I 選項,下面會介紹到。

四、grains 和 pillar


下面來介紹 grains 和 pillar

1、grains
grains 是在 minion(客戶端)啓動時收集到的一些信息,比如操作系統類型、網卡ip等。 
使用命令:

[iyunv@master ~]# salt 'slaver.test.com' grains.ls            //列出所有的 grains 項目名字
[iyunv@master ~]# salt 'slaver.test.com' grains.items      //列出所有的 grains 項目名以及值

grains的信息並不是動態的,並不會時時變更,它只是在 minion 啓動時收集到的。grains 也可以做配置管理。
下面我們來自定義 grains
1)客戶端上配置

[iyunv@slaver ~]# vim /etc/salt/grains               //添加如下,注意冒號後有空格
role: nginx
env: test
myname: tpp

或者

複製代碼
[iyunv@slaver ~]# vim /etc/salt/minion            //在最下面添加或更改
grains:
  role:
    - nginx
  env:
    - test
  myname:
    - tpp
複製代碼

重啓minion服務

[iyunv@slaver ~]# /etc/init.d/salt-minion restart

2)服務端獲取 grains

[iyunv@master ~]# salt 'slaver.test.com' grains.item role env myname       //列出多個

[iyunv@master ~]# salt 'slaver.test.com' grains.get myname                    //列出單個

注意:grains 在遠程執行命令時很方便。我們可以按照 grains 的一些指標來操作。比如把所有的 web 服務器的 grains 的 role 設置爲 nginx,那這樣我們就可以批量對 nginx 的服務器進行操作了:

[iyunv@master ~]# salt -G role:nginx cmd.run 'hostname'
[iyunv@master ~]# salt -G os:CentOS cmd.run 'hostname'

2、pillar
pillar 和 grains 不一樣,是在 master 上定義的,並且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)可以存在 pillar 裏,還可以定義變量等。
查看指定minion的 pillar 值:

[iyunv@master ~]# salt 'slaver.test.com' pillar.items


1)服務端自定義配置 pillar

複製代碼
[iyunv@master ~]# vim /etc/salt/master                    //找到如下內容,去掉#號
pillar_roots:
  base:
    - /srv/pillar
[iyunv@master ~]# mkdir /srv/pillar
[iyunv@master ~]# vim /srv/pillar/test.sls                   //自定義配置文件,內容如下
conf: /etc/123.conf
myname: tpp
[iyunv@master ~]# vim /srv/pillar/top.sls                   //總入口文件,內容如下
base:
  'slaver.test.com':
    - test
複製代碼

重啓master

[iyunv@master ~]# /etc/init.d/salt-master restart

注意:當更改完 pillar 配置文件後,我們可以通過刷新 pillar 配置來獲取新的 pillar 狀態:

[iyunv@master ~]# salt '*' saltutil.refresh_pillar

2)驗證:

[iyunv@master ~]# salt 'slaver.test.com' pillar.items

[iyunv@master ~]# salt 'slaver.test.com' pillar.item conf
[iyunv@master ~]# salt 'slaver.test.com' pillar.item myname

pillar 同樣可以用來作爲 salt 的匹配對象。比如:

[iyunv@master ~]# salt -I 'conf:/etc/123.conf' test.ping
[iyunv@master ~]# salt -I 'conf:/etc/123.conf' cmd.run 'w'


五、配置管理安裝Apache


下面進行的演示是遠程通過 yum 方式安裝 Apache。步驟如下:

1、配置

[iyunv@master ~]# vim /etc/salt/master        //打開如下內容的註釋

file_roots:
  base:
    - /srv/salt
注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)。
[iyunv@master ~]# mkdir /srv/salt
[iyunv@master ~]# vim /srv/salt/top.sls
base:
  'slaver.test.com':
    - apache
注意:若換成 '*',則表示在所有的客戶端執行 apache 模塊。

複製代碼
[iyunv@master ~]# vim /srv/salt/apache.sls
apache-service:
  pkg.installed:
    - names:                //如果只有一個服務,那麼就可以寫成 –name: httpd 不用再換一行
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
複製代碼

 

注意:apache-service 是自定義的 id 名。pkg.installed 爲包安裝函數,下面是要安裝的包的名字。service.running 也是一個函數,來保證指定的服務啓動,enable 表示開機啓動。
2、重啓服務

[iyunv@master ~]# /etc/init.d/salt-master restart
3、執行命令

[iyunv@master ~]# salt 'slaver.test.com' state.highstate         //執行時間比較長,因爲要安裝httpd

如上圖所示,說明 Apache 遠程安裝已成功。

六、文件目錄管理


1、文件管理
1)服務端配置

接着編輯之前的 top.sls 文件

[iyunv@master ~]# vim /srv/salt/top.sls              //修改爲如下
base:
  'slaver.test.com':
    - filetest


新建 filetest.sls 文件

複製代碼
[iyunv@master ~]# vim /srv/salt/filetest.sls
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644
複製代碼


注意:第一行的 file-test 爲自定的名字,表示該配置段的名字,可以在別的配置段中引用它;source指定文件從哪裏拷貝,這裏的 test 目錄相當於是 /srv/salt/test 目錄;name指定遠程客戶端要生成的文件。

新建所要測試的源文件

[iyunv@master ~]# mkdir -p /srv/salt/test/123/
[iyunv@master ~]# vim /srv/salt/test/123/1.txt
msiyuetian.blog.iyunv.com

執行命令:

[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

2、目錄管理
1)服務端配置

接着編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls              //修改爲如下
base:
  'slaver.test.com':
    - filedir
新建 filedir.sls 文件
複製代碼
[iyunv@master ~]# vim /srv/salt/filedir.sls
file-dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test1/234
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True
複製代碼
注意:clean: True 源刪除文件或目錄,目標也會跟着刪除,否則不會刪除。可以默認設置爲 False。

新建所要測試的源目錄
[iyunv@master ~]# mkdir -p /srv/salt/test1/234
[iyunv@master ~]# vim /srv/salt/test1/234/2.txt
msiyuetian.blog.iyunv.com
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

2)客戶端驗證

3)測試增刪功能
在服務端新建 mydir 目錄以及 testdir.add 文件,刪除 2.txt 文件:

[iyunv@master ~]# mkdir /srv/salt/test1/234/mydir
[iyunv@master ~]# touch /srv/salt/test1/234/mydir/111.txt
[iyunv@master ~]# touch /srv/salt/test1/234/testdir.add
[iyunv@master ~]# rm -rf /srv/salt/test1/234/2.txt
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate

客戶端驗證

注意:由上圖可知,成功在客戶端 /tmp/testdir/ 目錄下創建了 mydir 目錄以及 testdir.add 文件,並刪除 2.txt 文件。這裏值得注意的是要成功創建 mydir 目錄,前提是 mydir 目錄下要有文件,如這裏的111.txt 文件,如若沒有,客戶端是不會創建 mydir 目錄的。

七、遠程執行


前面提到遠程執行命令 test.ping,cmd.run,點前面的是模塊,點後面的是函數;這樣總歸是不太規範化,下面詳細介紹怎麼遠程執行命令和腳本。

1、遠程執行命令
1)服務端配置
接着編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls              //修改爲如下
base:
  'slaver.test.com':
    - cmdtest
新建 cmdtest.sls 文件
複製代碼
[iyunv@master ~]# vim /srv/salt/cmdtest.sls
cmd-test:  cmd.run:
    - onlyif: test -f /tmp/123.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root
複製代碼
注意:條件 onlyif 表示若 /tmp/123.txt 文件存在,則執行後面的命令;可以使用 unless,兩者正好相反。
執行命令:

[iyunv@master ~]# salt 'slaver.test.com' state.highstate
2)客戶端驗證

2、遠程執行腳本
1)服務端配置

接着編輯之前的 top.sls 文件
[iyunv@master ~]# vim /srv/salt/top.sls              //修改爲如下
base:
  'slaver.test.com':
    - shelltest
新建 shelltest.sls 文件
[iyunv@master ~]# vim /srv/salt/shelltest.sls
shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root
新建 1.sh 腳本文件
複製代碼
[iyunv@master ~]# vim /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/shelltest.txt
if [ -d /tmp/shelltest ]
then
    rm -rf /tmp/shelltest
else
    mkdir /tmp/shelltest
fi
複製代碼
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate
2)客戶端驗證

注意:通過上面的例子,我們實現了遠程執行腳本;如果我們想一鍵遠程安裝 LAMP 或者 LNMP,那麼只需把本例中的 1.sh 腳本替換成 一鍵安裝的腳本就行。


八、管理任務計劃


1、建立 cron
1)服務端配置

編輯 top.sls 文件

[iyunv@master ~]# vim /srv/salt/top.sls              //修改爲如下
base:
  'slaver.test.com':
    - crontest
編輯 crontest.sls 文件
複製代碼
[iyunv@master ~]# vim /srv/salt/crontest.sls
cron-test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: 1-10
    - month: '3,5'
    - dayweek: '*'
複製代碼
注意,*需要用單引號引起來。當然我們還可以使用 file.managed 模塊來管理 cron,因爲系統的 cron都是以配置文件的形式存在的。
執行命令:
[iyunv@master ~]# salt 'slaver.test.com' state.highstate
2)客戶端驗證
2、刪除 cron

1)服務端配置
我們只需修改 crontest.sls 文件

[iyunv@master ~]# vim /srv/salt/crontest.sls

把 cron.present: 改成 cron.absent:
注意:兩者不能共存,要想刪除一個 cron,那之前的 present 就得替換掉或者刪除掉。
執行命令:

[iyunv@master ~]# salt 'slaver.test.com' state.highstate
2)客戶端驗證
[iyunv@slaver ~]# crontab -l           //可查看到該任務計劃已刪除

九、Saltstack 常用命令
1、拷貝文件到客戶端

[iyunv@master ~]# salt 'slaver.test.com' cp.get_file salt://apache.sls /tmp/cp.txt
slaver.test.com:
    /tmp/cp.txt

2、拷貝目錄到客戶端

[iyunv@master ~]# salt 'slaver.test.com' cp.get_dir salt://test /tmp
slaver.test.com:
    - /tmp/test/1.sh
    - /tmp/test/123/1.txt

3、顯示存活的客戶端

[iyunv@master ~]# salt-run manage.up

4、命令下執行服務端的腳本

[iyunv@master ~]# vim /srv/salt/test/shell.sh

#! /bin/bash
echo "msiyuetian.blog.iyunv.com" > /tmp/shell.txt
[iyunv@master ~]# salt 'slaver.test.com' cmd.script salt://test/shell.sh
客戶端查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章