【Liunx】saltstack運維工具

salt介紹

 saltstack是由thomas Hatch於2011年建立的一個開源項目,設計初衷是爲了實現一個快速的遠程執行系統。前端

salt強大嗎

系統管理員平常會進行大量的重複性操做,例如安裝軟件,修改配置文件,建立用戶,批量執行命令等python

等。若是主機數量龐大,單靠人工維護實在讓人難以忍受。linux

  早期運維人員會根據本身的生產環境來寫特定腳本完成大量重複性工做,這些腳本複雜且難以維護。系統管理員面臨的問題主要是一、系統配置管理,二、遠程執行命令,所以誕生了不少開源軟件,系統維護方面有fabric、puppet、chef、ansible、saltstack等,這些軟件擅長維護系統狀態或方便的對大量主機進行批量的命令執行。nginx

  salt靈活性強大,能夠進行大規模部署,也能進行小規模的系統部署。salt的設計架構適用於任意數量的服務器,從少許本地網絡系統到跨越數個數據中心,拓撲架構都是c/s模型,配置簡單。docker

  不論是幾臺、幾百臺、幾千臺服務器,均可以使用salt在一箇中心節點上進行管控,靈活定位任意服務器子集來運行命令。 json

  Salt是python編寫的,支持用戶經過python自定義功能模塊,也提供了大量的python API接口,用戶能夠根據須要進行簡單快速的擴展。vim

saltstack的運行方式

  • Local  本地運行,交付管理
  • Master/Minion   <<<   經常使用方式   
  • Salt SSH   不須要客戶端

salt部署基本架構

在安裝salt以前,先理解salt架構中各個角色,主要區分是salt-master和salt-minion,顧名思義master是中心控制系統,minion是被管理的客戶端。數組

salt架構中的一種就是master > minion。安全

在遠程執行系統中,salt用python經過函數調用完成任務。服務器

運行salt依賴包

複製代碼
python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2
複製代碼

服務器環境準備

關閉服務器安全策略

複製代碼
關閉firewalld
systemctl disable firewalld
systemctl stop firewalld

關閉iptables
iptables -F

關閉selinux
複製代碼

安裝saltstack

一、環境準備

複製代碼
準備3臺機器,配置好ip地址,互相能夠通訊,便可
互ping一下看看通沒通  ping192.168.61.138
一個master

一個minion

一個minion
複製代碼

二、配置hosts解析文件

複製代碼
配置hosts解析文件,強制進行主機名解析,加速salt的minion查找,分別在三臺機器上,寫入解析

vim /etc/hosts   

192.168.16.142  s20

192.168.16.7 docker01

192.168.16.47  bogon
複製代碼

三、下載saltstack軟件包

複製代碼
配置阿里雲的源,下載saltstack軟件包,  注意區分 服務端和客戶端
    1.在master上安裝
        yum install salt-master -y

    2.在minion1上安裝
        yum install salt-minion -y
        
    3.在minion2上安裝
        yum install salt-minion -y
複製代碼

四、配置文件

【salt-master配置文件】

配置文件在/etc/salt/master

vim master  # 打開配置文件,填入以下內容

複製代碼
interface: 0.0.0.0      #綁定到本地的0.0.0.0地址
publish_port: 4505 #管理端口,命令發送
user: root      #運行salt進程的用戶
worker_threads: 5  #salt運行線程數,線程越多處理速度越快,不要超過cpu個數
ret_port: 4506     #執行結果返回端口
pidfile: /var/run/salt-master.pid  #pid文件位置
log_file: /var/log/salt/master  #日誌文件地址

#自動接收minion的key
auto_accept: False
複製代碼

【salt-minion1配置文件】

vim /etc/salt/minion  # 打開配置文件,填入以下內容

master: s20     #指定mastet的通訊地址  
master_port: 4506
user: root
id:  s20minion1      #id用於指定minion的身份信息 ,待會能夠在master上查看到的
acceptance_wait_time: 10
log_file: /var/log/salt/minion

【salt-minion2配置文件】

vim /etc/salt/minion  # 打開配置文件,填入以下內容

master: s20
master_port: 4506
user: root
id:  s20minion2        
acceptance_wait_time: 10
log_file: /var/log/salt/minion

五、重啓master和minion,檢查密鑰是否匹配

重啓

salt通訊是在minion初次啓動時候,創建新的鏈接的

systemctl restart salt-master
systemctl restart salt-minion

檢查master和minion的祕鑰匹配

【在master上執行】

【在minion上獲取minion的祕鑰】

確認密鑰匹配進行下一步

六、查看minion的密鑰信息

在minion啓動後鏈接master會請求master爲其簽發證書,等待證書籤發完成後,master能夠信任minion,而且minion和master之間的通訊是加密的。

在salt-master執行

salt-key命令用於管理mionion祕鑰

複製代碼
在master機器上,查看minion的密鑰信息

salt-key -L  #查看全部密鑰

salt-key -a  s20minion1  #-a參數 單獨接受一個密鑰信息

salt-key -A    #-A  接受全部的key信息


#經常使用參數
-L  #查看KEY狀態
-A  #容許全部
-D  #刪除全部
-a  #認證指定的key
-d  #刪除指定的key
-r  #註銷掉指定key(該狀態爲未被認證)

#在master端/etc/salt/master配置
auto_accept: True   #若是對Minion信任,能夠配置master自動接受請求
複製代碼
1
2
3
4
5
[root@szx ~] # salt-key -L
Accepted Keys:   #已經接受的key
Denied Keys:     #拒絕的key
Unaccepted Keys: #未加入的key
Rejected Keys: #吊銷的key

七、驗證salt minion信息是否存活

salt  "*" test.ping

