saltstack運維工具


salt介紹

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

salt強大嗎

系統管理員日常會進行大量的重復性操作,例如安裝軟件,修改配置文件,創建用戶,批量執行命令等

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

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

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

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

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

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

1、環境准備

准備3台機器,配置好ip地址,互相可以通信,即可
互ping一下看看通沒通  ping192.168.61.138
一個master

一個minion

一個minion

2、配置hosts解析文件

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

vim /etc/hosts   

192.168.16.142  s20

192.168.16.7 docker01

192.168.16.47  bogon

3、下載saltstack軟件包

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

    2.在minion1上安裝
        yum install salt-minion -y
        
    3.在minion2上安裝
        yum install salt-minion -y

4、配置文件

【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

5、重啟master和minion,檢查密鑰是否匹配

重啟

salt通信是在minion初次啟動時候,建立新的連接的

systemctl restart salt-master
systemctl restart salt-minion

檢查master和minion的秘鑰匹配

【在master上執行】

【在minion上獲取minion的秘鑰】

確認密鑰匹配進行下一步

6、查看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自動接受請求
[root@szx ~]# salt-key -L
Accepted Keys:  #已經接受的key
Denied Keys:    #拒絕的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊銷的key

7、驗證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模塊實際上還有許多其他的函數

[root@master 192.168.199.155 ~]$salt '*' sys.list_functions test
slave:
    - test.arg
    - test.arg_repr
    - test.arg_type
    - test.assertion
    - test.attr_call
    - test.collatz
    - test.conf_test
    - test.cross_test
    - test.echo
    - test.exception
    - test.fib
    - test.get_opts
    - test.kwarg
    - test.module_report
    - test.not_loaded
    - test.opts_pkg
    - test.outputter
    - test.ping
    - test.provider
    - test.providers
    - test.rand_sleep
    - test.rand_str
    - test.retcode
    - test.sleep
    - test.stack
    - test.try_
    - test.tty
    - test.version
    - test.versions_information
    - test.versions_report

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',
        }
    }
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]
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM