SaltStack快速瞭解,SaltStack

來源:互聯網
上載者:User

SaltStack快速瞭解,SaltStack
1. 介紹

基於Python開發的一套C/S架構組態管理工具,底層使用ZeroMQ訊息佇列pub/sub方式通訊,使用SSL認證簽發的方式進行認證管理。

2. 環境準備2.1 安裝

本文採用salt-bootstrap方式安裝。salt-bootstrap是SaltStack的一個單獨項目,主要用於解決多平台一鍵部署SaltStack環境

下載安裝指令碼

curl -L https://bootstrap.saltstack.com -o install_salt.sh

 

安裝salt-master

sh install_salt.sh -M #安裝最新stable版本的salt-master和salt-minion

 

安裝salt-minion

sh install_salt.sh #安裝最新stable版本的salt-minion

 

2.2 配置

(1) 所有master和minion節點配置hosts檔案(生產環境使用DNS)

主機名稱 IP 說明
node1 172.16.37.23 Master
node2 172.16.37.35 Minion
node3 172.16.37.41 Minion
node4 172.16.37.39 Minion
node5 172.16.37.43 Minion

 

 

 

 

 

 

 

(2) Master防火牆規則

salt master啟動後預設會監聽兩個連接埠:

4505/tcp,publish_port,提供遠程執行命令發送功能

4506/tcp,ret_port,用於檔案服務、認證、結果搜集等功能介面

 

(3) Minion配置

修改/etc/salt/minion

    a) 修改minion的master

        找到如下行’#master: salt’,取消注釋,修改為實際master主機名稱

        master: node1

    b) 為minion指定id

        找到如下行’#id:’,取消注釋,並設定為minion的主機名稱(不一定要和主機名稱一樣),如

        id: node2

 

重啟salt master和salt minion

systemctl restart salt-master salt-minion # Mastersystemctl restart salt-minion             # Minion

 

2.3 認證管理

SaltStack使用SSL簽證的方式進行安全認證、通訊加密

Minion第一次啟動後會在/etc/salt/pki/minion產生公開金鑰秘鑰,然後將公開金鑰發送給Master,等待Master接受

Master為其簽發認證後才能與該Minion建立通訊

 

相關命令

#查看認證簽發情況salt-key -L#為node2簽發認證salt-key -a node2#為所有等待接受的Minion簽發認證salt-key -A
3. 遠程執行命令

salt ‘目標機器’ 函數 [參數](詳細用法見’salt -h’)

在所有Minion遠程執行test模組中的ping函數( /usr/lib/python2.7/site-packages/salt/modules/test.py ,該函數直接返回True)

salt ‘*’ test.ping

 

查看函數說明

salt ‘node2’ sys.doc test.ping

 

遠程命令執行模組cmd( /usr/lib/python2.7/site-packages/salt/modules/cmdmod.py )

salt ‘*’ cmd.run “hostname”

 

列出cmd模組的函數

salt 'node2' sys.list_functions cmd

 

查看函數說明

salt 'node2' sys.doc cmd.run

 

原理都是在匹配的目標機器執行python模組中的函數,可以編寫自訂的python模組推送到Minion上按上述方式執行

4. 狀態系統4.1 狀態系統說明

通過SLS(SaLt State)檔案描述Minion要達到什麼狀態,底層由SaltStack的狀態模組保證Minion處於該狀態

以安裝httpd服務為例,採用執行遠程命令的方式如下:

salt ‘node2’ pkg.install httpd

 

而採用狀態檔案進行描述如下:

然後通過狀態模組確保目標機器中httpd服務處於pkg.installed的狀態:

salt ‘node2’ state.apply apache

 

兩者都達到了在目標機器部署httpd服務的目的,但是執行遠程命令的方式每次都會執行相同的邏輯和指令,而狀態檔案則是根據描述讓Minion處於指定狀態,目前狀態和所需狀態不同時才執行相關操作

執行遠程命令的方式屬於執行模組。查看所有執行模組

salt 'node2' sys.list_modules

 

查看pkg執行模組中的所有函數

salt 'node2' sys.list_functions pkg

 

狀態檔案的方式屬於狀態模組。查看所有狀態模組

salt 'node2' sys.list_state_modules

 

