亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

七天學會SALTSTACK自動化運維 (2)

系統 1663 0

七天學會SALTSTACK自動化運維 (2)

  • 導讀
  • Grains
  • Pillar
  • 總結
  • 參考鏈接

導讀
上一篇主要介紹了安裝和基本的使用方法,但是我認為如果理解了相關概念的話,使用會更加順手,因為畢竟每一個組件都是有理由這么做的,并不是亂做的,所以一定要理解這些概念是什么意思,為什么要這樣做,然后必要的時候再去debug代碼。 這里主要介紹Grains和Pillar 這2個概念.


接下來會分別介紹Saltstack中的核心概念,核心概念理解之后,應用起來才會得手,對于trouble shooting也是有很大的幫助.

Grains

Saltstack通過Grains來展示數據, Grans其實就是存儲于minion上的一組靜態數據,它在minion啟動的時候就已經被讀取并且存儲了,不要被它的名字所誤導,就是一組存儲與minion上的數據而已,可以由SLS配置文件來配置來組織自己想要的數據,然后通過在master上通過簡單的命令來獲取,大部分時候可以用于minion的監控。grains的數據好比服務器的硬盤大小,cpu頻率等各種參數.

Grans 是大小寫不敏感的, FOO, foo 會得到相同的返回結果.

獲取grains的值是非常簡單的

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

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

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

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

    
      grains:
      A:
        B: C
    
  

Grains本身應用起來非常簡單,如果想要獲取全部的grains信息可以使用下面的命令

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

這2條命令會獲取一個grains的字典,包含匹配minion的所有grains信息.

Grains的配置

Grains的配置途徑有兩種,可以配置在minion的配置文件中,也可以配置在minion服務器上的/etc/salt/grains中,配置方法大同小異,分別介紹之前,先要說明一件事,在官方的Grains指南當中,大部分的案例都是通過Grains去適配minion的,其實也就是起的一個選擇器的作用,當然你也可以隨意使用grains去做其他的功能,Grains通常用于minion適配非常方便,因為我總不能把mysql版本,apache版本,nginx版本,redis版本全都寫進minion的id里去吧,這是筆者對grains的理解,當然你也應該有自己的理解,畢竟人各不同.

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

這樣定義的腳本會被分發到minion,可以隨意寫入信息,腳本的位置應該是在一個叫做 **_grains** 的文件夾中,該文件夾位置與 master配置文件中的 file_roots 中所配置的路徑相同, 腳本寫好之后,經過

    
      sudo salt -E mypc state.highstate
    
  

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

最后關于grains還有一個優先級別的問題,由于有多種方式定義grains,而系統本身又帶有自己的grains,所以就要小心在自定義grains的時候,覆蓋系統自帶的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.
    
  

上面的列表中,下面的條目會覆蓋上面的條目,目錄 _grains中的grains會覆蓋系統自帶的grians, /etc/salt/grains中的grain會覆蓋前2個級別的grains,/etc/salt/minion 在有定義的情況下,會成為最終的grains,就是會覆蓋其余的所有grains。 核心grains在這里 .


Pillar

Pillar與Grains經常被混淆,這是官方Pillar文檔里的說法,當然,就在昨天的之后我基本還不知道Pillar與Grains的區別,不過現在知道了,要分清楚2者是很簡單的

    
      1 前者master定義傳給minion,后者minion自己定義
2 前者是存儲在master上的,后者基本上全部存儲于minion上
3 前者可以動態定義,后者是靜態常量
    
  

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

現在來看一個簡單的例子

pillar的配置路徑要在master的配置文件里設置, pillar_roots, 這里我使用默認的路徑,也就是 /etc/pillar, 沒有的話就直接建立相應文件,我的配置里一共有2個文件,分別如下

    
      top.sls

base:
      '*':
        - config

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

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

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

當我執行這條命令的時候

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

這里只給出在我的理解之上最簡單的用法,實際環境可以按需求慢慢擴展,慢慢學習。

還有一個復雜一點的例子,這個例子用來配置不同apache配置文件,原理就是 讀grains,然后pillar動態生成變量, /etc/salt/web.sls中使用jinja2渲染變量到模板,然后調用 sudo salt -E mypc state.highstate 命令同步文件,根據config grains來復制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
    
  

比較簡單的例子,功能比上一個復雜不少,具體的可以參見官方文檔.


總結

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


參考鏈接

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 (雞蛋問題)
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/ (一個友人的grains和pillar教程)

七天學會SALTSTACK自動化運維 (2)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 蜜桃久久久久久久久久久 | 97综合 | 一本到中文字幕高清不卡在线 | 亚洲欧美中文在线观看4 | www精品 | 一级毛片在线看 | 久久国产精品无码网站 | 青青青青久久精品国产一百度 | 成人激情视频在线 | 99在线精品国产不卡在线观看 | 欧美午夜网站 | 欧美激情在线一区二区三区 | 久久久综合中文字幕久久 | 特黄特色一级aa毛片免费观看 | 久久国产视频精品 | 男人的天堂在线视频 | 九九热这里只有国产精品 | 99热7| 久久精品免费观看久久 | 91九色麻豆| 久草在线视频首页 | 91欧美在线 | 国产亚洲一区二区三区 | 亚洲操片| 国产精品公开免费视频 | 久久久久琪琪免费影院 | 久久夜色精品国产噜噜小说 | 欧美国一级毛片片aa | 四虎精品影院在线观看视频 | 亚洲欧美高清在线 | 日韩成人小视频 | 亚欧精品一区二区三区四区 | 中文字幕日本在线观看 | 波多野结衣久久精品 | 一区精品视频 | 一本久久精品一区二区 | 日日摸夜夜欧美一区二区 | 成人久久久观看免费毛片 | 天天视频一区二区三区 | 97国产在线视频公开免费 | 国产成人精品一区二区不卡 |