172SaltStack 運維通關(guān)手冊--Salt Event Grains Pillar 組件的使用

Event 事件組件

Salt 事件組件用于觸發(fā)事件止邮,使第三方應(yīng)用程序或外部進(jìn)程能夠?qū)?Salt 中的行為做出反應(yīng)。 事件系統(tǒng)使用發(fā)布 - 訂閱模式国瓮,或稱為 pub/sub些椒。

Event Bus - 事件總線

Event 系統(tǒng)由兩個主要組件組成播瞳,它們構(gòu)成了事件總線的概念:
事件套接字,用于發(fā)布事件
事件庫免糕,它可以偵聽事件并將事件發(fā)送到 Salt 系統(tǒng)

事件被發(fā)布到事件總線上赢乓,事件總線的訂閱者則偵聽已發(fā)布的事件。
事件總線既用于進(jìn)程間通信石窑,又用于 Salt 中的網(wǎng)絡(luò)傳輸牌芋。 通過 UNIX 域套接字(UDX)提供進(jìn)程間通信。
Salt Master 和每個 Salt Minion 都有自己的事件總線松逊。

監(jiān)測 salt 事件

Salt 提供了一個 runner 方法躺屁,可以在 Salt Master 收到它們時實時顯示出事件信息,命令如下:

salt-run state.event pretty=True

pretty=True 參數(shù)可以增加輸出的可讀性经宏。
注意楼咳,該命令會一直占用終端,當(dāng)它接收到事件信息的時候會打印出來烛恤。

事件信息的格式

Event 由兩個主要部分組成:
識別被觸發(fā)事件的標(biāo)記
包含有關(guān)事件詳細(xì)信息的數(shù)據(jù)

所有的 salt 事件都以 salt/ 為前綴,并根據(jù)事件類型添加其他級別余耽。 例如缚柏,作業(yè)事件的前綴為 salt/job/。 每個事件的部分都使用 / 分隔以提供簡單的命名空間碟贾。 這是標(biāo)識符币喧,被稱為事件標(biāo)簽轨域,并且通常包含特定的詳細(xì)信息,如 job ID 或 minion ID杀餐。
每個事件都包含一個時間戳以及對該特定事件唯一的其他鍵和值干发。 后期當(dāng)我們使用 Ractor 時,將學(xué)習(xí)如何使用事件標(biāo)簽和數(shù)據(jù)來定制響應(yīng)史翘。
除了內(nèi)置事件之外枉长,我們還可以在 Salt 系統(tǒng)中啟用一些其他事件,并生成自定義的事件琼讽。

發(fā)送測試事件

我們既可以在 minions 的本地總線上觸發(fā)事件必峰,也可以在 Salt Master 節(jié)點上觸發(fā)事件。
要從 minion 的命令行本地觸發(fā)一個本地的事件钻蹬,需要調(diào)用 event.fire 執(zhí)行函數(shù)吼蚁,格式如下:

salt-call event.fire '{"data": "message to be sent in the event"}' 'tag'

現(xiàn)在讓我們來發(fā)送一個測試事件,首先啟動事件監(jiān)聽问欠。

salt-run state.event pretty=True

新開一個終端肝匆,切換到 root 執(zhí)行:

salt-call event.fire '{"data": "message to be sent in the event"}' 'tag'
image.png

查看事件輸出。


image.png

我們可以看到顺献,事件已經(jīng)被捕獲旗国,同時也接收到事件傳遞進(jìn)來的數(shù)據(jù)。
要觸發(fā)一個從 minion 發(fā)送到 master 的事件滚澜,調(diào)用 event.send 執(zhí)行函數(shù)粗仓。 另外,可以在 CLI 的函數(shù)參數(shù)中使用 YAML设捐。

salt-call event.send 'myco/mytag/success' '{success: True, message: "It works!"}'
image.png

image.png

同樣可以看到事件監(jiān)控程序捕獲的事件及數(shù)據(jù)借浊。

On presence 事件

啟用 on presence 事件后,會導(dǎo)致 Salt Master 周期性地查找主動連接的 minions萝招。 在事件總線上以固定時間間隔顯示出 minions 的 on presence 狀態(tài)信息事件蚂斤,以及帶有新連接或斷開的 minions 列表信息的事件。
這需要在 Salt Master 的配置文件中啟動以下參數(shù)槐沼,默認(rèn)值為 False:

# /etc/salt/master 文件添加
presence_events: True

查看事件


image.png

salt/presence/present 由 salt master 周期性連接 minion 觸發(fā)曙蒸,所以執(zhí)行該命令后稍微等一段時間才能看到事件。

SALT STATE 執(zhí)行進(jìn)度事件

啟用 Salt 狀態(tài)執(zhí)行進(jìn)度事件會導(dǎo)致 Salt Minions 發(fā)送 State 狀態(tài)的進(jìn)度事件岗钩,Salt 狀態(tài)運行中執(zhí)行的每個函數(shù)在執(zhí)行完成后都會觸發(fā)此類事件纽窟。 進(jìn)度事件信息的格式是: salt/job//prog//.
該功能默認(rèn)未啟用,需要在 Salt Master 中修改以下參數(shù)來打開這個進(jìn)度事件信息的功能:

# /etc/salt/master 文件添加
state_events: True

測試方法兼吓,先建一個 sls 任務(wù)文件臂港,路徑 /etc/salt/srv/salt/base/state_event.sls 。

# 該 sls 文件用來安裝 redis 服務(wù),只為測試 fire_event
redis installed:
  pkg.installed:
    - name: redis-server
    - fire_event: redis-server/已安裝

如果設(shè)置為 - fire_event: True审孽,就可以發(fā)送 state Event县袱,我們在文件里使用 redis-server/已安裝 指定了特定的事件字符串。
我們先開啟事件監(jiān)聽佑力,salt-run state.event pretty=True式散,然后在另一個終端執(zhí)行 salt '*' state.apply state_event,可以在監(jiān)聽終端開到執(zhí)行 state 完成后的事件打颤。


image.png

Grains 組件

Grains 是 SaltStack 收集的有關(guān)底層管理系統(tǒng)的靜態(tài)信息暴拄。 SaltStack 收集的 Grains 信息包括操作系統(tǒng)版本、域名瘸洛、IP 地址揍移、內(nèi)核、操作系統(tǒng)類型反肋、內(nèi)存以及許多其他系統(tǒng)屬性那伐。
我們可以將自定義的 grains 添加到 Salt Minion 的 /etc/salt/grains 文件中,或放置在 Grains 部分下的 Salt Minion 配置文件中石蔗。 例如罕邀,許多用戶為每個 Salt Minion 添加一個稱為角色的定制 grain 來描述系統(tǒng)的功能。
我們可以使用 grains.ls 命令來列出 Salt Minion 的所有 grains:
Salt 提供了一個接口养距,用于獲取被管理系統(tǒng)的有關(guān)信息诉探。 這被稱為 grains interface,因為它為 salt 提供 grains 信息棍厌。 Grains 信息涉及操作系統(tǒng)肾胯、域名、IP 地址耘纱、內(nèi)核敬肚、操作系統(tǒng)類型、內(nèi)存和許多其他系統(tǒng)屬性束析。
Salt 模塊和組件可以利用 grain 接口艳馒,以在正確的系統(tǒng)上自動地獲得正確的 salt minion 命令參數(shù)。
Grains 數(shù)據(jù)是相對靜態(tài)的员寇,但如果系統(tǒng)信息發(fā)生變化(例如弄慰,如果網(wǎng)絡(luò)設(shè)置發(fā)生變化),或者如果將新值分配給自定義 grain蝶锋,那么 grains 數(shù)據(jù)將會被刷新陆爽。
注意: Grains 被統(tǒng)一解析為小寫字母。 例如扳缕,F(xiàn)OO 和 foo 指的是同一個 grain墓陈。

salt '*' grains.ls

查看 grains 列表


image.png

查看 grains 具體數(shù)據(jù)

salt '*' grains.items

image.png

在 state 文件中使用 grains
在 sls 文件中使用 grains 時恶守,類似 {{ grains.id }}。
下面來看一個例子贡必,新建文件 /etc/salt/srv/salt/base/test_grains.sls

# 文件/etc/salt/srv/salt/base/test_grains.sls
echo 服務(wù)器ID:{{ grains.id }}: cmd.run

執(zhí)行:

salt '*' state.apply test_grains

image.png

自定義 Grains
新建文件: /etc/salt/grains

roles:
  - webserver
  - redis
  - mysql

以上文件為該服務(wù)器添加 grains 數(shù)據(jù),名稱為 roles庸毫,對應(yīng)了一個包含三個元素的列表仔拟。
將 grains 數(shù)據(jù)同步。

salt '*' saltutil.refresh_modules

現(xiàn)在查看跟新后的 grains 數(shù)據(jù)飒赃。

salt '*' grains.item roles

image.png

在 top 文件中使用
創(chuàng)建文件:/etc/salt/srv/salt/base/top.sls

base:
  'roles:mysql':
    - match: grain
    - mysql

新增文件:/etc/salt/srv/salt/base/mysql.sls

