Saltstack快速入門簡單匯總

來源:互聯網
上載者:User
saltstack是使用python編寫的開源自動化部署與管理工具,擁有良好的擴充性以及優秀的執行效率,配置簡單,可以工作在多平台上,經常被描述為 Func加強版+Puppet精簡版。

saltsatck優點:首先,速度快,基於訊息佇列+線程,跑完多台裝置,都是毫秒層級的;其次,非常靈活,源碼是python,方便理解和自訂模組;最後,命令簡單,功能強大。

前言:在很久以前,只有幾台主機的時候當然不需要什麼自動糊工具,但是隨著硬體成本越來越低廉的今天,隨隨便便就好幾十台伺服器,靠手工不是搞不定,但是反覆的重複著沒有太多技術的操作一定會讓人抓狂的的,所以有必要選擇一個可以大量操作部署的自動化工具,諸如Pupet,ansible,rundeck,faric之類的工具不少少,礙於水平有限,暫時就saltstack稍微溜一點,簡單匯總一下基本的概念,操作等。

參考環境centos6.5

安裝:

複製代碼 代碼如下:


rpm -Uvh http://mirror.pnl.gov/epel/6/x86_64/epel-release-6-8.noarch.rpm


最新的似乎是2015.8.1,如果用pip安裝的話

master安裝

複製代碼 代碼如下:


yum install salt-master -y
chkconfig salt-master on
sed -i "s/# interface: 0.0.0.0/ interface: MasterIP地址/" /etc/salt/master ###綁定master端IP地址
service salt-master start ###啟動salt-master

Minion安裝

複製代碼 代碼如下:


yum install salt-minion –y
chkconfig salt-minion on
sed -i "s/#master: salt/ master: MasterIP地址/" /etc/salt/minion ###傳入Master端IP地址
service salt-minion start ###啟動salt-minion


如果開啟防火牆的話,需要配置防火牆,參考https://docs.saltstack.com/en/latest/topics/tutorials/firewall.html#iptables

複製代碼 代碼如下:


# Allow Minions from these networks
-I INPUT -s 10.1.2.0/24 -p tcp -m multiport --dports 4505,4506 -j ACCEPT
-I INPUT -s 10.1.3.0/24 -p tcp -m multiport --dports 4505,4506 -j ACCEPT
# Allow Salt to communicate with Master on the loopback interface
-A INPUT -i lo -p tcp -m multiport --dports 4505,4506 -j ACCEPT
# Reject everything else
-A INPUT -p tcp -m multiport --dports 4505,4506 -j REJECT

在master,minion分別啟動後會minion端會到master這裡申請認證

master執行:

複製代碼 代碼如下:


salt-key –L ##列出所有認證的用戶端
Accepted Keys:(已經接受的)
minion-id-1
Denied Keys:(未被允許的)
Unaccepted Keys:(未接受的)
minion-id-2
Rejected Keys:(拒絕的)
# salt-key –A ##接受所有

每個minion用戶端的都有一個minion_id 即上面的minion-id-1 minion-id-2 就是用戶端的minion_id 預設是取得用戶端的主機名稱,而minion-id是不能重複的!!!

註:如需更改需要在用戶端修改/etc/salt/minion_id設定檔,此檔案只有在salt-minion啟動後才會產生

Salt-key常用命令

複製代碼 代碼如下:


salt-key –a 接受某個用戶端請求
salt-key –A 接受所有用戶端請求
salt-key –d 刪除單個用戶端
salt-key –D 刪除所有用戶端


註:刪除之後,如需重新認證,重啟用戶端即可

Salt設定檔

兩個重要的配置參數是file_roots(定義環境的目錄),nodegroups(定義組)

主要設定檔在/etc/salt/master(master端)

/etc/salt/minion(minion端)

註:master端設定檔預設是會載入所有/etc/salt/master.d/(此目錄預設不存在,需自己建立)目錄下的所有以.conf結尾的設定檔,為了更易閱讀,我將所有的自訂參數每個單一的建立一個設定檔,如環境變數,可以分別設定生產,測試,開發環境,在往下分就是主機的應用層級分類,根據具體環境,具體設定。

複製代碼 代碼如下:


