前置閱讀html
環境說明服務器
開工ssh
建立用於Salt SSH環境的用戶及key認證管理環境ide
配置Mine,以獲取Minion id及IP地址測試
生成Salt Rostersui
應用Salt SSHrest
後話server
Salt 0.17版本已發佈,該版本中重要的特性是引入了Salt SSH系統,提供了無需Minion、基於SSH的維護方式。原有的Salt維護環境已經初具規模,再手動從新構建Salt SSH環境成本較高。偷懶是人的天性,利用原有SaltStack Master/Minions環境,如何快速構建新的Salt SSH維護環境將是本文的主題.htm
前置閱讀ip
預則立,不預則廢。閱讀本文前先閱讀以下文章:
Salt 0.17 Release Note: http://docs.saltstack.com/topics/releases/0.17.0.html
Salt SSH: http://docs.saltstack.com/topics/ssh/
Salt Rosters: http://docs.saltstack.com/topics/ssh/roster.html
環境說明
Minion版本: 本文會採用 Salt Mine 獲取已有的Minion ID及IP地址,因爲Salt Mine爲0.15.0引入的新功能,因此須要保證Minion的版本等於或高於0.15.0
Master的安裝採用EPEL倉庫yum方式
全部minion端sshd服務已啓動,並容許Master訪問
Master所在服務器上同時安裝有Minion並運行Master進行管理, 對應的Minion ID爲 salt
Salt file_roots目錄爲 /srv/salt/ , pillar_roots目錄爲 /srv/pillar/
開工
Note
如下全部操做在Master端進行
建立用於Salt SSH環境的用戶及key認證管理環境
生成Master SSH key
## 建立master ssh key目錄
mkdir /etc/salt/pki/master/ssh/
## 生成Master SSH key
cd /etc/salt/pki/master/ssh/
ssh-keygen -t rsa -P "" -f salt-ssh.rsa
## 複製master public key至 salt fileserver
cp /etc/salt/pki/master/ssh/salt-ssh.rsa.pub /srv/salt/salt/files/salt-ssh.rsa.pub
編寫用於Salt SSH管理的用戶及key認證狀態管理文件, /srv/salt/salt/ssh/init.sls
salt-user:
{# salt user #}
user.present:
- name: salt
{# salt user sudoer #}
file.managed:
- name: /etc/sudoers.d/salt
- source: salt://salt/files/etc/sudoers.d/salt
- require:
- user: salt-user
salt-master-key:
ssh_auth.present:
- user: salt
- source: salt://salt/files/salt-ssh.rsa.pub
- require:
- user: salt-user
salt 用戶對應的sudoer文件 /srv/salt/salt/files/etc/sudoers.d/salt:
Defaults:salt !requiretty
salt ALL=(ALL) NOPASSWD: ALL
應用狀態
salt '*' state.sls salt.ssh
配置Mine,以獲取Minion id及IP地址
配置Salt Mine, /srv/pillar/salt/mine.sls
mine_functions:
network.ip_addrs:
- eth0
配置pillar top.sls, /srv/pillar/top.sls
base:
'*':
- salt.mine
刷新Pillar,並驗證Salt Mine配置
salt '*' saltutil.refresh_pillar
salt '*' pillar.get mine_functions
更新Salt Mine,並測試獲取全部Minions的ID及IP
salt '*' mine.update
salt 'salt' mine.get '*' network.ip_addrs
生成Salt Rosters
配置Salt Rosters state
/srv/salt/salt/ssh/roster.sls
salt-rosters:
{# salt rosters file for salt-ssh #}
file.managed:
- name: /etc/salt/roster
- source: salt://salt/files/etc/salt/roster
- template: jinja
/srv/salt/salt/files/etc/salt/roster:
{% for eachminion, each_mine in salt['mine.get']('*', 'network.ip_addrs').iteritems() -%}
`eachminion`:
host: {{each_mine[0]}}
user: salt
sudo: True
{% endfor -%}
生成Salt Rosters
salt 'salt' state.sls salt.ssh.roster
應用Salt SSH
將Master升級至0.17及以上版本(EPEL Stable當前版本爲已經爲0.17.1-1), 至此, Salt SSH環境已經構建完畢
yum update salt-master
service salt-master restart
測試Salt SSH
## 運行Salt Module
salt-ssh '*' test.ping
## 運行原始SHELL命令
salt-ssh '*' -r 'uptime'
後話
Salt這是要搶 Fabric 飯碗的節奏啊,我的更喜歡Salt Master/Minions這樣的管理方式,Salt SSH做爲補充,用於升級Minion、重啓Minion等等自維護工做仍是很靠譜的。有了Salt SSH,不再用擔憂是先有雞仍是先有蛋的問題了.