saltstack 基礎入門文檔

saltstack

簡述

Salt 和 Puppet Chef 同樣可讓你同時在多臺服務器上執行命令也包括安裝和配置軟件。Salt 有兩個主要的功能:配置管理和遠程執行。html

安裝

debian/ubuntu

  • 設置debian更新源
wget -q -O- "http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key" | apt-key add -
echo "deb http://debian.saltstack.com/debian wheezy-saltstack main" /etc/apt/sources.list
  • 設置ubuntu更新源
add-apt-repository ppa:saltstack/salt 或 
echo deb http://ppa.launchpad.net/saltstack/salt/ubuntu `lsb_release -sc` main | tee /etc/apt/sources.list.d/saltstack.list
wget -q -O- "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6" | apt-key add -
  • 安裝軟件包

<pre> apt-get update apt-get install salt-master # On the salt-master apt-get install salt-minion # On each salt-minion apt-get install salt-syndic </pre>node

RHEL6/CentOS6

  • 設置RHEL/CentOS更新源

rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm或python

rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm/linux

<pre> [epel] name=Extra Packages for Enterprise Linux 6 baseurl=http://download.fedoraproject.org/pub/epel/6/x86_64 failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 </pre>git

  • 安裝軟件包

<pre> yum update yum install salt-master # On the salt-master yum install salt-minion # On each salt-minion </pre>github


基本配置

saltstack 的配置文件格式web

