saltstack 1. 安裝使用及元件介紹
文章目錄
saltstack的四大功能:
遠端執行,配置管理,雲管理,事件驅動
saltstack元件:
-
salt-master
-
salt-minion
-
執行模組
-
狀態
-
Grains
-
Pillar
-
等等等等
saltstack 安裝
安裝saltstack
安裝repo源,在https://repo.saltstack.com/yum/選擇合適的repo源,進行安裝。
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
# 固定版本
# yum install https://repo.saltstack.com/yum/redhat/salt-repo-2018.3-1.el7.noarch.rpm
注:在安裝repo源時需要注意,儘量使用固定版本的repo源,防止以後在執行yum update
時升級後的不可用問題。
安裝對應元件
yum install salt-master
yum install salt-minion
yum install salt-ssh
yum install salt-syndic
yum install salt-cloud
yum install salt-api
簡單配置saltstack
- salt-master
salt-master無需配置可以直接啟動使用。
- salt-minion
salt-minion需要配置master
欄位來讓minion去連線salt-master,該欄位可以配置為IP和域名。
可以配置id
欄位來設定minion的標示ID,否則預設使用socket.getfqdn()
獲取的值來設定,並儲存到/etc/salt/minion_id
命名的檔案中。
啟動服務後,master和minion都會在/etc/salt/pki
目錄中對應服務的資料夾下生成一對祕鑰檔案,
埠監聽
salt-master監聽4506和4506埠,使用Zeromq和salt-minion進行通訊,master通過4505埠非同步傳送任務到minion端。
salt-minion不監聽埠,minion和master在4505上建立長連線,接受master下發的任務。任務執行完成後,結果傳送到salt-master的4506埠。
YAML
縮排
YAML使用固定縮排方案來表示資料層之間的關係。Salt要求每個級別的縮排恰好包含兩個空格。不要使用tab。
冒號
Python字典只是鍵值對。字典鍵在YAML中表示為由尾部冒號終止的字串。值由冒號後面的字串表示,用空格分隔
my_key:my_value
# 在python中格式如下
# {'my_key': 'my_value'}
# 或者,可以通過縮排將值與鍵相關聯。
my_key:
my_value
字典可以巢狀:
first_level_dict_key:
second_level_dict_key: value_in_second_level_dict
# 在python中格式如下
# {
# 'first_level_dict_key': {
# 'second_level_dict_key': 'value_in_second_level_dict'
# }
# }
破折號
為了表示專案列表,使用單個短劃線後跟空格。多個專案是同一列表的一部分,因為它們具有相同級別的縮排。
- list_value_one
- list_value_two
- list_value_three
# 列表可以是鍵值對的值。這在鹽中很常見:
my_dictionary:
- list_value_one
- list_value_two
- list_value_three
# 在python中格式如下
# {'my_dictionary': ['list_value_one', 'list_value_two', 'list_value_three']}
使用
認證
首次使用需要在master上對minion進行認證後才能對minion進行操作。使用salt-key
命令對minion端進行認證操作。
salt-key
-A: 認證全部
-a: 支援萬用字元認證
-D: 拒絕所有認證
-d: 支援萬用字元拒絕認證
minion會把自己的公鑰傳送給master,儲存到master的/etc/salt/pki/master/minions_pre
目錄下,每個minion端的公鑰檔案以minion端的id命名,master認證後會移動到/etc/salt/pki/master/minions
目錄下,並且會把master的公鑰傳到minion 端的/etc/salt/pki/minion/minion_master.pub
檔案中。
模組
# 這裡的*表示匹配minionID名,由於shell的問題,這裡用了反斜槓進行轉義,也可以使用單引號和雙引號。
salt \* test.ping
salt '*' cmd.run 'free -m'
salt執行命令格式為:1.salt關鍵字。2.萬用字元。3.模組以及模組下的方法 4.方法需要的引數
state.sls
可以編寫state.sls檔案對伺服器進行配置管理。
首先,需要編輯master配置檔案來制定salt的檔案目錄,如下:
# 這裡不同的環境對應不同的目錄
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
prod:
- /srv/salt/prod
test:
- /srv/salt/test
然後,在base目錄下建立按照apache服務的state.sls指令碼,如下:
mkdir -p /srv/salt/{base,dev,prod,test}
mkdir /srv/salt/base/web
cat /srv/salt/base/web/apache.sls
apache-install:
pkg.installed:
- name: httpd
apapche-service:
service.running:
- name: httpd
- enable: True
最後,執行進行安裝:
# 預設環境為bash
salt 'minion' state.sls web.apache saltenv=base
# 測試命令
salt 'minion' state.sls web.apache test=True
top.sls
top.sls本不是固定的,可以在master的配置檔案中進行state_top: top.sls
配置,建議不要修改。
top.sls來指定不同minion執行不同的指令碼:
# 這裡表示所有服務安裝apache服務
[[email protected] base]# cat /srv/salt/base/top.sls
base:
'*':
- web.apache
/srv/salt/base/web/apache.sls
檔案內容如下:
[[email protected] base]# cat web/apache.sls
apache-install:
pkg.installed:
- name: httpd
apapche-service:
service.running:
- name: httpd
- enable: True
執行,
# 這裡的* 和top.sls裡的*是兩個概念
salt '*' state.highstate
資料系統
Grains
grains用於收集作業系統,域名,IP地址,核心,作業系統型別,記憶體和許多其他系統屬性。它是儲存到minion端的靜態資料,master端獲取資料時採用明文傳輸。
- 存放著salt-minion啟動時收集的資訊。
salt \* grains.items
salt \* grains.item virtual
salt \* grains.ls
salt \* grains.get saltversion
salt \* grains.get ip_interfaces:eth0
- salt可以根據Grains來匹配minion:
[[email protected] base]# salt -G 'os:CentOS' test.ping
salt-master:
True
salt-minion:
True
[[email protected] base]# salt \* grains.get os
salt-master:
CentOS
salt-minion:
CentOS
- top.sls中可以使用根據grains進行匹配
[[email protected] base]# cat /srv/salt/base/top.sls
base:
'os:CentOS':
- match: grain
- web.apache
-
在模版語言中使用grains
-
自定義grains
-
在minion的配置中修改
grains
選項來定義。(不推薦,需要單獨修改minion的配置檔案) -
在minion端的
/etc/salt/grains
檔案中單獨配置,配置後需要重啟或者使用salt \* saltutil.sync_grains
命令重新整理grains才能生效 -
在master端
file_root
指定的子目錄中建立_grains
的自定義grains模組目錄,將在state.highstate
執行時或altutil.sync_grains
或saltutil.sync_all
功能分發給minion端。該檔案的檔名以及函式名無關緊要,根本不會影響穀物資料; 只有返回的鍵/值成為grains的一部分。mkdir /srv/salt/base/_grains cat /srv/salt/base/_grains/zabbit.py def yourfunction(): grains = {} grains['yourcustomgrain'] = True grains['anothergrain'] = 'somevalue' import time grains['time'] = time.time() return grains # python指令碼中可以定義靜態配置以及python獲取到的配置,但是需要注意的是動態獲取的時間只有minion重啟或者重新整理grains才會生效。
,
-
-
grains的缺點:
- 靜態的資料。
- 明文傳輸,敏感資料不安全。
Pillar
儲存在master端資料,一般放一些敏感的資料,採用加密方式傳輸。
salt-master伺服器維護一個pillar_roots
與file_roots
檔案結構類似的設定,該pillar_roots
選項將環境對映到目錄。然後根據頂部檔案中的匹配器將支柱資料對映到minions,該頂部檔案以與狀態頂部檔案相同的方式佈局。pillar可以使用與標準頂級檔案
相同的匹配器型別。
配合master配置檔案/etc/salt/master
中pillar_roots
選項
pillar_roots:
base:
- /srv/pillar/base
prod:
- /srv/pillar/prod
mkdir -p /srv/pillar/{base,prod}
systemctl restart salt-master
新建pillar的top.sls檔案
宣告在base
環境中,匹配所有minions的glob將在柱子中找到支柱資料packages
。假設 從上面取的pillar_roots
值/srv/pillar
,packages
柱子將位於/srv/pillar/base/apache.sls
。
cd /srv/pillar/base
[[email protected] base]# cat top.sls
base:
'*':
- apache
結合grains可以只對CentOS
系統進行pillar引數進行設定
base:
'os:CentOS':
- match: grain
- apache
/srv/pillar/base/apache.sls
檔案內容如下:
[[email protected] base]# cat apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
修改/srv/salt/base/web/apache.sls
檔案內容如下:
[[email protected] base]# cat web/apache.sls
apache-install:
pkg.installed:
- name: {{ pillar['apache'] }}
apapche-service:
service.running:
- name: {{ pillar['apache'] }}
- enable: True
繼續執行
salt '*' state.highstate
Grains和Pillar
資料系統 | 儲存位置 | 型別 | 採集方式 | 場景 | 傳輸方式 |
---|---|---|---|---|---|
Grains | minion | 靜態 | minion啟動時,可以重新整理 | 1.獲取資訊 2.匹配 | 明文 |
Pillar | master | 動態 | 指定,實時生效 | 1.匹配 2.敏感資料配置 | 密文 |