歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> SaltStack快速了解,SaltStack

SaltStack快速了解,SaltStack

日期:2017/3/3 18:10:51   编辑:學習Linux

SaltStack快速了解,SaltStack

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 # Master
systemctl 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.sls
conf1:
  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/dev
My 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

http://xxxxxx/Linuxjc/1162618.html TechArticle

Copyright © Linux教程網 All Rights Reserved