SaltStack 使用總結

SaltStack是一個開源的、新的基礎平臺管理工具,使用Python語言開發,同時提供Rest API方便二次開發以及和其他運維管理系統進行集成。相對於出道比較早的Puppet,SaltStack先天的優勢就是簡單、易用,可以非常快速的在團隊中推廣和使用,而且運行多平臺。

SaltStack目前擁有四大主要功能

 

  • 遠程執行:就是在管理節點上實現在上百臺、上千臺機器上同時執行一個命令。
  • 配置管理:也可以稱之爲狀態管理,你可以描述一個狀態。例如,某臺機器要安裝Nginx軟件包、Nginx必須是啓動的狀態、Nginx有一個配置文件(內容和某個地方的一樣)。你用一種描述語法描述出來後交給SaltStack,SaltStack就可以幫你實現,而不用你手動進行Nginx軟件包的安裝、配置文件的修改、啓動等。
  • 雲管理:SaltStack有一個組件叫作salt-cloud,它可以幫你自動化的進行雲主機的創建和管理,支持很多公有云或私有云,例如AWS、阿里雲、HP雲、OpenStack、CloudStack等。
  • 事件驅動:事件驅動基礎設施是SaltStack最強大也是最神祕的功能,前面的遠程執行和配置管理是最基礎的的,事件驅動是指SaltStack在日常運行中可以產生和捕捉事件,並根據捕捉到的事件觸發對應的操作。

SaltStack的四種運行方式

  • Local:在本地運行或者說單臺使用SaltStack
  • Minion/Master: 傳統的客戶端/服務器端(C/S)架構
  • Syndic: 使用代理實現架構擴展,用於管理更多的節點
  • Salt SSH: 無須安裝客戶端,直接通過SSH通信

目標機器匹配方法

SaltStack有以下幾種方式來選擇目標機器,靈活而又強大。大的來講分爲兩大類:

1. 基於Minion ID

Minion ID是客戶端(minion)的唯一標識符。可以在minion配置文件裏面使用ID選項進行配置,如果不指定,其默認是主機的FQDN名。Minion ID是不能變動的,因爲在進行key認證的時候,生成的文件名是以Minion ID命名的。如果Minion發生變動,就需要使用salt-key -d刪除老的Minion ID,然後重新加入新的Minion ID。

  • Globbing(通配符)
  • regex(正則表達式)
  • list(列表)

2. 不基於Minion ID

  • 子網/IP地址
  • Grains
  • Grains PCRE
  • Pillar
  • Compound matchers(複合匹配)
  • Node groups(節點組)
  • Batching execution(批處理執行)

演示

指定Minion ID是最直接的選擇目標的方法

查看所有minion節點

[root@salt ~]# salt-key  -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
128.docker.itnotebooks.com
Rejected Keys:

授權minion節點

可以修改/etc/salt/master的配置auto_accept:True自動認證

[root@salt ~]# salt-key -a 128.docker.itnotebooks.com
The following keys are going to be accepted:
Unaccepted Keys:
128.docker.itnotebooks.com
Proceed? [n/Y] y
Key for minion 128.docker.itnotebooks.com accepted.
  • salt-key -L: 顯示已經或未認證的minion節點,Accepted Keys爲已認證清單
  • salt-key -D: 刪除所有Minion節點的證書
  • salt-key -d id: 刪除單個minion節點的證書
  • salt-key -A: 接受所有minion節點的請求
  • salt-key -a id: 接受單個minion節點的請求

Globbing是指在Minion ID的基礎上,通過通配符來定位Minion。SaltStack默認使用Shell風格通配符(如“” “?” “[]”)來匹配Minion ID。不過需要注意的是,使用salt命令時必須將’’放在單引號中,或是用’\’轉義,用來避免shell解析。

匹配所有itnotebooks.com域的所有minion

[root@salt ~]# salt '*.itnotebooks.com' test.ping

匹配docker後面單個任意字符的Minion

[root@salt ~]# salt 'docker?.itnotebooks.com' test.ping

匹配docker節點1到節點3的Minion

[root@salt ~]# salt 'docker[1-3].itnotebooks.com' test.ping

