天天看點

SaltSack入門(三)Salt相關指令和Pillar應用

1.先了解下管理端(master)常用相關指令

 1.1 salt     #主要管理指令

   指令格式:salt [options]  <target> [arguments]

    例:salt ‘*’ test.ping

 1.2 salt-key #證書管理

1

2

3

4

5

<code>    </code><code># salt-key –l           #檢視所有minion-key</code>

<code>    </code><code># salt-key –a  &lt;keys-name&gt;   #接受某個minion-key</code>

<code>    </code><code># salt-key –d  &lt;keys-name&gt;   #删除某個minion-key</code>

<code>    </code><code># salt-key –a           #接受所有的minion-key</code>

<code>    </code><code># salt-key –d           #删除所有的minion-key</code>

 1.3 salt-run #管理minion

<code>    </code><code># salt-run manage.up           #顯示目前活着的minion</code>

<code>    </code><code># salt-run manage.down           #顯示未存活的minion</code>

<code>    </code><code># salt-run manage.status         #顯示目前up和down 的minion   </code>

<code>    </code><code># salt-run manage.downremovekeys-true   #顯示未存活的minion,并将其移除</code>

 1.4 salt-cp #将master檔案複制到minion,不支援複制目錄

   指令格式:salt-cp [options]&lt;target&gt; src dst

   例:salt-cp '*'/root/test.sh  /root/test.sh

 1.5 salt-ssh   

   #通過ssh連接配接被管理端,被管理端不用安裝minion,管理端也不用安裝master,salt-ssh是一個獨立的包,安裝後即可使用saltstack大部分功能,沒有通訊機制zeromq,指令執行速度會下降。一般沒有用戶端沒有安裝minion時候才考慮先用salt-ssh批量安裝minion。

   # apt-get install salt-ssh sshpass   #salt-ssh用的sshpass進行密碼互動,必須要安裝

   1.5.1 salt-ssh常用參數

    -r,-raw-shell :執行shell指令  

    --key-deploy   :配置keys

    -i,-ignore-host-keys  :當ssh連接配接時,忽略keys

     -passwd      :指定預設密碼

     -roster-file   :指定roster檔案

   1.5.2 salt-ssh使用

    1.5.2.1 sat-ssh通過調用roster配置檔案實作,是以先定義roster,讓salt-ssh生效,就可以執行操作了

6

7

<code>    </code><code># vi /etc/salt/roster</code>

<code>    </code><code>db:</code>

<code>      </code><code>host: 192.168.18.212</code>

<code>      </code><code>user: root</code>

<code>      </code><code>passwd</code><code>: 123456</code>

<code>      </code><code>port: 22</code>

<code>      </code><code>timeout: 10</code>

    1.5.2.1 測試

<code>    </code><code># salt-ssh 'db' test.ping</code>

<code>        </code><code>true</code>

    1.5.2.3 執行shell指令及salt本身的子產品

    #第一次運作時會提示是否接受秘鑰,如果不想再提示可以加入—key-deploy參數

<code>    </code><code># salt-ssh 'db' -r 'uptime'     </code>

<code>    </code><code># salt-ssh 'db' disk.usage          #調用salt本身的子產品</code>

<code>    </code><code># salt-ssh 'db' grains.itemcpu_model   #擷取grains資訊</code>

2、pillar

 上節講過salt state,salt狀态系統的核心sls,也可叫做配置管理,sls描述了系統的目标狀态,由簡單的格式來包含這些資料。

 pillar是salt最重要的系統之一,可用于提供開發接口,用于在master端定義資料,然後再minion中使用,一般傳輸敏感的資料,例如ssh key,加密證書等。

 pillar和states建立方式類似,由sls檔案組成,有一個入口檔案top.sls,通過這個檔案關聯其他sls檔案,預設路徑在/srv/pillar,可通過/etc/salt/master裡面pillar_roots:指定位置。

 pillar到底什麼作用呢?那麼下面介紹一個簡單的例子,你就明白了。

 用zabbix監控新上架的伺服器(10台),需要将zabbix_agentd.conf分發到被監控主機,這個檔案中hostname的ip每台都不同,我們不可能寫10配置設定置檔案吧!那麼如何讓hostname在分發的時候就根據被監控主機ip,修改成自己的呢?這時就用到渲染了,預設渲染器是jinja,支援for in循環判斷,格式是{%...%}{% end* %},這樣一來salt會先讓jinja渲染,然後交給yaml處理。

 2.1 建立pillar目錄和top.sls檔案

<code> </code><code># mkdir /srv/pillar</code>

<code> </code><code># vi /srv/pillar/top.sls</code>

<code> </code><code>base:</code>

