通過 SaltStack 管理伺服器配置
我在搜尋Puppet的替代品時,偶然間碰到了Salt。我喜歡puppet,但是我又愛上Salt了:)。我發現Salt在配置和使用上都要比Puppet簡單,當然這只是一家之言,你大可不必介懷。另外一個愛上Salt的理由是,它可以讓你從命令列管理伺服器配置,比如:
要通過Salt來更新所有伺服器,你只需執行以下命令即可
salt '*' pkg.upgrade
安裝SaltStack到Linux上
如果你是在CentOS 6/7上安裝的話,那麼Salt可以通過EPEL倉庫獲取到。而對於Pi和Ubuntu Linux使用者,你可以從這裡新增Salt倉庫。Salt是基於python的,所以你也可以使用‘pip’來安裝,但是你得用yum-utils或是其它包管理器來自己處理它的依賴關係。
Salt採用伺服器-客戶端模式,伺服器端稱為領主,而客戶端則稱為下屬。
安裝並配置Salt領主
[root@salt-master~]# yum install salt-master
Salt配置檔案位於/etc/salt和/srv/salt。Salt雖然可以開箱即用,但我還是建議你將日誌配置得更詳細點,以方便日後排除故障。
[root@salt-master ~]# vim /etc/salt/master # 預設是warning,修改如下 log_level: debug log_level_logfile: debug [root@salt-master ~]# systemctl start salt-master
安裝並配置Salt下屬
[root@salt-minion~]#yum install salt-minion # 新增你的Salt領主的主機名 [root@salt-minion~]#vim /etc/salt/minion master: salt-master.com # 啟動下屬 [root@salt-minion~] systemctl start salt-minion
在啟動時,下屬客戶機會生成一個金鑰和一個id。然後,它會連線到Salt領主伺服器並驗證自己的身份。Salt領主伺服器在允許下屬客戶機下載配置之前,必須接受下屬的金鑰。
在Salt領主伺服器上列出並接受金鑰
# 列出所有金鑰 [root@salt-master~] salt-key -L Accepted Keys: Unaccepted Keys: minion.com Rejected Keys: # 使用id 'minion.com'命令接受金鑰 [root@salt-master~]salt-key -a minion.com [root@salt-master~] salt-key -L Accepted Keys: minion.com Unaccepted Keys: Rejected Keys:
在接受下屬客戶機的金鑰後,你可以使用‘salt’命令來立即獲取資訊。
Salt命令列例項
# 檢查下屬是否啟動並執行 [root@salt-master~] salt 'minion.com' test.ping minion.com: True # 在下屬客戶機上執行shell命令 [root@salt-master~]# salt 'minion.com' cmd.run 'ls -l' minion.com: total 2988 -rw-r--r--. 1 root root 1024 Jul 31 08:24 1g.img -rw-------. 1 root root 940 Jul 14 15:04 anaconda-ks.cfg -rw-r--r--. 1 root root 1024 Aug 14 17:21 test # 安裝/更新所有伺服器上的軟體 [root@salt-master ~]# salt '*' pkg.install git
salt命令需要一些元件來傳送資訊,其中之一是下屬客戶機的id,而另一個是下屬客戶機上要呼叫的函式。
在第一個例項中,我使用‘test’模組的‘ping’函式來檢查系統是否啟動。該函式並不是真的實施一次ping,它僅僅是在下屬客戶機作出回應時返回‘真’。
‘cmd.run’用於執行遠端命令,而‘pkg’模組包含了包管理的函式。本文結尾提供了全部內建模組的列表。
顆粒例項
Salt使用一個名為顆粒(Grains)的介面來獲取系統資訊。你可以使用顆粒在指定屬性的系統上執行命令。
[root@vps4544 ~]# salt -G 'os:Centos' test.ping minion: True
更多顆粒例項,請訪問http://docs.saltstack.com/en/latest/topics/targeting/grains.html。
通過狀態檔案系統進行包管理
為了使軟體配置自動化,你需要使用狀態系統,並建立狀態檔案。這些檔案使用YAML格式和python字典、列表、字串以及編號來構成資料結構。將這些檔案從頭到尾研讀一遍,這將有助於你更好地理解它的配置。
VIM狀態檔案例項
[root@salt-master~]# vim /srv/salt/vim.sls vim-enhanced: pkg.installed /etc/vimrc: file.managed: - source: salt://vimrc - user: root - group: root - mode: 644
該檔案的第一和第三行稱為狀態id,它們必須包含有需要管理的包或檔案的確切名稱或路徑。在狀態id之後是狀態和函式宣告,‘pkg’和‘file’是狀態宣告,而‘installed’和‘managed’是函式宣告。函式接受引數,使用者、組、模式和源都是函式‘managed’的引數。
要將該配置應用到下屬客戶端,請移動你的‘vimrc’檔案到‘/src/salt’,然後執行以下命令。
[root@salt-master~]# salt 'minion.com' state.sls vim minion.com: ---------- ID: vim-enhanced Function: pkg.installed Result: True Comment: The following packages were installed/updated: vim-enhanced. Started: 09:36:23.438571 Duration: 94045.954 ms Changes: ---------- vim-enhanced: ---------- new: 7.4.160-1.el7 old: Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1
你也可以新增依賴關係到你的配置中。
[root@salt-master~]# vim /srv/salt/ssh.sls openssh-server: pkg.installed /etc/ssh/sshd_config: file.managed: - user: root - group: root - mode: 600 - source: salt://ssh/sshd_config sshd: service.running: - require: - pkg: openssh-server
這裡的‘require’宣告是必須的,它在‘service’和‘pkg’狀態之間建立依賴關係。該宣告將首先檢查包是否安裝,然後執行服務。
但是,我更偏向於使用‘watch’宣告,因為它也可以檢查檔案是否修改和重啟服務。
[root@salt-master~]# vim /srv/salt/ssh.sls openssh-server: pkg.installed /etc/ssh/sshd_config: file.managed: - user: root - group: root - mode: 600 - source: salt://sshd_config sshd: service.running: - watch: - pkg: openssh-server - file: /etc/ssh/sshd_config [root@vps4544 ssh]# salt 'minion.com' state.sls ssh seven.leog.in: Changes: ---------- ID: openssh-server Function: pkg.installed Result: True Comment: Package openssh-server is already installed. Started: 13:01:55.824367 Duration: 1.156 ms Changes: ---------- ID: /etc/ssh/sshd_config Function: file.managed Result: True Comment: File /etc/ssh/sshd_config updated Started: 13:01:55.825731 Duration: 334.539 ms Changes: ---------- diff: --- +++ @@ -14,7 +14,7 @@ # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # -Port 22 +Port 422 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: ---------- ID: sshd Function: service.running Result: True Comment: Service restarted Started: 13:01:56.473121 Duration: 407.214 ms Changes: ---------- sshd: True Summary ------------ Succeeded: 4 (changed=2) Failed: 0 ------------ Total states run: 4
在單一目錄中維護所有的配置檔案是一項複雜的大工程,因此,你可以建立子目錄並在其中新增配置檔案init.sls檔案。
[root@salt-master~]# mkdir /srv/salt/ssh [root@salt-master~]# vim /srv/salt/ssh/init.sls openssh-server: pkg.installed /etc/ssh/sshd_config: file.managed: - user: root - group: root - mode: 600 - source: salt://ssh/sshd_config sshd: service.running: - watch: - pkg: openssh-server - file: /etc/ssh/sshd_config [root@vps4544 ssh]# cp /etc/ssh/sshd_config /srv/salt/ssh/ [root@vps4544 ssh]# salt 'minion.com' state.sls ssh
Top檔案和環境
top檔案(top.sls)是用來定義你的環境的檔案,它允許你對映下屬客戶機到包,預設環境是‘base’。你需要定義在基本環境下,哪個包會被安裝到哪臺伺服器。
如果對於一臺特定的下屬客戶機而言,有多個環境,並且有多於一個的定義,那麼預設情況下,基本環境將取代其它環境。
要定義環境,你需要將它新增到領主配置檔案的‘file_roots’指標。
[root@salt-master ~]# vim /etc/salt/master file_roots: base: - /srv/salt dev: - /srv/salt/dev
現在,新增一個top.sls檔案到/src/salt。
[root@salt-master ~]# vim /srv/salt/top.sls base: '*': - vim 'minion.com': - ssh
應用top檔案配置
[root@salt-master~]# salt '*' state.highstate minion.com: ---------- ID: vim-enhanced Function: pkg.installed Result: True Comment: Package vim-enhanced is already installed. Started: 13:10:55 Duration: 1678.779 ms Changes: ---------- ID: openssh-server Function: pkg.installed Result: True Comment: Package openssh-server is already installed. Started: 13:10:55. Duration: 2.156 ms
下屬客戶機將下載top檔案並搜尋用於它的配置,領主伺服器也會將配置應用到所有下屬客戶機。
這僅僅是一個Salt的簡明教程,如果你想要深入學習並理解,你可以訪問下面的連結。如果你已經在使用Salt,那麼請告訴我你的建議和意見吧。
閱讀連結
- http://docs.saltstack.com/en/latest/ref/states/top.html#how-top-files-are-compiled
- http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html
- http://docs.saltstack.com/en/latest/ref/states/highstate.html#state-declaration
顆粒
Salt和Puppet的充分比較
內建執行模組的完全列表
via: http://techarena51.com/index.php/getting-started-with-saltstack/
相關文章
- saltstack03的配置管理
- 【SaltStack】通過Master給Minion安裝MySQLASTMySql
- saltstack之nginx、php的配置NginxPHP
- saltstack之haproxy的安裝配置
- SaltStack中的檔案伺服器伺服器
- saltstack之keepalived的安裝配置
- saltstack/saltmaster配置檔案說明(二)AST
- 01 . SaltStack部署配置及簡單應用
- saltstack的安裝與簡單配置(一)
- Spring通過factory配置beanSpringBean
- spring通過註解配置Spring
- Saltstack自動化操作記錄(2)-配置使用
- Saltstack系列5:Saltstack之pillar元件元件
- 通過 Laradock 學 Docker —— 配置篇Docker
- 郵件伺服器配置和管理伺服器
- 通過VuePress管理專案文件(二)Vue
- 通過VuePress管理專案文件(一)Vue
- Saltstack系列2:Saltstack遠端執行命令
- Saltstack系列4:Saltstack之Grains元件AI元件
- SAP伺服器通過SMLG 登陸組的配置調節各服務的負載伺服器負載
- 通過 hosts檔案配置本地域名
- 通過vnc連線linux伺服器VNCLinux伺服器
- spring管理bean的生命週期與spring通過工廠方法配置beanSpringBean
- CentOS6/7 使用saltstack源安裝saltstackCentOS
- 專案管理:配置管理是一個過程專案管理
- 通過PowerShell管理Office 365的網站網站
- saltstack常用模組
- SaltStack實戰
- 通過Nginx配置檔案抵禦攻擊Nginx
- 通過JQuery ajax獲取伺服器時間jQuery伺服器
- 通過專案管理軟體克服管理瓶頸的方法?專案管理
- 通過 Git 來管理多媒體檔案Git
- 【最佳實踐】通過Terraform管理OSS資源ORM
- 通過pip刪除/管理django舊版本薦Django
- dcat-admin 通過 composer 配置外掛
- Linux學習-通過光碟配置本地yum源Linux
- 通過基準配置檔案改善應用效能
- 終於將SAP系統完全配置通過了