匹配docker不是節點1和節點3的Minion

[root@salt ~]# salt 'docker[!13].itnotebooks.com' test.ping

list和直接Minion ID都是最基本的模式,可以列出每一個Minion ID來指定多個目標機器,使用選項’-L’

 

[root@salt ~]# salt -L 'docker1.itnotebooks.com,docker2.itnotebooks.com' test.ping

Salt可以使用Perl風格的正則表達式來匹配Minion ID,使用選項-E

[root@salt ~]# salt -E 'linux-(node1|node2)*' test.ping

規範的Minion ID可以很好的反映出該服務器運行的相關服務及所在位置

redis-node1-redis03-idc04-soa.itnotebooks.com
  • redis-node1:運行的服務是Redis,這是第一個節點
  • redis03:說明這個redis是Redis集羣編號03裏面的節點
  • idc04:這臺服務器運行在編號04的IDC機房中
  • soa:這臺服務器是給SOA服務使用的
  • itnotebooks.com:運行的服務器是itnotebooks.com業務

也可以使用IP地址或CIDR子網來指定目標,目前僅支持IPv4的地址

[root@salt ~]# salt -S '192.168.18.33' test.ping
[root@salt ~]# salt -S '192.168.18.0/24' test.ping

也可以使用Grains對Trageting進行匹配,使用選項’-G’

匹配所有CentOS系統的Minion

[root@salt ~]# salt -G 'os:CentOS' test.ping

通過Grain匹配非常靈活,如果你想進行更復雜的基於Grains的匹配,SaltStack提供了Grain PCRE,可以在Grains的基礎上使用正則表達式

[root@salt ~]# salt --grain-pcre 'os_family:Red(Hat|Flag)' test.ping

Pillar的數據可以用來定位Minion,爲定位Minions提供了靈活性和終極控制

[root@salt ~]# salt -I 'apache:httpd' test.ping

Compound matchers(混合匹配)可以使用布爾操作符連接多個目標條件。混合匹配可以用前面討論的多種方式實現精確的匹配。混合配匹配默認使用Globbing,如果要使用其它匹配方式,需要加上類型前綴字母如下表所示。

複合匹配中也可以使用and、or、not操作符,例如要匹配主機名以及webserv開始且運行Debain系統的Minion,還能匹配主機名滿足正則表達式web-dc1-srv.*的Minion

[root@salt ~]# salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
  • G表示用shell通配符匹配Grains
  • E表示用正則表達式匹配Minion ID

需要注意的是not不能用於第一個條件,需要用時可以像下面這樣寫:

[root@salt ~]# salt -C '* and not G@kernel:Darwin' test.ping

Node group是在Master中nodegroup用複合條件字義的一組Minion

[root@salt ~]# vim /etc/salt/master
nodegroups:
  group1: '[email protected],linux-node2.itnotebooks.com'
[root@salt ~]# systemctl restart salt-master
[root@salt ~]# salt -N group1 test.ping
linux-node2.itnotebooks.com
    True
linux-node1.itnotebooks.com
    True

遠程執行命令-查看內存使用

[root@salt ~]# salt 'linux-node1.itnotebooks.com' cmd.run 'free -m'
              total        used        free      shared  buff/cache   available
Mem:           1838         749         119           0         969         887
Swap:             0           0           0

遠程執行命令-查看操作系統類型

[root@salt ~]# salt 'linux-node1.itnotebooks.com' grains.item osfullname
linux-node1.itnotebooks.com:
  osfullname: CentOS

遠程執行命令-查看指定發行版本號爲6.4的主機的python版本

[root@salt ~]# salt -G 'osrelease:6.4' cmd.run 'python -V'
linux-node1.itnotebooks.com:
  Python 2.6.6

遠程執行命令-解壓文件

[root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gunzip /tmp/jdk-8.1.0.gz

遠程執行命令-壓縮文件

[root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gzip /tmp/test.txt

除了上面所提到的外,其它類似的模塊還有很多很多
如cp、cron、file、iptables、network、dnsuti、service、pkg等等,詳細的自己用過就知道了,當然你也可以在cmd.run裏面去完成這一切

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章