轉化爲json信息

將輸出的結果,轉化爲json信息,能夠序列化後,丟給前端渲染

salt  "*" test.ping --out=json

salt的命令學習

上面咱們已經配置完master和minion的通訊,接下來咱們就能夠經過salt命令來批量管理minion機器了

複製代碼
【驗證salt minion信息是否存活】
    salt  "*" test.ping
【轉化爲json信息】
    salt  "*" test.ping --out=json
【讓機器遠程返回主機名給我】
    salt --summary '*' cmd.run 'hostname'
【遠程安裝軟件】
    salt "*"  cmd.run "yum install nginx -y"
【salt安裝軟件的接口】
    遠程安裝nginx:salt '*' pkg.install  'nginx'
    遠程卸載nginx:salt '*' pkg.remove "nginx"
    檢查pkg包的版本:salt '*' pkg.version "nginx"
【遠程管理服務模塊】
    # 管理服務是系統管理員的重要任務,經過salt管理minion服務會很簡單,使用service模塊
    salt '*' service.start "nginx"    
    salt '*' service.stop "nginx"
    salt '*' service.restart "nginx"
複製代碼

查看master和minion都安裝了哪些軟件

【master端】

rpm -ql salt-master
/etc/salt/master      # salt master主配置文件
/usr/bin/salt           #salt master 核心操做命令
/usr/bin/salt-cp       #salt 文件傳輸命令
/usr/bin/salt-key    #salt證書管理
/usr/bin/salt-master    #salt master 服務命令
/usr/bin/salt-run          #salt master runner命令

【minion端】

rpm -ql salt-minion
/etc/salt/minion     #minion配置文件
/usr/bin/salt-call    #拉取命令
/usr/bin/salt-minion   #minion服務命令
/usr/lib/systemd/system/salt-minion.service   #minion啓動腳本

【test模塊】

複製代碼
[root@master ~]# salt '*' test.ping
slave:
    True

# salt 是一個命令 
# * 表示目標主機, 在這裏表明全部目標主機 
# test.ping是salt遠程執行的一個模塊下面的方法。
複製代碼

這是條很簡單的探測minion主機存活命令,也是遠程執行命令,咱們經過master發送消息給"*"全部的minion,而且告訴他們運行salt內置的命令(也是python模塊中的一個函數),返回true表示slave機器監控存活。

test模塊實際上還有許多其餘的函數

  View Code

測試下test.echo

[root@master 192.168.199.155 ~]$salt '*' test.echo 'henry nb666'
slave:
    henry nb666

test.fib生成斐波那契數列

菲波那切數列定義是第0項是0,第1項是1,數列從第3項開始,每一項等於前兩項之和。

複製代碼
[root@master 192.168.199.155 ~]$salt '*' test.fib 50
slave:
    |_
      - 0
      - 1
      - 1
      - 2
      - 3
      - 5
      - 8
      - 13
      - 21
      - 34
    - 1.09672546387e-05
複製代碼

salt命令的兩種輸出格式

【 json】

salt  "*" test.ping --out=json

 【yaml】

salt  "*" test.ping --out=yaml

【yaml語法學習】

複製代碼
在學習saltstack過程當中,第一要點就是States編寫技巧,簡稱SLS文件。這個文件遵循YAML語法。初學者看這玩意很容易懵逼,來,超哥拯救你學習YAML語法
json xml yaml 數據序列化格式
yaml容易被解析,應用於配置文件

salt的配置文件是yaml配置文件,不能用tab
saltstack,k8s,ansible都用的yaml格式配置文件


語法規則
    大小寫敏感
    使用縮進表示層級關係   
    縮進時禁止tab鍵,只能空格
    縮進的空格數不重要,相同層級的元素左側對其便可
    # 表示註釋行
yaml支持的數據結構
    對象: 鍵值對,也稱做映射 mapping 哈希hashes 字典 dict    冒號表示 key: value   key冒號後必須有
    數組: 一組按次序排列的值,又稱爲序列sequence 列表list     短橫線  - list1
    純量: 單個不可再分的值

對象:鍵值對
yaml
    first_key:
      second_key:second_value

python
    {
        'first_key':{
            'second_key':'second_value',
        }
    }
複製代碼
1
2
3
4
YAML是YAML Ain't Markup Language的首字母縮寫,YAML的語法簡單,
結構體經過空格展現
項目使用  '-'  表明
鍵值對經過  ':'  分割
YAML語法遵循固定的縮進風格,表示數據層級結構關係,saltstack須要每一個縮進級別由2個空格組成,禁止用tabs!!!
複製代碼
Python中的字典是簡單的鍵值對,go語言中稱做哈希表map
字典的key經過冒號分割

key在YAML中表現形式是一個冒號結果的字符串
my_key: my_value
轉化到python語法中,上述命令爲
{'my_key':'my_value'}

value還能夠經過縮進和key關聯,四個空格!!
my_key:
    my_value 
轉化爲python語法一樣的
{'my_key':'my_value'}

YAML語法中字典是能夠嵌套的
one_dict_key:
    two_dict_key:value_dict
轉化爲python語法
{
  'one_dict_key':{
    'two_dict_key':'value_dict'
  }
}
複製代碼
複製代碼
短橫槓
YAML語法表示列表,使用一個橫槓加一個空格
多個項使用一樣的縮進級別做爲同一個列表的部分
- list_value_one
- list_value_two
- list_value_three
列表能夠做爲一個鍵值對的value,例如一次性要安裝多個軟件
my_dict:
  - l1
  - l2
  - l3
轉化爲python代碼理解就是
{
  'my_dict':['l1','l2',;l3]
}
複製代碼
相關文章
相關標籤/搜索