Salt 組件
Salt Master歉嗓,中心管理系統(tǒng)。此系統(tǒng)用于將命令和配置發(fā)送到在受管系統(tǒng)上運行的 Salt minion。
Salt Minions贮预,被管理的系統(tǒng)。該系統(tǒng)運行 Salt minion,它從 Salt master 接收命令和配置仿吞。
Exection Modules滑频,從命令行針對一個或多個受管系統(tǒng)執(zhí)行臨時命令。 對以下管理場景有幫助:實時監(jiān)控唤冈,狀態(tài)和盤點峡迷;一次性命令和腳本;部署關鍵更新你虹。
States绘搞,一種系統(tǒng)配置的聲明性或命令式表示。
Grains傅物,系統(tǒng)變量夯辖。 Grains 是有關底層受管系統(tǒng)的靜態(tài)信息,包括操作系統(tǒng)董饰,內(nèi)存和許多其他系統(tǒng)屬性蒿褂。 您還可以為任何系統(tǒng)定義自定義 grains。
Pillar卒暂,用戶定義的變量啄栓。 這些安全變量被定義并存儲在 Salt Master 中,然后使用目標“分配”給一個或多個 minions介却。 pilla 數(shù)據(jù)存儲諸如端口谴供,文件路徑、配置參數(shù)和密碼之類的值齿坷。
Top File桂肌,將 states 和 pilla 數(shù)據(jù)與 Salt minions 匹配。
Runner永淌,在 Salt master 上執(zhí)行的模塊崎场,用于執(zhí)行支持任務。 Salt runners 報告作業(yè)狀態(tài)遂蛀、連接狀態(tài)谭跨、從外部 API 讀取數(shù)據(jù),查詢連接的 Salt minions 等李滴。例如螃宙,Orchestrate 運行器協(xié)調(diào)跨多個系統(tǒng)的配置部署。
Returners所坯,將 Salt minions 返回的數(shù)據(jù)發(fā)送到另一個系統(tǒng)谆扎,例如數(shù)據(jù)庫。 Salt Returners 可以在 Salt minion 或 Salt master 上運行芹助。
Reactor堂湖,在 SaltStack 環(huán)境中發(fā)生特定事件時觸發(fā)相應的響應闲先。
Salt SSH,在沒有部署 Salt minion 的系統(tǒng)上通過 SSH 運行 Salt 命令无蜂。
Salt 各組件的具體使用會在以后的文檔中逐步介紹伺糠。
Salt 架構模式
Salt 多種運行模式。
master less斥季,無 master 模式下训桶,salt 進行自管理。
agent less酣倾,無 minion 模式下進行遠程管理渊迁,類似 Ansible 。
c/s 灶挟,最常用模式,也會因 IT 架構衍生出 proxy 代理毒租、syndic 代理稚铣。
Salt 的配置文件默認位于 /etc/salt/,F(xiàn)reeBSD 系統(tǒng)例外墅垮,配置文件位于 /usr/local/etc/salt惕医。
Salt Agentless 模式,無 minion 運行
Salt 可以在遠程主機沒有安裝 minion 的情況下通過 salt-ssh 命令調(diào)用 ssh 連接并操作遠程服務器算色。
在這種情況下抬伺,salt-master 進程也無需啟動。
在藍橋云課環(huán)境下灾梦,我們使用了 pip3 進行安裝峡钓,所以無需單獨安裝 salt-ssh。如果使用 yum 或者 apt 方式安裝若河,需要額外進行 yum install salt-ssh 或者 apt install salt-ssh 安裝模塊能岩。
agentless 模式運行流程
通過 SSH 連接到遠程系統(tǒng)。
將 Salt 的瘦版本 agent 部署到臨時目錄萧福,包括任何必需的文件拉鹃。
運行指定的命令。
(可選)清理臨時目錄鲫忍。
Agentless 模式下運行 Salt膏燕,依賴 ssh 進行連接,所以執(zhí)行效率會低于 C/S 模式悟民。
roster 文件
默認情況下坝辫,Salt 使用 YAML 文件來存儲 agentless 系統(tǒng)的連接細節(jié),稱為 roster(字面含義為名冊)逾雄。
一個基本的 roster 文件包含一個 ID阀溶,一個主機和一個用戶的信息:
# 文件格式類似如下
ID:
host: [IP or DNS name]
user: [username]
修改 master 配置文件
編輯文件:/etc/salt/master腻脏,添加如下內(nèi)容:
# master必須通過SSH去連接訪問minion,roster 配置文件用來保存主機信息
roster_file: /etc/salt/roster
# salt-ssh 操作的日志文件银锻,如果沒有 /etc/salt/log 目錄永品,請手動創(chuàng)建
# ssh_log_file: /etc/salt/log/salt-ssh.log
# salt-ssh 提供默認參數(shù)
roster_defaults:
user: root
sudo: True
# 使用 user home 目錄下的key進行登錄認證
ssh_use_home_key: True
# 指定 Salt 文件服務的根目錄,調(diào)用時使用 salt://
file_roots:
base:
- /etc/salt/srv/salt/base
創(chuàng)建 file_roots 目錄:
mkdir -p /etc/salt/srv/salt/base
Roster 配置主機信息
文件路徑 /etc/salt/roster击纬。
Group1: # 組名
host: localhost # 主機地址
user: root # 登錄用戶名
priv: /root/.ssh/id_rsa # 使用私鑰
測試前鼎姐,需要先 生成免密登錄的私鑰。
mkdir ~/.ssh
# 生成私鑰文件
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q
# 復制文件
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
測試 salt-ssh 操作更振,發(fā)送 ping 命令炕桨。
salt-ssh '*' test.ping -i
注意:第一次執(zhí)行 ssh 操作,需要 -i 參數(shù)肯腕,否則會因 known_hosts 問題報錯献宫。
salt-ssh 調(diào)用 state 組件
state 組件描述了目標服務器該保持狀態(tài),調(diào)用該組件去連接服務器安裝 state 描述的方案進行操作实撒。
新建文件:/etc/salt/srv/salt/base/redis.sls姊途。
# 該 sls 文件聲明遠程服務器應該安裝 python-redis模塊,安裝并啟動 redis
# 文件具體格式及聲明方式后續(xù)文檔會詳細講解知态,現(xiàn)在只是測試 salt-ssh 功能
redis: pip.installed
redis-server:
pkg:
- installed
service.running:
- require:
- pkg: redis-server
執(zhí)行命令捷兰。
# 參數(shù) redis,salt 會查找 file_roots 目錄下對應同名的 .sls
salt-ssh '*' state.apply redis -i
Salt masterless负敏,無 master 環(huán)境贡茅,獨立運行 minion
在 Salt 的無 master 環(huán)境下,minion 可以執(zhí)行的任務其做。
在系統(tǒng)上使用 salt-call 命令而不與主機連接顶考。
無 Master 的 states 管理,完全從當?shù)氐奈募\行 states妖泄。
在無 master 模式下運行 Salt 時村怪,請勿運行 salt-minion 守護進程。 否則浮庐,它將嘗試連接到 Master 并失敗甚负。
salt-call 命令是獨立的,不需要 salt-minion 守護進程审残。
salt-call 使用
salt-call test.ping --local
salt-call 命令調(diào)用 salt-call梭域。
test.ping 其中 test 為模塊名稱,ping 為模塊下功能名稱搅轿。
--local 指定為本地調(diào)用病涨。
如果在無 master 環(huán)境中使用 states 模塊,需要在 /etc/salt/minion 文件配置 file_roots 參數(shù)璧坟。
file_roots:
base:
- /etc/salt/srv/salt/base
執(zhí)行命令
salt-call state.apply redis --local
藍橋云課環(huán)境為 Docker 既穆,系統(tǒng)自帶的服務管理模塊無法使用赎懦,命令執(zhí)行會有錯誤輸出,但不會影響服務啟動幻工。
如果不想每次執(zhí)行指定 --local励两,可以修改 /etc/salt/minion 文件,將 file_client 修改為 local囊颅。
# file_client: local
# 該參數(shù)默認為 remote当悔,修該為 local
# salt 主要使用 c/s 架構,考慮到參數(shù)的影響踢代,非必要參數(shù)大家不要修改
Salt C/S 架構
salt c/s 架構是最常用的盲憎,在該種模式下,salt 可以對上萬臺服務器進行部署和管理胳挎。以后的文檔內(nèi)容基本也將圍繞 c/s 模式展開饼疙。
master 配置
以下是基本的 master 配置項,其余更多項目參數(shù)會在具體章節(jié)中使用慕爬。
interface
服務將要綁定的本地網(wǎng)絡接口宏多,必須是 IP 地址。
interface: 0.0.0.0
publish_port
設置消息發(fā)布接口使用的網(wǎng)絡端口澡罚。
publish_port: 4505
master_id
在發(fā)布作業(yè)中傳遞給 minions 的 master id。 這用于 MultiSyndics 將作業(yè)返回給正確的發(fā)出請求的 master 服務器肾请。
master_id: MasterOfMaster
注意:如果還使用到了 syndic 服務留搔,則這必須與配置 syndic 的字符串相同。
user
用來運行 salt master 進程的系統(tǒng)用戶铛铁。
user: root
ret_port
數(shù)據(jù)返回服務使用的端口隔显,這是 Salt 用來接收執(zhí)行返回數(shù)據(jù)和命令執(zhí)行數(shù)據(jù)的服務。
ret_port: 4506
pki_dir
存放 pki 密鑰的目錄饵逐。
pki_dir: /etc/salt/pki/master
auto_accept
自動接受所有 minion 的認證請求括眠,默認為 False 。
auto_accept: False
keep_jobs
設置保留舊作業(yè)信息的小時數(shù)倍权。 請注意掷豺,將此選項設置為 0 會禁用緩存清理程序。
keep_jobs: 24
以上是 salt-master 配置文件中常見的幾個薄声,后續(xù)如果有更多需要修改当船,我們會單獨提到。
minion 配置
以下是基本的 minion 配置項默辨,其余更多項目參數(shù)會在具體章節(jié)中使用德频。
master
指定 master 服務器地址
master: 127.0.0.1
# 多master環(huán)境可以指定 master 列表
master:
- address_1
- address_2
master_type
定義 master 的服務類型, 可以是 str, failover, func 或者 disable.
如果此選項設置為故障轉移缩幸,則 master 選項必須定義為一個 master 服務地址的列表壹置。 然后竞思,minion 將會按照列表中指定的順序嘗試每個 master,直到它成功連接钞护。 還必須設置 master_alive_interval盖喷,這決定了 minion 將驗證 master 的存活的頻率。
master_type: failover
master_port
指定 master 服務的端口患亿,注意這需要與 Salt Master 服務器上的 ret_port 選項一致传蹈。
master_port: 4506
publish_port
指定 master 發(fā)布服務器的端口,這需要與 Salt master 上的 publish_port 選項一致步藕。
publish_port: 4505
root_dir
此目錄將會被預先附加到以下選項的前面:pki_dir惦界,cachedir,log_file咙冗,sock_dir 和 pidfile沾歪。
root_dir: /
pki_dir
指定存放 minion 的公私密鑰的路徑。
pki_dir: /etc/salt/pki/minion
id
明確聲明此 minion 使用的 id雾消。 由于 Salt 使用分離的 id灾搏,因此可以在同一臺機器上運行多個 minions 但具有不同的 id。
id: shiyanlou
minion_id_caching
當 minion 配置中沒有靜態(tài)定義 minion 的 id 時立润,將 minion id 緩存到文件中狂窑。 當從系統(tǒng)中自動獲取 minion id 的方案改變時,此設置可防止?jié)撛趩栴}桑腮,這可能導致 minion 失去與 master 的連接泉哈。 要關閉 minion id 緩存,請將此配置設置為 False破讨。
minion_id_caching: True
grains
靜態(tài)地為 minions 定義一些 grains 變量丛晦。
grains:
roles:
- webserver
- memcache