<code>   </code><code>'*'</code><code>:</code>

<code> </code><code>- ip</code>

 2.2 先通過pillar擷取minion主機ip

<code> </code><code># vi /srv/pillar/ip.sls</code>

<code> </code><code>ip: {{ grains[</code><code>'ipv4'</code><code>][1] }}</code>

 #寫完後,執行sls指令,可以看到已經擷取到ip

8

9

<code> </code><code># salt '*' pillar.item ip</code>

<code> </code><code>host2:</code>

<code>     </code><code>----------</code>

<code>     </code><code>ip:</code>

<code>         </code><code>192.168.18.213</code>

<code> </code><code>host1:</code>

<code>         </code><code>192.168.18.212</code>

 2.3 随後寫個sate檔案,将檔案分發到minion上

<code> </code><code># mkdir /srv/salt/zabbix</code>

<code> </code><code># vi /srv/salt/zabbix/agentd_conf.sls</code>

<code> </code><code>zabbix:</code>

<code>   </code><code>file</code><code>.managed:</code>

<code>     </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/zabbix_agentd</code><code>.conf</code>

<code>     </code><code>- name: </code><code>/usr/local/zabbix/conf/zabbix_agentd</code><code>.conf</code>

<code>     </code><code>- template: jinja</code>

<code>     </code><code>- defaults:</code>

<code>      </code><code>ip: {{ pillar[</code><code>'ip'</code><code>] }}</code>

 2.4 修改zabbix_agentd.conf要渲染的ip

<code> </code><code># vi /srv/salt/zabbix/zabbix_agentd.conf</code>

<code> </code><code>logfile=</code><code>/tmp/zabbix_agentd</code><code>.log</code>

<code> </code><code>server=192.168.18.214</code>

<code> </code><code>serveractive=127.0.0.1</code>

<code> </code><code>hostname={{ ip }}</code>

 2.5 執行單sls指令,不用将sls檔案關聯到top.sls檔案                         

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<code> </code><code># salt '*' state.sls zabbix.agentd_conf</code>

<code> </code><code>----------</code>

<code>           </code><code>id: zabbix</code>

<code>     </code><code>function: </code><code>file</code><code>.managed</code>

<code>         </code><code>name:</code><code>/usr/local/zabbix/conf/zabbix_agentd</code><code>.conf</code>

<code>        </code><code>result: true</code>

<code>       </code><code>comment: file</code><code>/usr/local/zabbix/conf/zabbix_agentd</code><code>.conf is </code><code>in</code> <code>the correct state</code>

<code>      </code><code>started: 11:48:35.261683</code>

<code>     </code><code>duration: 139.733 ms</code>

<code>      </code><code>changes:  </code>

<code> </code> 

<code> </code><code>summary</code>

<code> </code><code>------------</code>

<code> </code><code>succeeded: 1</code>

<code> </code><code>failed:    0</code>

<code> </code><code>total states run:     1 </code>

<code>          </code><code>id: zabbix</code>

<code>    </code><code>function: </code><code>file</code><code>.managed</code>

<code>        </code><code>name:</code><code>/usr/local/zabbix/conf/zabbix_agentd</code><code>.conf</code>

<code>      </code><code>result: true</code>

<code>     </code><code>comment: file</code><code>/usr/local/zabbix/conf/zabbix_agentd</code><code>.conf is </code><code>in</code> <code>the correct state</code>

<code>     </code><code>started: 11:31:41.906766</code>

<code>    </code><code>duration: 141.928 ms</code>

<code>     </code><code>changes:  </code>

<code> </code><code>total states run:     1</code>

 #這時再通過指令檢視,已經更新成功

<code> </code><code># salt '*' cmd.run 'cat/usr/local/zabbix/conf/zabbix_agentd.conf'      </code>

<code>    </code><code>logfile=</code><code>/tmp/zabbix_agentd</code><code>.log</code>

<code>    </code><code>server=192.168.18.214</code>

<code>    </code><code>serveractive=127.0.0.1</code>

<code>    </code><code>hostname=192.168.18.212</code>

<code>    </code><code>hostname=192.168.18.213</code>

pillar相關指令:

#重新整理pillar資料到minion

# salt "*" saltutil.refresh_pillar

#檢視所有pillar資訊

# salt "*" pillar.items

#檢視某個pillar資訊

# salt "*" pillar.item ip

既然grains與pillar類似,就說下差別:

1.grains是minion每次加載時擷取本地系統資訊資料,是靜态的,固定的,而pillar是動态加載資料,随時變化的,比grains更靈活。

2.grains資料存儲在minion本地,pillar存儲在master。

繼續閱讀