Salt默認使用PyAMl語法(http://pyyaml.org) 做爲它的模板文件的格式,其餘不少模板語言在Salt中是可使用的。 必定要按照正確的格式書寫YAML,好比最基本的,它使用到兩個空格代替tab,: 或 - 後面要有空格。正則表達式

例一:shell

<pre> interface: 0.0.0.0 log_file: /var/log/salt/master key_logfile: /var/log/salt/key </pre>json

例二:

<pre> file_roots: base: - /srv/salt </pre>

服務端配置

主控端基本設置 編輯配置文件 /etc/salt/master,修改以下所示配置項,去掉前面的註釋符

<pre> interface: 0.0.0.0 # interface (服務端監聽IP),0.0.0.0 是監聽全部IP log_file: /var/log/salt/master # 記錄主控端運行日誌 key_logfile: /var/log/salt/key # 記錄認證證書日誌 </pre>

master默認監聽兩個端口, 4505(publish_port)爲salt的消息發佈系統,4506(ret_port)爲salt客戶端與服務端通訊的端口,因此確保客戶端能跟服務端的這2個端口通訊

客戶端配置

受控端基本設置 編輯配置文件 /etc/salt/minion,修改以下所示配置項,去掉前面的註釋符#

<pre> master: 42.121.124.237 # 設置主控端IP id: ubuntu-server-001 # 設定受控端編號 log_file: /var/log/salt/minion # 記錄受控端服務日誌 key_logfile: /var/log/salt/key # 記錄認證證書日誌 </pre>

最基本字段:

  • master: 服務端,
  • 主機名 id: 客戶端主機名(在服務端看到的客戶端的名字,能夠不設置,默認與hostname相同)

小技巧:查看配置文件信息,過濾註釋語句

<pre> sed -e '/^#/d;/^$/d' /etc/salt/minion </pre>

檢查服務

主控端,和受控端 啓動各自的服務,確保服務啓動後沒有任何報錯信息,若是異常請檢查相應日誌文件處理

<pre> 主控端: service salt-master restart 受控端: service salt-minion restart </pre>

證書管理

若是一切順利,請繼續!

saltstack 主控端是依靠openssl證書來與受控端主機認證通信的,受控端啓動後會發送給主控端一個公鑰證書文件,在主控端用 salt-key 命令來管理證書。

salt minion和master的認證過程:

  • minion在第一次啓動時,會在/etc/salt/pki/minion/下自動生成minion.pem(private key), minion.pub(public key),而後將minion.pub發送給master

  • master在接收到minion的public key後,經過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的public key, 而後master就能對minion發送指令了

<pre> salt-key -L # 用來查看證書狀況 salt-key -a <hostn> # 用來管理接受證書 </pre>

受控端證書認證後會顯示以下情形:

<pre> Accepted Keys: ubuntu-server-001 Unaccepted Keys: Rejected Keys: </pre>

主控端和被控端的證書默認都存放在 /etc/salt/pki/ 中,若是遇到證書不生效的狀況下,可在主控端證書存放目錄刪除受控端證書,從新認證一下。

簡單的測試

你能夠從master 使用一個內置命令 test.ping 來測試他們之間的鏈接

<pre> salt '*' cmd.run test.ping </pre>

它應該有以下輸出:

<pre> ubuntu-server-001: True </pre>

測試與外網的鏈接

<pre> salt '*' cmd.run "ping -c 4 baidu.com" </pre>

salt更多命令及手冊

<pre> salt '*' sys.doc </pre>

若是能返回正確結果,salt的基本配置就完成了。


salt的基本使用

salt按照操做模式能夠分爲實時管理和配置管理:

遠程執行,也能夠稱爲實時管理: 經過執行命令來完成管理任務,優勢就是實時性高,缺點就是沒法跟蹤,保存配置狀態; 配置管理,也能夠稱爲狀態管理: 經過編寫特定的文件用來記錄目標系統的配置狀態,而後將這些受控主機會按期同步這些配置狀態信息;

實時管理

有時候咱們須要臨時的查看一臺或多臺機器上的某個文件,或者執行某個命令,最通用的模塊是 cmd.run

  • 基本操做命令通用格式

<pre> 格式: 命令 對象 執行模塊 參數 示例:salt '*' cmd.run "ping -c 4 baidu.com" </pre>

  • '*' target,操做對象,可使用salt命令的擴展模式 -E -G 等
  • cmd.run func, 執行模塊,函數
  • 參數 args, 傳遞給 執行模塊的參數,

salt也將一些經常使用的命令作了集成,好比,查看全部節點磁盤使用狀況:

<pre> salt '*' disk.usage </pre>

其餘命令示例:

<pre> salt '*' grains.ls 查看grains分類 salt '*' grains.items 查看grains全部信息 salt '*' grains.item osrelease 查看grains某個信息 salt '*' pillar.items 查看pillar全部信息 </pre>

更多請參考文檔:http://docs.saltstack.com/ref/modules/all/index.html

nodegroup

做用:對minion進行分組

參考文檔: http://docs.saltstack.com/topics/targeting/nodegroups.html

編輯 /etc/salt/master 啓用分組,最基本分組示例:

<pre> nodegroups: UBUNTU: 'ubuntu-12.04-*' CENTOS: 'centos-6.4-*' </pre>

創建分組以後,操做對象使用分組功能才生效,更多示例:

<pre> nodegroups: group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com' group2: 'G@os:Debian and foo.domain.com' </pre>

在state或者pillar中引用的時候,以下:

<pre> base: group1: - match: nodegroup - webserver </pre>

請確保這條屬性存在

<pre> - match: nodegroup </pre>

更多請參考文檔:http://docs.saltstack.com/topics/targeting/nodegroups.html

targeting

從最基本的測試命令來說述:

<pre> salt '*' test.ping </pre>

引號中以實現很強大的minion的過濾與匹配技術

經常使用命令:

<pre> salt 'shell正則' 命令 salt -E 'prel 正則' 命令 salt -N GroupName 命令 salt -L 'server_id1,server_id2,server_id3' 命令 </pre>

示例:

<pre> salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping </pre>

更多請參考官方文檔: http://docs.saltstack.com/topics/targeting/compound.html

配置管理,或稱狀態管理

我的理解,管理一個服務器應用能夠從 軟件包,配置文件,服務管理 這個三個最基本角度來出發,要啓用配置管理,首先應對受控端進行額外的配置

配置受控端

配置受控端主機,以root用戶身份來接受主控端主機的管理

  • 編輯/etc/salt/minion

<pre>user: root</pre>

配置主控端,開啓配置管理功能

Salt的配置管理指令和文件保存在默認在/srv/salt目錄下,這裏存放着全部的配置文件,和一些你想要拷貝到從服務器的文件。

配置主控端,編輯 /etc/salt/master 文件

<pre> file_roots: base: - /srv/salt </pre>

手動建立目錄和配置文件 /srv/salt/top.sls

  • /srv/salt/top.sls 爲默認入口配置文件,這個配置項能夠自定義,基本配置以下:

<pre> base: '*': - ubuntu.vim </pre>

__ 詳細解釋一下這個本配置文件的參數 __

  • base: 默認的的起點配置項:
  • '*': 這個引號內的是匹配對象,針對全部受控主機
  • ubuntu.vim 就是指資源文件/srv/salt/ubuntu/vim.sls

一個簡單的例子:ubuntu 基本系統默是不安裝 vim 咱們能夠利用配置管理把被託管的ubuntu主機所有安裝上vim

編輯 /srv/salt/ubuntu/vim.sls

<pre> vim: pkg: - name: vim - installed </pre>

執行命令

<pre>salt '*' state.highstate </pre>

請注意觀察返回結果,查看/var/log/salt/下面的日誌來調試saltstack配置。


稍微複雜的例子:管理ssh服務

一個更復雜的例子:管理ssh服務,而且使用salt託管配置文件

  • /srv/salt/top.sls 內容:

<pre> base: '*': - ubuntu.ssh </pre>

  • /srv/salt/ubuntu/ssh.sls

<pre> ssh: pkg: - name: ssh - installed service: - name: ssh - running - reload: True - watch: - file: /etc/ssh/ssh_config /etc/ssh/ssh_config: file.managed: - source: salt://ubuntu/ssh_config - user: root - group: root - mode: 644 </pre>

簡要解釋一下配置文件

  • pkg, service , file 這些都是salt的管理模塊,pkg 是包管理模塊; file是文件管理模塊; service 是包服務管理模塊
  • 模塊下一級是各個管理模塊配置項的屬性,以 service: 模塊爲例
  • name: ssh ubuntu下的服務腳本名稱是 ssh
  • running 狀態是持續運行,若是受控端配置了自動同步,每格一段時間就會對其狀態進行檢查
  • reload: True 是否重載服務
  • watch: 監視文件
  • 最後兩條屬性的總體含義是若是配置文件 /etc/ssh/ssh_config 發生變化,服務重啓更新
  • source: salt://ubuntu/ssh_config 託管的配置文件實際存儲在 /srv/salt/ubuntu/ssh_config

一樣,使用以下命令來驗證結果須要

<pre> salt '*' state.highstate </pre>


參考

二進制軟件包

rpm deb 不一樣包管理體系,不一樣發行版二進制包拆分命名規則不盡相同,相比之下 deb 拆分的力度要更細些。

RHEL6/CentOS 軟件包列表

  • salt
  • salt-master
  • salt-minion
  • salt-api
  • salt-cloud

Deian/Ubuntu 軟件包列表

  • salt-master
  • salt-minion
  • salt-syndic
  • salt-doc
  • salt-common
  • salt-cloud
  • salt-cloud-doc
  • salt-api
  • salt-ssh

下面按照服務端(主控端)和客戶端(受控端)來講明主要功能項。

主控端命令列表

  • /usr/bin/salt 主控命令
  • /usr/bin/salt-cp 批量複製文件
  • /usr/bin/salt-key 證書管理
  • /usr/bin/salt-master 服務端程序
  • /usr/bin/salt-run 管理虛擬機
  • /usr/bin/salt-ssh 管理ssh
  • /usr/bin/salt-syndic master分佈式節點服務程序

受控端命令列表

  • /usr/bin/salt-call
  • /usr/bin/salt-minion 客戶端程序

啓用擴展配置文件目錄

  • 主控端 /etc/salt/master

<pre> default_include: master.d/*.conf </pre>

  • 受控端 /etc/salt/minion

<pre> default_include: master.d/*.conf </pre>

命令示例

salt

  • 測試與受控主機網絡是否通暢 <pre>salt '*' cmd.run test.ping </pre>

  • 在所有受控主機行執行命令 <pre>salt '*' cmd.run "uptime" </pre>

  • 使用 -E 按照正則匹配操做對象 <pre>salt -E 'ubuntu*' cmd.run "uptime" </pre>

  • 使用 -N 按照分組匹配操做對象 <pre>salt -N 'UBUNTU-GROUPS' cmd.run "uptime" </pre>

  • 使用 -G 按照查詢信息匹配操做對象選項 <pre>salt -G 'cpuarch:x86_64' grains.item num_cpus </pre>

  • 查看受控端模塊函數幫助信息 <pre>salt '*' sys.doc</pre>

  • 查看受控端模塊函數幫助信息 <pre>salt '*' sys.doc service</pre>

salt-master

  • 啓動服務 <pre> salt-master -d </pre>

salt-key

  • 查看證書 <pre> salt-key -L </pre>
  • 接受指定的證書 <pre> salt-key -a KeyName </pre>
  • 接受全部未認證的證書 <pre> salt-key -A </pre>
  • 刪除全部證書 <pre> salt-key -D </pre>
  • 刪除指定的證書 <pre> salt-key -d KeyName </pre>

salt-cp

*批量複製文件到受控主機

<pre> salt-cp '*' /home/vmdisk.img /var/lib/libvirtsh/vmdisk.img </pre>

*拷貝小文件頗有效,簡單測試,拷貝2.5MB以上的文件就會超時報錯

salt-run

salt-run 是用於管理虛擬機的命令

  • 查詢虛擬機信息 <pre> salt-run virt.hyper_info </pre>
  • 查詢虛擬機信息 <pre> salt-run virt.query </pre>
  • 基於雲鏡像建立一個新的虛擬機 <pre>salt-run virt.init centos1 2 512 salt://centos.img</pre>

salt-ssh

編輯配置文件 /etc/salt/roster

<pre> ubuntu-12.04-001: host: 10.8.0.18 user: root passwd: root sudo: True </pre>

  • 簡單的測試 <pre> salt-ssh '*' test.ping </pre>
  • 測試執行命令 <pre> salt-ssh '*' -r "ifconfig -a" </pre>

salt-syndic

salt的master和minion的交互很大程度上都和網絡有關係,好比在管理多個國家的機器的時候(好比大中華局域網),一個master控制多個master,同時被控制的master又能夠控制不少的minion,就比如是在 master 和 minions 之間又加了一層的分佈式架構。

salt-minion

啓動服務 <pre> salt-minion -d </pre>

salt-call

內置模塊列表

參考文檔

唧唧歪歪

  • saltstack 可能因爲比較新的緣故,版本之間支持的模塊差別較大,建議最好主控端,受控端使用相同版本的軟件包,好比ssh_auth模塊從0.17.2版本纔開始出現。

問題:

  • 證書管理 ssh_auth salt 模塊.優先處理 (已完成)
  • 配置倉庫,符號連接 (已完成)
  • salt配置倉庫可否託管目錄? (已完成)
  • 一臺機器是否屬於多個組? (已完成)
  • salt 配置倉庫 致命錯誤狀況可否回滾? (已完成)
  • 是否支持,配置模板 (已完成)
  • 怎麼支持自定義的模塊 (部分)
  • 如何輸出給程序解析結果? (已完成)
  • 如何針對 特例機器進行定義配置?
  • 是否支持 lsattr 如何保證重要配置文件不輕易被更改
  • 主機列表管理功能, 查詢當前主機列表的託管狀態
  • 自動計劃任務以及,以及遠程執行結果跟蹤分析,
  • 細粒度的主機權限認證控制,(LDAP)
  • salt-call

建議:

  • 主機命名分組避免使用正則表達式

FAQ:

  • A: Salt配置倉庫託管的配置文件是否支持符號連接?

  • Q: Salt配置倉庫支持文件符號連接。

  • A: salt 配置倉庫中配置項存在致命錯誤狀況可否回滾?

  • Q: 主要保證受控端主機網絡通暢,配置倉庫結合svn版本控制工具,就能夠實現回滾功能。

  • A: salt 是否支持測試執行?

  • Q: Salt支持執行測試,須要作的僅僅是將Test設置爲True

    <pre> salt 'minion1.example.com' state.highstate -v test=True </pre>

  • A: salt 是否支持配置模板?

  • Q: Salt默認使用yaml_jinja渲染器,還支持其餘渲染器,包括:yaml_mako,使用Mako模板引擎;yaml_wempy,使用Wempy模板引擎;py,直接使用Python寫SLS文件;pydsl,創建在Python語法基礎上的描述語言。

  • A: 如何輸出給程序解析結果?

  • Q: salt 能夠將執行結果是輸出爲json格式,yaml等格式,見salt PDF文檔 756 頁!例如:

    <pre>salt '*' test.ping --out json state.show_highstate --out yaml state.show_sls edit.vim --out pprint </pre>

相關文章
相關標籤/搜索