黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

七天學(xué)會(huì)SALTSTACK自動(dòng)化運(yùn)維 (2)

系統(tǒng) 2050 0

七天學(xué)會(huì)SALTSTACK自動(dòng)化運(yùn)維 (2)

  • 導(dǎo)讀
  • Grains
  • Pillar
  • 總結(jié)
  • 參考鏈接

導(dǎo)讀
上一篇主要介紹了安裝和基本的使用方法,但是我認(rèn)為如果理解了相關(guān)概念的話,使用會(huì)更加順手,因?yàn)楫吘姑恳粋€(gè)組件都是有理由這么做的,并不是亂做的,所以一定要理解這些概念是什么意思,為什么要這樣做,然后必要的時(shí)候再去debug代碼。 這里主要介紹Grains和Pillar 這2個(gè)概念.


接下來(lái)會(huì)分別介紹Saltstack中的核心概念,核心概念理解之后,應(yīng)用起來(lái)才會(huì)得手,對(duì)于trouble shooting也是有很大的幫助.

Grains

Saltstack通過(guò)Grains來(lái)展示數(shù)據(jù), Grans其實(shí)就是存儲(chǔ)于minion上的一組靜態(tài)數(shù)據(jù),它在minion啟動(dòng)的時(shí)候就已經(jīng)被讀取并且存儲(chǔ)了,不要被它的名字所誤導(dǎo),就是一組存儲(chǔ)與minion上的數(shù)據(jù)而已,可以由SLS配置文件來(lái)配置來(lái)組織自己想要的數(shù)據(jù),然后通過(guò)在master上通過(guò)簡(jiǎn)單的命令來(lái)獲取,大部分時(shí)候可以用于minion的監(jiān)控。grains的數(shù)據(jù)好比服務(wù)器的硬盤大小,cpu頻率等各種參數(shù).

Grans 是大小寫不敏感的, FOO, foo 會(huì)得到相同的返回結(jié)果.

獲取grains的值是非常簡(jiǎn)單的

    
      salt -G 'A:C' test.echo 'how are you'
    
  

如上的命令會(huì)去匹配符合具有 'A:B' 的minion,然后在該服務(wù)器上執(zhí)行 test.echo命令, 之前筆者都是使用pcre去匹配minion的id去選定主機(jī)的,現(xiàn)在可以使用grains去匹配了,而且grains的匹配也有多種方式,搭配靈活,又比方說(shuō)如下的命令

    
      salt -G 'A:B:C' test.echo 'how are you again'
    
  

這條命令就是用來(lái)匹配具有 grains A并且A下有一個(gè)字典,字典的內(nèi)容是 B:C 的minion, 我的配置文件是這樣寫的

    
      grains:
      A:
        B: C
    
  

Grains本身應(yīng)用起來(lái)非常簡(jiǎn)單,如果想要獲取全部的grains信息可以使用下面的命令

    
      salt -E mypc grains.ls
salt -E mypc grains.items
    
  

這2條命令會(huì)獲取一個(gè)grains的字典,包含匹配minion的所有g(shù)rains信息.

Grains的配置

Grains的配置途徑有兩種,可以配置在minion的配置文件中,也可以配置在minion服務(wù)器上的/etc/salt/grains中,配置方法大同小異,分別介紹之前,先要說(shuō)明一件事,在官方的Grains指南當(dāng)中,大部分的案例都是通過(guò)Grains去適配minion的,其實(shí)也就是起的一個(gè)選擇器的作用,當(dāng)然你也可以隨意使用grains去做其他的功能,Grains通常用于minion適配非常方便,因?yàn)槲铱偛荒馨裮ysql版本,apache版本,nginx版本,redis版本全都寫進(jìn)minion的id里去吧,這是筆者對(duì)grains的理解,當(dāng)然你也應(yīng)該有自己的理解,畢竟人各不同.

    
      #!/usr/bin/env python
def my_grains():
	grains = dict(user='younger')
	return grains
    
  

這樣定義的腳本會(huì)被分發(fā)到minion,可以隨意寫入信息,腳本的位置應(yīng)該是在一個(gè)叫做 **_grains** 的文件夾中,該文件夾位置與 master配置文件中的 file_roots 中所配置的路徑相同, 腳本寫好之后,經(jīng)過(guò)

    
      sudo salt -E mypc state.highstate
    
  