查看pkg狀態模組中的所有函數

salt 'node2' sys.list_state_functions pkg

 

4.2 Highstate

highstate通過top.sls檔案作為入口對模組和主機進行管理

使用highstate,可以用top.sls組織多個狀態檔案,對模組進行拆分和複用,實現多環境的配置和管理等

 

如下舉例對highstate進行說明

file_roots預設只有一個base環境,位於/srv/salt,top.sls就在base環境的根目錄下。目錄結構如下:

 

在top.sls中指定狀態檔案或狀態檔案子目錄

 

top.sls中引用了myapp,它會按如下順序引用:如果存在myapp.sls則引用myapp.sls,如果不存在,則引用myapp目錄下的init.sls。我們採用子目錄的方式對目錄進行規劃

 

在myapp/init.sls中include與myapp相關的各個狀態檔案(可以把狀態檔案拆分成多個,在此處include)

 

.myconf對應與init.sls同目錄的myconf.sls狀態檔案,在該檔案中對Minion的/tmp/myconf.txt狀態進行描述

 

在files/myconf.txt中寫入任意內容,執行如下命令讓Minion處於描述的狀態

salt 'node2' state.apply

 

參考:

(1) https://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html

(2) https://docs.saltstack.com/en/latest/topics/tutorials/starting_states.html

5. Grains

SaltStack中記錄Minion靜態資訊的組件(OS類型、CPU核心數、記憶體大小、IP地址等),在Minion啟動時採集彙報給Master,因此Grains通常儲存的是靜態、不常變化的資料,儲存在Minion本地

Minion可以操作自己的Grains資料(增刪改)

 

可通過如下命令查看每項Grains資料:

salt 'node2' grains.items
6. Pillar

與Grains類似,但Pillar儲存的是相對經常變化的資料,儲存在Master本地

Minion只能查看自己的Pillar資料

 

可通過如下命令查看每項Pillar資料:

salt 'node2' pillar.items
7. Jinja

Python模板引擎,通過與Grains和Pillar的結合定義動態配置

比如,不同的Minion通過fqdn可以擷取各自不同的主機名稱

 

接下來我們可以通過Grains建立動態配置,讓每個目標機器中的/tmp/myconf.txt顯示自己的主機名稱

修改狀態檔案中的file描述,指定template為jinja

#cat dev/myapp/myconf.slsconf1:  file.managed:    - name: /tmp/myconf.txt    - source: salt://nginx/files/myconf.txt    - user: root    - group: root    - mode: 644    - template: jinja

 

在source對應的檔案中通過 {{ grains[‘ITEM’] }} 的方式引用Grains資料

#cat dev/myapp/files/myconf.txt[BASE] /srv/salt/devMy hostname is {{ grains['fqdn'] }}

 

讓所有Minion處於描述的狀態

salt '*' state.apply

 

參考:

(1)    https://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html

 

8. 多環境的配置和管理

如下以在不同環境的主機中放置不同內容的/tmp/myconf.txt檔案為例進行說明

為了便於區分不同環境,先修改各Minion的id加入環境標識

 

修改master的file_root配置( /etc/salt/master )

file_roots:  base:   - /srv/salt/base  dev:    - /srv/salt/dev  prod:    - /srv/salt/prod

 

在多環境下,每個環境的根目錄下維護各自的top.sls

 

top.sls中指明自己的環境,匹配的目標機器,包含的狀態檔案/子目錄等

 

top.sls中引用了myapp,它會按如下順序引用:如果存在myapp.sls則引用myapp.sls,如果不存在,則引用myapp目錄下的init.sls。我們採用子目錄的方式對目錄進行規劃。在init.sls中指定該子目錄中的狀態檔案

 

.myconf對應與init.sls同目錄的myconf.sls狀態檔案,在該檔案中對Minion的/tmp/myconf.txt狀態進行描述

 

分別在base、dev、prod環境的myconf.txt中寫入不同內容,執行如下命令讓不同環境的Minion處於對應的描述狀態

salt '*' state.apply  # 預設base環境salt '*' state.apply saltenv=dev # dev環境salt '*' state.apply saltenv=prod # prod環境

 

參考:

(1)    https://docs.saltstack.com/en/latest/topics/tutorials/states_pt4.html

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.