echo '這是一個安裝mysql的模塊': cmd.run

執(zhí)行命令:

salt '*' state.apply
image.png

可以看到利花,top.sls 文件中 roles.mysql 可以匹配到本機(jī)并且執(zhí)行了mysql.sls

Pillar

Pillar 是 Salt 的一個旨在提供可以分發(fā)給 minions 全局?jǐn)?shù)值的功能接口。 pillar 數(shù)據(jù)的管理方式與 Salt State 樹類似载佳。
pillar 數(shù)據(jù)是在 master 上編譯炒事,提供給指定 minion 的 pillar 數(shù)據(jù)只能由其在 pillar 配置中設(shè)定為目標(biāo)的 minion 訪問。 所以 pillar 可用于為特定 minion 存儲其特有的敏感數(shù)據(jù)蔫慧。
Salt Master 服務(wù)器維護(hù)一個 pillar_roots 設(shè)置挠乳,該設(shè)置與 Salt 文件服務(wù)器中使用的 file_roots 的結(jié)構(gòu)相匹配。 與 file_roots 類似姑躲,pillar_roots 選項將環(huán)境映射到目錄睡扬。 然后根據(jù) top file 文件中的匹配器將 pillar 數(shù)據(jù)映射到 minions,該 top file 文件使用與 state top file 文件相同的方式布局黍析。 Pillar 可以使用與標(biāo)準(zhǔn) top file 文件相同的匹配器類型卖怜。

Pillar 的典型使用場景有:
高度敏感的數(shù)據(jù): 通過 pillar 傳輸?shù)男畔⒈WC僅提供給目標(biāo)對象,使 Pillar 適合管理安全信息阐枣,如加密密鑰和密碼马靠。
Minion 配置: Minion 模塊,例如執(zhí)行模塊蔼两、狀態(tài)和 returners 之類的通乘可以通過存儲在 pillar 中的數(shù)據(jù)來配置。
使用變量: 需要分配給特定 minions 或 minions 組的變量可以在 pillar 中定義宪哩,然后在 sls 公式和模板文件中訪問娩贷。
任意數(shù)據(jù): Pillar 可以包含字典格式的任何基本數(shù)據(jù)結(jié)構(gòu),因此可以定義一組 鍵/值 存儲锁孟,然后在 sls 公式中輕松迭代它彬祖。

查看 pillar 數(shù)據(jù)

salt '*' pillar.items

image.png

設(shè)置 pillar_roots 路徑
修改文件 /etc/salt/master

pillar_roots:
  base:
    - /etc/salt/srv/pillar

修改完 master 配置文件需要重啟 master

pkill salt-master
salt-master -d -l info

創(chuàng)建對應(yīng)的文件夾,mkdir /etc/salt/srv/pillar品抽,salt 將從該路徑讀取 pillar 數(shù)據(jù)储笑。
Pillar 系統(tǒng)的自定義變量和數(shù)據(jù)
Salt Pillar 是使 Salt state 可重復(fù)使用的必不可少的成分, 所以我們需要先從寫 Salt state 的狀態(tài)文件來設(shè)置它。
Salt Pillar 使用 top file 文件將 Salt Pillar 數(shù)據(jù)與 Salt Minions 配對圆恤。top file 的寫法與 salt state 非常像突倍。
top file 作為 pillar 的入口文件,salt 從該文件加載 pillar 的數(shù)據(jù)。我們現(xiàn)在創(chuàng)建該文件羽历,路徑 /etc/salt/srv/pillar/top.sls焊虏。

base:
  "*":
    - users

該文件表示所有 minions 主機(jī)都會使用 users 這個 pillar 數(shù)據(jù)。
新建 /etc/salt/srv/pillar/users 目錄秕磷,并創(chuàng)建文件 /etc/salt/srv/pillar/users/init.sls 文件诵闭,內(nèi)容如下:

users:
  user1: 1011
  user2: 1012
  user3: 1013

該文件定義了一個 名字為 users 的數(shù)據(jù)字典,包含 3 個 user澎嚣,該文件與 /etc/salt/srv/pillar/users.sls 等同疏尿,pillar 組件會查找 引用組件.sls 和 引用組件/init.sls 導(dǎo)入數(shù)據(jù)。
當(dāng) Salt Pillar 數(shù)據(jù)更新時, 每個 Salt Minions 都與 top.sls 文件中列出的目標(biāo)匹配易桃。當(dāng)一個 Salt Minion 與目標(biāo)匹配上時, 它會接受在該目標(biāo)下方列表中定義的所有 Salt Pillar SLS 文件褥琐。

