基於Salt Master/Minions快速構建Salt SSH環境

前置閱讀

環境說明

開工

創建用於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,再也不用擔心是先有雞還是先有蛋的問題了.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章