Linux學習總結(七十三)自動化運維之saltstack

1 認識自動化運維

傳統運維效率低,大多工做人爲完成
傳統運維工做繁瑣,容易出錯
傳統運維每日重複作相同的事情
傳統運維沒有標準化流程
傳統運維的腳本繁多,不能方便管理
自動化運維就是要解決上面全部問題html

2 常見自動化運維工具

Puppet (www.puppetlabs.com)基於rubby開發,c/s架構,支持多平臺,可管理配置文件、用戶、cron任務、軟件包、系統服務等。 分爲社區版(免費)和企業版(收費),企業版支持圖形化配置。
Saltstack(官網 https://saltstack.com,文檔docs.saltstack.com )基於python開發,c/s架構,支持多平臺,比puppet輕量,在遠程執行命令時很是快捷,配置和使用比puppet容易,能實現puppet幾乎全部的功能。
Ansible (www.ansible.com )更加簡潔的自動化運維工具,不須要在客戶端上安裝agent,基於python開發。能夠實現批量操做系統配置、批量程序的部署、批量運行命令。python

3 saltstack 安裝

saltstack介紹https://docs.saltstack.com/en/latest/topics/index.html
可使用salt-ssh遠程執行,相似ansible,
也支持c/s模式,下面咱們將講述該種模式的使用,須要準備兩臺機器
226.129爲服務端,226.130爲客戶端
設置hostname以及hosts,lvlinux-1,lvlinux-2linux

hostnamectl set-hostname lvlinux-1
vim /etc/hosts
192.168.226.129 lvlinux-1
192.168.226.130 lvlinux-2

兩臺機器上都要作
兩臺機器所有安裝saltstack yum源
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
129上執行 yum install -y salt-master salt-minion
130上執行 yum install -y salt-minion
啓動salt相關服務
129上編輯配置文件
vi /etc/salt/minion //增長
master: lvlinux-1
啓動服務systemctl start salt-master; systemctl start salt-minion
130上編輯配置文件
vi /etc/salt/minion //增長
master: lvlinux-1
啓動服務systemctl start salt-minion
服務端監聽4505和4506兩個端口,4505爲消息發佈的端口,4506爲和客戶端通訊的端口nginx

4saltstack 配置認證

master端和minion端通訊須要創建一個安全通道,傳輸過程須要加密,因此得配置認證,也是經過密鑰對來加密解密的
minion在第一次啓動時會在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub爲公鑰,它會把公鑰傳輸給master
master第一次啓動時也會在/etc/salt/pki/master下生成密鑰對,當master接收到minion傳過來的公鑰後,經過salt-key工具接受這個公鑰,一旦接受後就會在/etc/salt/pki/master/minions/目錄裏存放剛剛接受的公鑰,同時客戶端也會接受master傳過去的公鑰,把它放在/etc/salt/pki/minion目錄下,並命名爲minion_master.pub
以上過程須要藉助salt-key工具來實現
執行以下命令 salt-key -a lvlinux-2// -a後面跟主機名,能夠認證指定主機
salt-key -a lvlinux-2
salt-key 命令用法web

-a  後面跟主機名,認證指定主機
 -A 認證全部主機
 -r  跟主機名,拒絕指定主機
 -R  拒絕全部主機
 -d 跟主機名,刪除指定主機認證
 -D 刪除所有主機認證
 -y 省略掉交互,至關於直接按了y

5 saltstack 遠程執行命令

salt '*' test.ping //這裏的*表示全部已經簽名的minion端,也能夠指定一個
salt 'lvlinux-1' test.ping
salt '*' cmd.run "hostname"
說明: 這裏的*必須是在master上已經被接受過認證的客戶端,能夠經過salt-key查到,一般是咱們已經設定的id值。關於這部份內容,它支持通配、列表以及正則。 好比兩臺客戶端aming-01,aming-02, 那咱們能夠寫成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多個機器用逗號分隔,並且須要加-L,使用正則必需要帶-E選項。 它還支持grains,加-G選項,pillar 加-I選項,下面會介紹到。shell

6 saltstack - grains

grains是在minion啓動時收集到的一些信息,好比操做系統類型、網卡ip、內核版本、cpu架構等。
salt 'lvlinux-2' grains.ls列出全部的grains項目名字
salt 'lvlinux-2' grains.items 列出全部grains項目以及值
grains的信息並非動態的,並不會實時變動,它是在minion啓動時收集到的。
咱們能夠根據grains收集到的一些信息,作配置管理工做。
grains支持自定義信息。
自定義grains
minion上:
vim /etc/salt/grains //添加:數據庫

role: nginx 
env: test

重啓minion服務
systemctl restart salt-minion
master上:
獲取grains:
salt '*' grains.item role env
能夠藉助grains的一些屬性信息來執行
salt -G role:nginx cmd.run 'hostname'
備註:
在minion端自定義grains, 以key-vlaue的形式,能夠將處理動做歸類。針對不一樣的minion端就能夠定義不一樣的key-value,從而在master端執行命令時,區分不一樣類型的minion端。好比,咱們要在web類服務器安裝nginx,在DB類服務器安裝數據庫。就能夠作一下區分。在上面例子中,role爲key,nginx 爲value。中間以冒號,空格做爲分割。vim

7 saltstack – pillar

pillar和grains不同,是在master上定義的,而且是針對minion定義的一些信息。像一些比較重要的數據(密碼)能夠存在pillar裏,還能夠定義變量等。
配置自定義pillar
vim /etc/salt/master
找到以下配置://去掉前面的井號安全

pillar_roots:
  base: #此行前面有兩個空格
    - /srv/pillar #此行前面有4個空格

mkdir /srv/pillar
vim /srv/pillar/test.sls //內容以下
conf: /etc/123.conf
vi /srv/pillar/top.sls //內容以下bash

base:
  'lvinux-2': #此行前面有兩個空格
    - test #此行前面有4個空格

重啓master
systemctl restart salt-master
當更改完pillar配置文件後,咱們能夠經過刷新pillar配置來獲取新的pillar狀態:
salt '*' saltutil.refresh_pillar
驗證:salt '*' pillar.item conf
pillar一樣能夠用來做爲salt的匹配對象。好比 salt -I 'conf:/etc/123.conf' test.ping
備註:此次咱們在master上定義,它的核心也跟grains相同,也是以key-value形式能夠對批處理進行分類。首先咱們在master配置文件中打開自定義pillar 的項目入口。其中/srv/pillar就是文件載入路徑。之後的自定義都放在該路徑下。用以上例子來講明的話,咱們首先要定義咱們的具體應用文件,
test.sls. 其中conf爲key值,/etc/123.conf 爲value值,該路徑文件暫時沒有實際含義。僅做爲一個名稱。接下來咱們還要定義應用的入口文件,top.sls 該文件以base 開頭,定義了要操做的主機,還有要調用的應用文件名稱。

8 saltstack – 安裝配置httpd

master上 vi /etc/salt/master //搜索找到file_roots
打開以下內容的註釋:

file_roots:
  base: #前面有兩個空格
    - /srv/salt #前面有4個空格

mkdir /srv/salt ; cd /srv/salt
vi /srv/salt/top.sls //加入以下內容

base:
  '*':  #前面有兩個空格
    - httpd #前面有4個空格

意思是,在全部的客戶端上執行httpd模塊
重啓 systemctl restart salt-master
master上vi /srv/salt/httpd.sls //加入以下內容,這個就是httpd模塊的內容

httpd-service:
  pkg.installed:
    - names:    //這裏若是隻有一個服務,那麼就能夠寫成 –name: httpd 不用再換一行了。
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

說明: httpd-service是id的名字,自定義的。pkg.installed 爲包安裝函數,下面是要安裝的包的名字。service.running也是一個函數,來保證指定的服務啓動,enable表示開機啓動。層級結構之間依次縮進兩個空格
執行: salt 'lvlinux-2' state.highstate//執行過程會比較慢,由於客戶端上在yum install httpd httpd-devel
備註:以上內容總體框架跟pillar用法類似,由於它一樣是針對master操做,也是在master配置文件中打開應用入口file_roots,再建立接引文件top.sls ,下來建立應用文件httpd.sls.不過此次應用文件httpd.sls中調用了兩個功能模塊,pkg.installed 和 service.running

9 saltstack – 配置管理文件

master上vi /srv/salt/test.sls //加入以下內容

file_test:
  file.managed:
    - name: /tmp/lvlinux.com
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 600

說明:第一行的file_test爲自定的名字,表示該配置段的名字,能夠在別的配置段中引用它,source指定文件從哪裏拷貝,這裏的salt://test/123/1.txt至關因而/srv/salt/test/123/1.txt
mkdir /srv/salt/test/123
cp /etc/passwd /srv/salt/test/123/1.txt
vi /srv/salt/top.sls//改成以下內容

base:
  '*':
    - test

執行: salt 'lvlinux-2' state.highstate
檢查lvlinux-2上是否有/tmp/lvlinux.com,檢查內容以及權限
備註:簡單來講以上實現了文件的批量分發,相似於用rsync作循環同步的shell腳本。

10 saltstack – 配置管理目錄

master上vi /srv/salt/test_dir.sls //加入以下內容

file_dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test/123
    - user: root
    - file_mode: 640
    - dir_mode: 750
    - mkdir: True
    - clean: True

//加上最後一句以後,源刪除文件或目錄,目標也會跟着刪除,不然不會刪除
修改top.sls, vi /srv/salt/top.sls //改成以下內容

base:
  '*':
    - test_dir

執行: salt 'lvlinux-2' state.highstate
檢查lvlinux-2上是否有/tmp/testdir,檢查裏面的目錄、文件以及權限
說明:這裏有一個問題,若是source對應的目錄裏有空目錄的話,客戶端上不會建立該目錄

11 saltstack – 配置管理遠程命令

master上vi /srv/salt/shell_test.sls //加入以下內容

shell_test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root

vi /srv/salt/test/1.sh //加入以下內容

#!/bin/bash
touch /tmp/111.txt 
if [ ! -d /tmp/1233 ]
then
    mkdir /tmp/1233
fi

更改top.sls內容

base:
  '*':
    - shell_test

執行: salt 'lvlinux-2' state.highstate
檢查是否有/tmp/111.txt和/tmp/1233
備註:就是關聯shell腳本,實現命令的封裝。

12 saltstack – 配置管理任務計劃

master上vi /srv/salt/cron_test.sls //加入以下內容

cron_test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: '*'
    - month: '*'
    - dayweek: '*'

注意,*須要用單引號引發來。固然咱們還可使用file.managed模塊來管理cron,由於系統的cron都是以配置文件的形式存在的。想要刪除該cron,須要增長

cron.absent:
  - name: /bin/touch /tmp/111.txt

二者不能共存,要想刪除一個cron,那以前的present就得去掉。
更改top.sls

base:
  '*':
    - cron_test

執行: salt 'lvlinux-2' state.highstate
到lvinux-2上檢查cron,會看到提示# Lines below here are managed by Salt, do not edit
咱們不能隨意改動它,不然就無法刪除或者修改這個cron了。
crontab -l

13saltstack – 其它可能會用到的命令

cp.get_file 拷貝master上的文件到客戶端
salt '*' cp.get_file salt://test/1.txt /tmp/123.txt
cp.get_dir 拷貝目錄
salt '*' cp.get_dir salt://test/conf /tmp/ //會自動在客戶端建立conf目錄,因此後面不要加conf,若是寫成 /tmp/conf/ 則會在/tmp/conf/目錄下又建立conf
salt-run manage.up 顯示存活的minion
salt '*' cmd.script salt://test/1.sh 命令行下執行master上的shell腳本

14 salt-ssh 使用

salt-ssh不須要對客戶端作認證,客戶端也不用安裝salt-minion,它相似pssh/expect
安裝很簡單yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum install -y salt-ssh
vi /etc/salt/roster //增長以下內容

lvlinux-1:
  host: 192.168.226.129
  user: root
  passwd: lvlinux
lvinux-2:
  host: 192.168.226.130
  user: root
  passwd: lvlinux

salt-ssh --key-deploy '*' -r 'w'//第一次執行的時候會自動把本機的公鑰放到對方機器上,而後就能夠把roster裏面的密碼去掉,該命令就是用祕鑰認證遠程登錄到機器,根據roster文件裏定義的主機,依次執行w命令返回結果。

相關文章
相關標籤/搜索