使用如下命令更新 pillar 數(shù)據(jù):

salt '*' saltutil.refresh_pillar

現(xiàn)在查看下 pillar 數(shù)據(jù):

salt '*' pillar.items
image.png

最后,我們使用這個數(shù)據(jù)晤郑。
新建 state 文件敌呈,路徑文件 /etc/salt/srv/salt/base/users.sls,內(nèi)容如下

{% for user, uid in pillar.get('users', {}).items() %}
{{user}}:
  user.present:
    - uid: {{uid}}
{% endfor %}

這個 state 文件通過 pillar.get 獲取 pillar 數(shù)據(jù)贩汉,使用 for 循環(huán)驱富,調(diào)用 user.present 模塊創(chuàng)建了 3 個用戶,并指定的用戶 uid匹舞。具體 state 用法我們會專門講到褐鸥。
現(xiàn)在我們執(zhí)行這個 state。

salt '*' state.apply users

image.png

pillar 其他寫法
可以在 state 狀態(tài)文件中訪問 pillar 數(shù)據(jù)赐稽,以定制每個 minion 的行為叫榕。適用于每個 minion 的所有 pillar(和 grain)數(shù)據(jù),在運行之前通過模板替換為最終可執(zhí)行的 state 狀態(tài)文件姊舵。比較典型的用途包括設(shè)置適合 minion 的配置目錄和跳過不適用的 states 狀態(tài)晰绎。
新建文件 /etc/salt/srv/pillar/pkgs.sls

pkgs:
  {% if grains['os_family'] == 'RedHat' %}
  apache: httpd
  {% elif grains['os_family'] == 'Debian' %}
  apache: apache2
  {% elif grains['os'] == 'Arch' %}
  apache: apache
  {% endif %}

如上面文件,我們定義了一個名為 pkgs 的變量括丁,里面又包含了一個 apache 的變量荞下,但在不同操作系統(tǒng)下,其對應(yīng)的值是不一樣的史飞。
現(xiàn)在修改 /etc/salt/srv/pillar/top.sls尖昏,將我們新定義的 pkg 變量包含到 top 文件中。

base:
  '*':
    - users
    - pkgs

同樣构资,我們新建一個使用 pkgs 變量的 state 文件抽诉。
文件名 /etc/salt/srv/salt/base/apache.sls

apache:
  pkg.installed:
    - name: {{ pillar['pkgs']['apache'] }}

上面的 state 文件要求安裝一個 pkg 包,軟件包名使用 pillar 數(shù)據(jù)吐绵。
現(xiàn)在刷新 pillar 數(shù)據(jù)

salt '*' saltutil.refresh_pillar

執(zhí)行 apache state 文件任務(wù)

salt '*' state.apply apache
image.png

如圖迹淌,我們看到河绽,salt 已經(jīng)通過系統(tǒng)識別到 apache 對應(yīng)的軟件包名稱為 apache2。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唉窃,一起剝皮案震驚了整個濱河市耙饰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌句携,老刑警劉巖榔幸,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矮嫉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牍疏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蠢笋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鳞陨,你說我怎么就攤上這事昨寞。” “怎么了厦滤?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵援岩,是天一觀的道長。 經(jīng)常有香客問我掏导,道長享怀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任趟咆,我火速辦了婚禮添瓷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘值纱。我一直安慰自己鳞贷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布虐唠。 她就那樣靜靜地躺著搀愧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疆偿。 梳的紋絲不亂的頭發(fā)上咱筛,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音翁脆,去河邊找鬼眷蚓。 笑死,一個胖子當(dāng)著我的面吹牛反番,可吹牛的內(nèi)容都是我干的沙热。 我是一名探鬼主播叉钥,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼篙贸!你這毒婦竟也來了投队?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爵川,失蹤者是張志新(化名)和其女友劉穎敷鸦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寝贡,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡扒披,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了圃泡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碟案。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颇蜡,靈堂內(nèi)的尸體忽然破棺而出价说,到底是詐尸還是另有隱情,我是刑警寧澤风秤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布鳖目,位于F島的核電站,受9級特大地震影響缤弦,放射性物質(zhì)發(fā)生泄漏领迈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一甸鸟、第九天 我趴在偏房一處隱蔽的房頂上張望惦费。 院中可真熱鬧,春花似錦抢韭、人聲如沸薪贫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞧省。三九已至,卻和暖如春鳍贾,著一層夾襖步出監(jiān)牢的瞬間鞍匾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工骑科, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留橡淑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓咆爽,卻偏偏與公主長得像梁棠,于是被迫代替她去往敵國和親置森。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容