1. 程式人生 > >saltstack 1. 安裝使用及元件介紹

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端獲取資料時採用明文傳輸。

  1. 存放著salt-minion啟動時收集的資訊。
salt \* grains.items
salt \* grains.item virtual
salt \* grains.ls
salt \* grains.get saltversion
salt \* grains.get ip_interfaces:eth0
  1. 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
  1. top.sls中可以使用根據grains進行匹配
[[email protected] base]# cat /srv/salt/base/top.sls
base:
  'os:CentOS':
    - match: grain
    - web.apache
  1. 在模版語言中使用grains

  2. 自定義grains

    • 在minion的配置中修改grains選項來定義。(不推薦,需要單獨修改minion的配置檔案)

    • 在minion端的/etc/salt/grains檔案中單獨配置,配置後需要重啟或者使用salt \* saltutil.sync_grains命令重新整理grains才能生效

    • 在master端file_root指定的子目錄中建立_grains的自定義grains模組目錄,將在state.highstate執行時或altutil.sync_grainssaltutil.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才會生效。
      

  3. grains的缺點:

    • 靜態的資料。
    • 明文傳輸,敏感資料不安全。
Pillar

儲存在master端資料,一般放一些敏感的資料,採用加密方式傳輸。

salt-master伺服器維護一個pillar_rootsfile_roots檔案結構類似的設定,該pillar_roots選項將環境對映到目錄。然後根據頂部檔案中的匹配器將支柱資料對映到minions,該頂部檔案以與狀態頂部檔案相同的方式佈局。pillar可以使用與標準頂級檔案相同的匹配器型別。

配合master配置檔案/etc/salt/masterpillar_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/pillarpackages柱子將位於/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.敏感資料配置 密文