saltstack 基礎入門文檔
saltstack 和 Puppet Chef 一樣可以讓你同時在多臺服務器上執行命令也包括安裝和配置軟件。Salt 有兩個主要的功能:配置管理和遠程執行。這里講述了saltstack的基本使用方法。
saltstack
簡述
Salt 和 Puppet Chef 一樣可以讓你同時在多臺服務器上執行命令也包括安裝和配置軟件。Salt 有兩個主要的功能:配置管理和遠程執行。
- 源碼: https://pypi.python.org/pypi/salt
- 文檔: http://docs.saltstack.com/
安裝
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.listwget -q -O- “http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6” | apt-key add -
- 安裝軟件包
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
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
- 安裝軟件包
yum update yum install salt-master # On the salt-master yum install salt-minion # On each salt-minion
基本配置
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,修改如下所示配置項,去掉前面的注釋符
interface: 0.0.0.0 log_file: /var/log/salt/master # 記錄主控端運行日志 key_logfile: /var/log/salt/key # 記錄認證證書日志
客戶端配置
受控端基本設置
編輯配置文件 /etc/salt/minion,修改如下所示配置項,去掉前面的注釋符#
master: 42.121.124.237 # 設置主控端IP id: ubuntu-server-001 # 設定受控端編號 log_file: /var/log/salt/minion # 記錄受控端運行日志 key_logfile: /var/log/salt/key # 記錄認證證書日志
小技巧 查看配置文件信息,過濾注釋語句:__
sed -e '/^#/d;/^$/d' /etc/salt/minion
檢查服務
主控端,和受控端 啟動各自的服務,確保服務啟動后沒有任何報錯信息,如果異常請檢查相應日志文件處理
主控端: service salt-master restart 受控端: service salt-minion restart
證書管理
如果一切順利,請繼續!
saltstack 主控端是依靠openssl證書來與受控端主機認證通訊的,受控端啟動后會發送給主控端一個公鑰證書文件,在主控端用 salt-key 命令來管理證書。
salt-key -L # 用來查看證書情況 salt-key -a # 用來管理接受證書
受控端證書認證后會顯示如下情形:
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的基本配置就完成了。
進階,配置管理
個人理解,管理一個服務器應用可以從 軟件包,配置文件,服務管理 這個三個最基本角度來出發,要啟用配置管理,首先應對受控端進行額外的配置
啟用擴展配置文件目錄
-
主控端 /etc/salt/master
default_include: master.d/*.conf
-
受控端 /etc/salt/minion
default_include: master.d/*.conf
配置受控端
- 配置受控端,以root用戶身份來接受主控端的控制 編輯/etc/salt/minion
user: root
- 配置受控端同步,每隔60秒與主控端進行同步一次 編輯/etc/salt/minion
schedule: highstate: function: state.highstate seconds: 60
配置主控端
一般來講,Salt的配置管理指令和文件保存在/srv/salt目錄下,這里存放著所有的配置文件,和一些你想要拷貝到從服務器的文件。Salt 的特點之一是包含一個文件服務器。雖然Salt不會在你的主服務器創建系統文件,但是所有的配置管理發生在/srv/salt目錄中。
- 編輯 /etc/salt/master 取消注釋即刪除#號,配置倉庫根目錄下的 top.sls 為默認入口配置文件,這個配置項可以自定義,基本配置如下:
file_roots: base: - /srv/salt
- 創建 /srv/salt/top.sis 目錄和文件
base: '*': - ubuntu.vim
詳細解釋一下這個本配置文件的參數
- 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服務,并且使用salt托管配置文件
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
簡要解釋一下配置文件
- 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
如果需要管理更復雜的服務器群,下面是一個稍微復雜的例子
/srv/salt/top.sls 內容:
base: 'ubuntu-server-*': - ubuntu.vim 'ubuntu-server-001': - ubuntu.servers 'centos-server-001': - rhel.servers
配置倉庫目錄層次結構
/srv/salt/ ├── top.sls ├── rhel │ └── servers.sls └── ubuntu ├── servers.sls ├── ssh_config └── vim.sls
最后,補充一點,把配置倉庫和版本控制工具結合起來,將是一件更美好的事情。
參考
二進制軟件包
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 客戶端程序
基本操作
基本操作命令通用格式
命令 對象 執行模塊 參數 salt '*' cmd.run "ping -c 4 baidu.com" '*' 操作對象 可以使用salt命令的擴展模式 -E -G .. cmd.run 執行模塊 參數 傳遞給執行模塊的參數
分組功能
編輯 /etc/salt/master
nodegroups: UBUNTU: 'ubuntu-12.04-*' CENTOS: 'centos-6.4-*'
建立分組之后,操作對象使用分組功能才生效
命令示例
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.img
salt-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 -d
salt-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/
唧唧歪歪
- saltstack 可能由于比較新的緣故,版本之間支持的模塊差異較大,建議最好主控端,受控端使用相同版本的軟件包;
問題:
- 證書管理 ssh_auth salt 模塊(優先處理)
- 配置倉庫,符號鏈接
- 是否支持,配置模板
- 如何針對 特例機器進行定義配置?
- 一臺機器是否屬于多個組
- salt 配置倉庫 致命錯誤情況能否回滾
- 是否支持 lsattr 如何保證重要配置文件不輕易被更改
- 如何輸出給程序解析結果
- 怎么支持自定義的模塊
- 主機命名分組避免使用
來自:http://my.oschina.net/u/877567/blog/182923