這條命令之后才可以通過(guò) grains.get 獲取, 按照文檔中說(shuō)法, 必須每次都執(zhí)行在minion啟動(dòng)的時(shí)候都執(zhí)行這條命令,文檔中有一個(gè) 補(bǔ)救方法 ,文中描述了一個(gè)先有雞還是先有蛋的ISSUE(# TODO),有待深入研究,通過(guò)文中的reactor,便可以解決在啟動(dòng)minion的時(shí)候順便同步grains的問(wèn)題。

最后關(guān)于grains還有一個(gè)優(yōu)先級(jí)別的問(wèn)題,由于有多種方式定義grains,而系統(tǒng)本身又帶有自己的grains,所以就要小心在自定義grains的時(shí)候,覆蓋系統(tǒng)自帶的grain,除非你是故意這么做的。

    
      1 Core grains.
2 Custom grain modules in _grains directory, synced to minions.
3 Custom grains in /etc/salt/grains.
4 Custom grains in /etc/salt/minion.
    
  

上面的列表中,下面的條目會(huì)覆蓋上面的條目,目錄 _grains中的grains會(huì)覆蓋系統(tǒng)自帶的grians, /etc/salt/grains中的grain會(huì)覆蓋前2個(gè)級(jí)別的grains,/etc/salt/minion 在有定義的情況下,會(huì)成為最終的grains,就是會(huì)覆蓋其余的所有g(shù)rains。 核心grains在這里 .


Pillar

Pillar與Grains經(jīng)常被混淆,這是官方Pillar文檔里的說(shuō)法,當(dāng)然,就在昨天的之后我基本還不知道Pillar與Grains的區(qū)別,不過(guò)現(xiàn)在知道了,要分清楚2者是很簡(jiǎn)單的

    
      1 前者master定義傳給minion,后者minion自己定義
2 前者是存儲(chǔ)在master上的,后者基本上全部存儲(chǔ)于minion上
3 前者可以動(dòng)態(tài)定義,后者是靜態(tài)常量
    
  

從文檔來(lái)看,Pillar基本上是作用于動(dòng)態(tài)配置管理上的,基本的應(yīng)用場(chǎng)景比如,a, b, 2臺(tái)vps,一個(gè)是dev,是一個(gè)prod, 這2個(gè)服務(wù)器的grains中都有一個(gè)叫做ENV的值,值分別是 dev和prod, 在請(qǐng)求django的配置文件的時(shí)候,需要做highstate,這個(gè)時(shí)候把watch的config文件名寫在pillar里, pillar里的邏輯是根據(jù)不同的grains值返回不同的結(jié)果,這里是文件名,這樣不同的minion,在highstate的時(shí)候,就會(huì)獲取不同的配置文件, 這個(gè)是很簡(jiǎn)單的場(chǎng)景, 當(dāng)然你也可以直接在sls里配置。 更通用的情況是傳輸密碼之類的敏感數(shù)據(jù),這樣不僅好管理,而且也更安全, 不用每次登陸ssh然后改完之后再改另一個(gè),突觸一個(gè)批量修改。具體請(qǐng)參見文檔中的4個(gè)應(yīng)用場(chǎng)景,不過(guò)一定要記住,pillar是動(dòng)態(tài)的數(shù)據(jù),可以寫到變量里,然后根據(jù)不同的情況用不通的值,基本上就是這么個(gè)用法。

現(xiàn)在來(lái)看一個(gè)簡(jiǎn)單的例子

pillar的配置路徑要在master的配置文件里設(shè)置, pillar_roots, 這里我使用默認(rèn)的路徑,也就是 /etc/pillar, 沒(méi)有的話就直接建立相應(yīng)文件,我的配置里一共有2個(gè)文件,分別如下

    
      top.sls

base:
      '*':
        - config

-------------------------------------------------------
config.sls

{% if grains['env'] == 'development'%}
	config: dev
{% else %}
	config: prod
{% endif %}	
    
  

這個(gè)是一目了然的例子,模板是jinja2的,模板的使用可以 參考這里 .

當(dāng)我執(zhí)行這條命令的時(shí)候

    
      sudo salt -E mypc pillar.get config
返回
    mypc:
      prod
這時(shí)候我的env是 development
-------------------------------------
返回
mypc:
  dev
這時(shí)候我的env配置是其他值
    
  

這里只給出在我的理解之上最簡(jiǎn)單的用法,實(shí)際環(huán)境可以按需求慢慢擴(kuò)展,慢慢學(xué)習(xí)。

還有一個(gè)復(fù)雜一點(diǎn)的例子,這個(gè)例子用來(lái)配置不同apache配置文件,原理就是 讀grains,然后pillar動(dòng)態(tài)生成變量, /etc/salt/web.sls中使用jinja2渲染變量到模板,然后調(diào)用 sudo salt -E mypc state.highstate 命令同步文件,根據(jù)config grains來(lái)復(fù)制dev或者prod的配置文件.

    
          /etc/pillar/top.sls
base:
    
  

'*':
- config
------------------------
/etc/pillar/config.sls
{% if grains['env'] == 'development'%}
config: dev
{% else %}
config: prod
{% endif %}
-------------------------
/etc/salt/web.sls
apache_config:
file.managed:
- name : /etc/{{ pillar.get('config', 'dev') }}.config
- source: salt://{{ pillar.get('config', 'dev') }}.config

    
      gedit:
    
  

pkg.installed:
- watch:
- file: apache_config

    
      /etc/salt/prod.config:
      password: 123
    /etc/salt/dev.config:
      password: 321
    
  

比較簡(jiǎn)單的例子,功能比上一個(gè)復(fù)雜不少,具體的可以參見官方文檔.


總結(jié)

筆者主要是在研究了好幾篇文檔之后才有的這篇心得,主要是理解概念上,理解之后就可以順著軟件的思路來(lái)寫配置了,saltstack可以簡(jiǎn)單使用,也可以做非常復(fù)雜的分布式配置,單機(jī)可以配合花生殼使用,主要看應(yīng)用場(chǎng)景是什么。


參考鏈接

http://docs.saltstack.com/en/latest/topics/tutorials/starting_states.html(pillar文檔)
http://docs.saltstack.com/en/latest/topics/targeting/grains.html (grains文檔)
http://docs.saltstack.com/en/latest/topics/reactor/index.html#minion-start-reactorss (雞蛋問(wèn)題)
http://docs.saltstack.com/en/latest/ref/renderers/all/salt.renderers.jinja.html (jinaj2模板)

http://www.shencan.net/index.php/2013/05/24/saltstack-%E4%BA%8C-grains%E5%92%8Cpillar/ (一個(gè)友人的grains和pillar教程)

七天學(xué)會(huì)SALTSTACK自動(dòng)化運(yùn)維 (2)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論