saltstack的基础入门文档
摘要?saltstack 和 Puppet Chef 一樣可以讓你同時在多臺服務器上執行命令也包括安裝和配置軟件。Salt 有兩個主要的功能:配置管理和遠程執行。 這里講述了saltstack的基本使用方法。
目錄[-]
saltstack
簡述
安裝
debian/ubuntu
RHEL6/CentOS6
基本配置
服務端配置
客戶端配置
檢查服務
證書管理
簡單的測試
salt的基本使用
實時管理
nodegroup
targeting
配置管理,或稱狀態管理
配置受控端
配置主控端,開啟配置管理功能
稍微復雜的例子:管理ssh服務
參考
二進制軟件包
主控端命令列表
受控端命令列表
啟用擴展配置文件目錄
命令示例
salt
salt-master
salt-key
salt-cp
salt-run
salt-ssh
salt-syndic
salt-minion
salt-call
內置模塊列表
參考文檔
唧唧歪歪
FAQ:
saltstack
簡述
Salt 和 Puppet Chef 一樣可以讓你同時在多臺服務器上執行命令也包括安裝和配置軟件。Salt 有兩個主要的功能:配置管理和遠程執行。
源碼: https://pypi.python.org/pypi/salt
文檔: http://docs.saltstack.com/
安裝
debian/ubuntu
設置debian更新源
設置ubuntu更新源
安裝軟件包
RHEL6/CentOS6
設置RHEL/CentOS更新源
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm或
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm/
[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安裝軟件包
基本配置
saltstack 的配置文件格式
Salt默認使用PyAMl語法(http://pyyaml.org) 作為它的模板文件的格式,其他很多模板語言在Salt中是可以使用的。?
一定要按照正確的格式書寫YAML,比如最基本的,它使用到兩個空格代替tab,: 或 - 后面要有空格。
例一:
interface:?0.0.0.0 log_file:?/var/log/salt/master? key_logfile:?/var/log/salt/key例二:
file_roots:base:-?/srv/salt服務端配置
主控端基本設置?
編輯配置文件 /etc/salt/master,修改如下所示配置項,去掉前面的注釋符
master默認監聽兩個端口, 4505(publish_port)為salt的消息發布系統,4506(ret_port)為salt客戶端與服務端通信的端口,所以確保客戶端能跟服務端的這2個端口通信
客戶端配置
受控端基本設置?
編輯配置文件 /etc/salt/minion,修改如下所示配置項,去掉前面的注釋符#
最基本字段:
master: 服務端,
主機名 id: 客戶端主機名(在服務端看到的客戶端的名字,可以不設置,默認與hostname相同)
小技巧:查看配置文件信息,過濾注釋語句
sed?-e?'/^#/d;/^$/d'?/etc/salt/minion檢查服務
主控端,和受控端 啟動各自的服務,確保服務啟動后沒有任何報錯信息,如果異常請檢查相應日志文件處理
主控端:?service?salt-master?restart 受控端:?service?salt-minion?restart證書管理
如果一切順利,請繼續!
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發送指令了
受控端證書認證后會顯示如下情形:
Accepted?Keys: ubuntu-server-001 Unaccepted?Keys: Rejected?Keys:主控端和被控端的證書默認都存放在 /etc/salt/pki/ 中,如果遇到證書不生效的情況下,可在主控端證書存放目錄刪除受控端證書,重新認證一下。
簡單的測試
你可以從master 使用一個內置命令 test.ping 來測試他們之間的連接
salt?'*'?cmd.run?test.ping它應該有如下輸出:
ubuntu-server-001:?True測試與外網的連接
salt?'*'?cmd.run?"ping?-c?4?baidu.com"salt更多命令及手冊
salt?'*'?sys.doc如果能返回正確結果,salt的基本配置就完成了。
salt的基本使用
salt按照操作模式可以分為實時管理和配置管理:
遠程執行,也可以稱為實時管理: 通過執行命令來完成管理任務,優點就是實時性高,缺點就是無法跟蹤,保存配置狀態;?
配置管理,也可以稱為狀態管理: 通過編寫特定的文件用來記錄目標系統的配置狀態,然后將這些受控主機會定期同步這些配置狀態信息;
實時管理
有時候我們需要臨時的查看一臺或多臺機器上的某個文件,或者執行某個命令,最通用的模塊是 cmd.run
基本操作命令通用格式
'*' target,操作對象,可以使用salt命令的擴展模式 -E -G 等
cmd.run func, 執行模塊,函數
參數 args, 傳遞給 執行模塊的參數,
salt也將一些常用的命令做了集成,比如,查看所有節點磁盤使用情況:
salt?'*'?disk.usage其他命令示例:
salt?'*'?grains.ls??????查看grains分類 salt?'*'?grains.items???查看grains所有信息 salt?'*'?grains.item?osrelease?查看grains某個信息 salt?'*'?pillar.items???查看pillar所有信息更多請參考文檔:http://docs.saltstack.com/ref/modules/all/index.html
nodegroup
作用:對minion進行分組
參考文檔: http://docs.saltstack.com/topics/targeting/nodegroups.html
編輯 /etc/salt/master 啟用分組,最基本分組示例:
nodegroups:UBUNTU:?'ubuntu-12.04-*'CENTOS:?'centos-6.4-*'建立分組之后,操作對象使用分組功能才生效,更多示例:
nodegroups:group1:?'L@foo.domain.com,bar.domain.com,baz.domain.com?or?bl*.domain.com'group2:?'G@os:Debian?and?foo.domain.com'在state或者pillar中引用的時候,如下:
base:group1:-?match:?nodegroup????-?webserver請確保這條屬性存在
-?match:?nodegroup更多請參考文檔:http://docs.saltstack.com/topics/targeting/nodegroups.html
targeting
從最基本的測試命令來講述:
salt?'*'?test.ping引號中以實現很強大的minion的過濾與匹配技術
常用命令:
salt?'shell正則'?命令 salt?-E?'prel?正則'?命令 salt?-N??GroupName??命令 salt?-L?'server_id1,server_id2,server_id3'?命令示例:
salt?-C?'webserv*?and?G@os:Debian?or?E@web-dc1-srv.*'?test.ping更多請參考官方文檔: http://docs.saltstack.com/topics/targeting/compound.html
配置管理,或稱狀態管理
個人理解,管理一個服務器應用可以從 軟件包,配置文件,服務管理 這個三個最基本角度來出發,要啟用配置管理,首先應對受控端進行額外的配置
配置受控端
配置受控端主機,以root用戶身份來接受主控端主機的管理
編輯/etc/salt/minion
配置主控端,開啟配置管理功能
Salt的配置管理指令和文件保存在默認在/srv/salt目錄下,這里存放著所有的配置文件,和一些你想要拷貝到從服務器的文件。
配置主控端,編輯 /etc/salt/master 文件
file_roots:base:-?/srv/salt手動創建目錄和配置文件 /srv/salt/top.sls
/srv/salt/top.sls 為默認入口配置文件,這個配置項可以自定義,基本配置如下:
詳細解釋一下這個本配置文件的參數
base: 默認的的起點配置項:
'*': 這個引號內的是匹配對象,針對所有受控主機
ubuntu.vim 就是指資源文件/srv/salt/ubuntu/vim.sls
一個簡單的例子:ubuntu 基本系統默是不安裝 vim 我們可以利用配置管理把被托管的ubuntu主機全部安裝上vim
編輯 /srv/salt/ubuntu/vim.sls
vim:pkg:-?name:?vim-?installed執行命令
salt?'*'?state.highstate請注意觀察返回結果,查看/var/log/salt/下面的日志來調試saltstack配置。
稍微復雜的例子:管理ssh服務
一個更復雜的例子:管理ssh服務,并且使用salt托管配置文件
/srv/salt/top.sls 內容:
/srv/salt/ubuntu/ssh.sls
簡要解釋一下配置文件
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
同樣,使用如下命令來驗證結果需要
salt?'*'?state.highstate參考
二進制軟件包
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
default_include:?master.d/*.conf受控端 /etc/salt/minion
default_include:?master.d/*.conf
命令示例
salt
測試與受控主機網絡是否通暢
salt?'*'?cmd.run?test.ping在全部受控主機行執行命令
salt?'*'?cmd.run?“uptime”使用 -E 按照正則匹配操作對象
salt?-E?'ubuntu*'?cmd.run?“uptime”使用 -N 按照分組匹配操作對象
salt?-N?'UBUNTU-GROUPS'?cmd.run?“uptime”使用 -G 按照查詢信息匹配操作對象選項
salt?-G?'cpuarch:x86_64'?grains.item?num_cpus查看受控端模塊函數幫助信息
salt?'*'?sys.doc查看受控端模塊函數幫助信息
salt?'*'?sys.doc?service
salt-master
啟動服務
salt-master?-d
salt-key
查看證書
salt-key?-L接受指定的證書
salt-key?-a?KeyName接受所有未認證的證書
salt-key?-A刪除所有證書
salt-key?-D刪除指定的證書
salt-key?-d?KeyName
salt-cp
*批量復制文件到受控主機
salt-cp?'*'?/home/vmdisk.img?/var/lib/libvirtsh/vmdisk.img*拷貝小文件很有效,簡單測試,拷貝2.5MB以上的文件就會超時報錯
salt-run
salt-run 是用于管理虛擬機的命令
查詢虛擬機信息
salt-run?virt.hyper_info查詢虛擬機信息
salt-run?virt.query基于云鏡像創建一個新的虛擬機
salt-run?virt.init?centos1?2?512?salt://centos.imgsalt-ssh
編輯配置文件 /etc/salt/roster
ubuntu-12.04-001: host:?10.8.0.18 user:?root passwd:?root sudo:?True簡單的測試
salt-ssh?'*'?test.ping測試執行命令
salt-ssh?'*'?-r?“ifconfig?-a”
salt-syndic
salt的master和minion的交互很大程度上都和網絡有關系,比如在管理多個國家的機器的時候(比如大中華局域網),一個master控制多個master,同時被控制的master又可以控制很多的minion,就好比是在 master 和 minions 之間又加了一層的分布式架構。
salt-minion
啟動服務
salt-minion?-dsalt-call
內置模塊列表
內置的狀態模塊的完整列表: http://docs.saltstack.com/ref/states/all/index.html
內置的執行模塊的完整列表: http://docs.saltstack.com/ref/modules/all/index.html
參考文檔
http://netkiller.github.io/linux/management/saltstack/
http://blog.halfss.com/blog/2013/06/15/saltxiang-guan-shi-yong/
http://www.ituring.com.cn/article/42398
唧唧歪歪
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
salt?'minion1.example.com'?state.highstate?-v?test=TrueA: salt 是否支持配置模板?
Q: Salt默認使用yaml_jinja渲染器,還支持其他渲染器,包括:yaml_mako,使用Mako模板引擎;yaml_wempy,使用Wempy模板引擎;py,直接使用Python寫SLS文件;pydsl,建立在Python語法基礎上的描述語言。
A: 如何輸出給程序解析結果?
Q: salt 可以將執行結果是輸出為json格式,yaml等格式,見salt PDF文檔 756 頁!例如:
salt?'*'?test.ping?--out?json state.show_highstate?--out?yaml state.show_sls?edit.vim?--out?pprint
轉載于:https://blog.51cto.com/lingjing/1653176
總結
以上是生活随笔為你收集整理的saltstack的基础入门文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5月22日阿里云网络变更公告
- 下一篇: 戒烟成功