前置閱讀
環境說明
開工
創建用於Salt SSH環境的用戶及key認證管理環境
配置Mine,以獲取Minion id及IP地址
生成Salt Rosters
應用Salt SSH
後話
Salt 0.17版本已發佈,該版本中重要的特性是引入了Salt SSH系統,提供了無需Minion、基於SSH的維護方式。原有的Salt維護環境已經初具規模,再手動重新構建Salt SSH環境成本較高。偷懶是人的天性,利用原有SaltStack Master/Minions環境,如何快速構建新的Salt SSH維護環境將是本文的主題.
前置閱讀
預則立,不預則廢。閱讀本文前先閱讀如下文章:
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,再也不用擔心是先有雞還是先有蛋的問題了.