/etc/salt/master.d/env.conf
file_roots:
base:
- /data/salt/base
- /data/salt/base/sls
apache:
- /data/salt/apache
- /data/salt/apache/confsls
nginx:
- /data/salt/tomcat
- /data/salt/nginx/confsls
mysql:
- /data/salt/mysql

如上述配置所述,一共定義了四個個環境,分別是base,apache,nginx,mysql等,環境變數的作用在下面會說到,主要是配合sls檔案使用

不同環境的sls設定檔的目錄分別放在對應的目錄,比如base環境的sls檔案,既可以放在/data/salt/base 也可以放在/data/salt/base/sls,其中sls檔案是什麼會在後面說到

接下來配置所有minion的分組資訊,按照用途或者不同ip等分類資訊分別定義組名

複製代碼 代碼如下:


/etc/salt/master.d/groups.conf
nodegroups:
redis: 'redis*'
mysql: 'mysql*'
apache: 'tomcat* not apache-[1][3-4]'
nottom: '* not tomcat*'

如上所述上面一共定義了四個組

註:注意上面的格式,salt幾乎所有的設定檔遵循兩個空格為一個遞進的方式(即file_root下面空兩個的都是它的參數,二它參數下面空兩格的又是它參數的參數,後面寫設定檔會更全面的介紹),而且不能用tab鍵補全!!!

Salt常用命令:

Salt文法

salt [用戶端id,即目標] [模組名,如state,cmd。其實都是salt的模組] [動作]

接觸saltstack的第一個salt命令一定是test.ping,主要用於探測用戶端的存活狀態

註:常用的兩個模組主要是state,cmd兩個模組,分別對應的功能就是state(狀態,在後面會詳細敘述,什麼是狀態),以及cmd(遠程執行,而用到此模組的方法一般就是cmd.run)

首先介紹target,目標,或者說用戶端id的匹配方式

複製代碼 代碼如下:


[root@master~]# salt \* test.ping
minion-1:
True
minion-2:
True
minion-3:
True
minion-4:
True

True代表正常,沒有響應當然代表用戶端沒有啟動或者沒有認證成功之類的。

指定目標主要有五種方式

一: Global,即salt預設的匹配方式,能識別終端常用的萬用字元,如*代表所有

如,salt '*' test.ping

二: List,列表,需-L指定。

如,salt -L 'foo,bar' test.ping 其中foo,bar是完整的minion_id

三:Regex,需-E指定。

如,salt -E 'pre[1-7]' test.ping 會匹配pre1,pre2..pre7,並且匹配到左右minion_id裡面含有1-7的,如pre-11,pre7也會匹配到,如果只匹配1-7可使用參照下面

如,salt -E ^pre[1-7]$ test.ping或者 salt pre[1-7] test.ping

四:混合模式,需-C指定。裡面可以既有Regex也有列表等

salt -C "apache* or E@ngin*" test.ping 匹配所有tomcat開頭,或者mon開頭的

五:分組,需要-N指定,其中組名就是上面/etc/salt/master.d/groups.conf檔案裡面配置的配置資訊。

如,salt -N apache test.ping

然後是模組,主要介紹state,cmd,cp模組

註:想瞭解某個模組的功能或者具體參數可以

salt \* sys.doc [模組名,如cmd]

即salt \* sys.doc cmd 就會列出相關操作及樣本了

遠程命令執行

遠程命令執行大概是最常用的操作的,比如擷取所有minion端的ip地址,查看同一個目錄下的檔案,全部增加一條環境變數到/etc/profile檔案裡並重新整理環境變數等等操作

cmd模組

主要用此模組的run方法,即cmd.run

使用方式如下,

salt \* cmd.run 'ls /root'

如上所示,選擇了所有的用戶端,master端用cmd.run模組,把''裡面的'ls /root'命令全部分發下去,其中單引號''也可以用雙引號""代替,引號的作用就是把被引號的命令傳給salt-master,然後master分發給所有的minion執行,上述命令就會列出所有minion端/root目錄下的檔案

註:引號裡面的命令跟在任何一台機器上的命令沒有任何區別,唯一的區別就是salt執行的命令預設用的是sh,而我們常用的shell是bash,比如bash中ll是ls –l的別名,而sh裡面是沒有做ll的別名的,所以引號裡面的命令如果用ll命令會提示找不到此命的

cmd有幾個有用的參數,在可以著重介紹一下

cwd 定義命令所在的目錄,即工作目錄,在哪個目錄執行操作
如:

複製代碼 代碼如下:


Salt \* cmd.run cwd=/opt ‘pwd'
minion-id-1:
/opt


runas,定義執行此條命令的使用者,使用哪個使用者執行這條命令
如:

複製代碼 代碼如下:


Salt \* cmd.run runas=nobody ‘touch /tmp/file'

然後去用戶端就會發現,在/tmp/目錄下有一個file檔案,擁有者是nobody

然後就state模組了

主要用到的幾個方法是sls,highstate,show_sls

在講state模組的時候首先得瞭解sls檔案。

Sls檔案用.sls結尾,放在指定的環境目錄下,即提到的/data/salt/base /data/salt/base/sls或者/data/salt/apache/sls等目錄

註:假如在這兩個目錄下有兩個一樣的sls檔案,那麼會file_root配置的第一個環境目錄,即

比如環境:

base:

複製代碼 代碼如下:


/data/salt/base
/data/salt/base/sls

會執行/data/salt/base裡的sls檔案,因為它在前一行

sls檔案基本格式如下:

例子一

複製代碼 代碼如下:


/tmp/ttt20:
file.managed:
- source: salt://files/tst
- mode: 700
- backup: minion
- makedirs: True

例子二

複製代碼 代碼如下:


testfile:
file.managed:
- name: /tmp/ttt20
- source: salt://files/tst
- mode: 700
- backup: minion
- makedirs: True

如上所示,其執行個體子一與例子二是達成了一樣的效果,只不過寫法不一樣
像例子一,因為沒有- name: /tmp/ttt20所以,它會去第一行的標識作為name
,而例子二的testfile可以任意起名,只要不與該檔案中的其他標識一樣即可。

上面的例子達到的功能就是,將/srv/salt/files/tst檔案複製到用戶端的/tmp/ttt20位置,如果存在則替換,如果已存在且一樣則提示is correct state,即已經是正確的狀態了。

然後就是top.sls

在每個獨立的salt環境下有且只能有一個top.sls檔案,這個檔案為該環境的入口檔案,裡面記錄了目標主機對應的sls檔案
如:

base:

minion-id-1:
- test1
- test2

minion-id-2:
- test1
- test3

以tomcat-1為例

它匹配了

- test1
- test2

上面一共是一個2個sls設定檔,即匹配該環境下的test11.sls,test2.sls檔案
所以在執行state模組的時候,它會去檢索這些對應的設定檔並執行該設定檔裡的內容。
註:在前面提到過,這些參數前面的空格不能用tab鍵補全或者少寫,不然會報錯,再者就是如果設定檔為xxxx.sls 在調用這個設定檔的時候只要寫xxxx,即它的檔案名稱,沒有尾碼

以test1為例

複製代碼 代碼如下:


/tmp/testfile.txt:
file.managed:
- source: salt://test.txt
- mode: 700
- user: root
- mode: 644
- makedirs: True

功能就是調用file模組,將salt://test.txt(其中,salt://對於該環境的file_root目錄,即/data/salt/base)與目標的/tmp/testfile.txt檔案做比對,如不一致則更新。

並且此檔案的擁有者為root mask碼為644,如果目標檔案目錄不存在就建立

現在回到highstate,sls,show_sls方法

執行如下

複製代碼 代碼如下:


salt \* state.sls test
salt \* state.highstate
salt \* state.show_sls test

上面的意思依次是

1.在當前環境下尋找test.sls檔案並執行

2.匹配當前環境的top.sls檔案所有的sls檔案並執行

3.查看當前環境test.sls檔案的執行內容,但是不在用戶端執行。

註:上面特別提到了是在當前環境,預設情況下,salt只會尋找執行base環境下的sls檔案,不會執行其他環境的設定檔,所以在不同環境下,需要指定要執行的配置環境,比如apache環境,只是執行apache的sls檔案的話,則需聲明saltenv=apache,如下

複製代碼 代碼如下:


salt \* state.sls test saltenv=apache
salt \* state.highstate saltenv=apache
salt \* state.show_sls test saltenv=apache
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.